## General information [#general-information] The B2CONNECT FIX server provides all the functionality necessary for real-time trading and receiving up-to-date market information via the Financial Information eXchange protocol. In this document, you can find a detailed description of the B2CONNECT FIX API, including the information about how to connect to a demo FIX server. The B2CONNECT FIX API is based on the version 4.4 of the Financial Information eXchange protocol. It’s assumed that the reader of this document is already familiar with the FIX protocol. To learn more about the protocol specification, see the [FIX Trading Community website](https://www.fixtrading.org/). If your trading engine is powered by Go, take a minute to learn about [SimpleFix Go](https://github.com/b2broker/simplefix-go/). This open-source library is provided by the B2CONNECT team to help you quickly integrate FIX messaging into your environment. The library is entirely written in Go and supports any FIX API version. ### Supported message types [#supported-message-types] The following message types can be assigned to the `<35> MsgType` field of a [Standard header](fix-api#standard-header): * `0` — [Heartbeat](fix-api#heartbeat) (Client ↔ B2CONNECT) * `1` — [Test Request](fix-api#test-request) (Client ↔ B2CONNECT) * `2` — [Resend Request](fix-api#resend-request) (Client ↔ B2CONNECT) * `3` — [Reject](fix-api#reject) (Client ← B2CONNECT) * `4` — [Sequence Reset](fix-api#sequence-reset) (Client ↔ B2CONNECT) * `5` — [Logout](fix-api#logout) (Client ↔ B2CONNECT) * `8` — [Execution Report](fix-api#execution-report) (Client ← B2CONNECT) * `9` — [Order Cancel Reject](fix-api#order-cancel-reject) (Client ← B2CONNECT) * `A` — [Logon](fix-api#logon) (Client → B2CONNECT) * `D` — [New Order Single](fix-api#new-order-single) (Client → B2CONNECT) * `F` — [Order Cancel Request](fix-api#order-cancel-request) (Client → B2CONNECT) * `V` — [Market Data Request](fix-api#market-data-request) (Client → B2CONNECT) * `W` — [Market Data — Snapshot/Full Refresh](fix-api#market-data-snapshot-full-refresh) (Client ← B2CONNECT) * `Y` — [Market Data Request Reject](fix-api#market-data-request-reject) (Client ← B2CONNECT) ### Standard header [#standard-header] All FIX messages must start with a **Standard header**. The **Standard header** includes the following fields: ### Standard trailer [#standard-trailer] Along with a Standard header, all FIX messages must also contain a **Standard trailer**. The **Standard trailer** includes the following fields: ## Session messages [#session-messages] The messages listed in this section are used to maintain any live FIX session with the B2CONNECT FIX server, including both [quoting](fix-api#quoting) and [trading](fix-api#trading) sessions. ### Heartbeat [#heartbeat] This message is sent back and forth between the FIX server and the client to check the connection status and in response to [Test Request](fix-api#test-request) messages. The **Heartbeat** message includes the following fields: ### Test Request [#test-request] This message is sent back and forth between the FIX server and the client in response to [Heartbeat](fix-api#heartbeat) messages as a means of connectivity check. The **Test Request** message includes the following fields: ### Resend Request [#resend-request] This message is sent by the client or FIX server to initiate the retransmission of messages, which may be required upon detecting a gap in the sequence numbers or losing a particular message. The **Resend Request** message includes the following fields: ### Reject [#reject] This message is sent by the FIX server upon receiving a malformed message from the client. The possible reason for rejection is specified in the `<373> SessionRejectReason` field. This message is unrelated to a trade-level rejection ([Order Cancel Reject](fix-api#order-cancel-reject)) issued when a FIX server is unable to place a requested order. The **Reject** message includes the following fields: #### Possible reasons [#possible-reasons] When the FIX server sends a [Reject](fix-api#reject) notification informing the client that a session-level request has been rejected, the `<373> SessionRejectReason` field can be set to one of the following values specifying the reason for message rejection: * `0` — an invalid tag number * `1` — a required tag is missing * `2` — a tag isn’t defined for this message type * `3` — a tag is undefined * `4` — a tag has no value assigned * `5` — an assigned value is incorrect (out of range) for this tag * `6` — an incorrect value data format * `7` — an issue related to decryption * `9` — an issue related to `CompID` * `10` — an accuracy issue related to `<52> SendingTime` * `11` — an invalid `<35> MsgType` * `12` — an XML validation error * `13` — the same tag appears more than once * `14` — a tag is specified not in the required order * `15` — a wrong order of repeating group fields * `17` — a non-“Data” value includes a field delimiter (an SOH character) * `99` — other (unspecified) reason ### Sequence Reset [#sequence-reset] This message is sent by the client or FIX server to indicate to the recipient the sequence number of the next message from the sender, immediately following the Sequence Reset message. This may be necessary to recover from a disconnect, in case if some messages were lost or their resending is not desirable. The **Sequence Reset** message includes the following fields: ### Logon [#logon] This message is sent by the client to initiate a FIX session. The **Logon** message includes the following fields: ### Logout [#logout] This message is sent by the client or FIX server to terminate a session. When terminated, the possible reason is specified in the `<58> Text` field. The **Logout** message includes the following fields: ## Demo mode [#demo-mode] The B2CONNECT FIX server supports a Demo mode that allows clients to establish a test connection and simulate quoting and trading sessions. Contact your account manager to obtain a set of settings and credentials. ## Quoting [#quoting] After connecting to the FIX server and establishing a live quoting session, the client can send a [Market Data Request](fix-api#market-data-request) to subscribe to quote updates streamed by B2CONNECT. To subscribe to multiple symbols, the client should send a separate [Market Data Request](fix-api#market-data-request) for each symbol. Upon successful subscription to a selected symbol, the FIX server starts streaming market data updates by sending [Market Data — Snapshot/Full Refresh](fix-api#market-data-snapshot-full-refresh) messages each time the market data is updated. The quote updates are streamed continuously for the entire duration of a FIX session. If a subscription request can’t be executed for some reason (for example, when a requested symbol isn’t found), the FIX server responds with a [Market Data Request Reject](fix-api#market-data-request-reject) message providing detailed information about an error. To terminate a specific subscription and stop receiving the updates, the client can send a [Market Data Request](fix-api#market-data-request) with the `<263> SubscriptionRequestType` set to `2` (standing for “Unsubscribe”). Upon sending a [Logout](fix-api#logout) request, the current session is closed and subscriptions to all ticker symbols are terminated. ### Market Data Request [#market-data-request] This message is sent by the client to start receiving up-to-date quoting data for a specified ticker symbol. The **Market Data Request** message includes the following fields: ### Market Data Request Reject [#market-data-request-reject] This message is sent by the FIX server to reject a [Market Data Request](fix-api#market-data-request) with invalid values. The **Market Data Request Reject** message includes the following fields: #### Possible reasons [#possible-reasons-1] The `<281> MDReqRejReason` field can be set to one of the following values specifying the reason for request rejection: * `0` — the specified symbol isn’t recognized * `1` — a duplicate `<262> MDReqID` * `2` — insufficient bandwidth * `3` — insufficient permissions * `4` — the specified `<263> SubscriptionRequestType` isn’t supported * `5` — the specified `<264> MarketDepth` isn’t supported * `6` — the specified `<265> MDUpdateType` isn’t supported * `8` — the specified `<269> MDEntryType` isn’t supported ### Market Data — Snapshot/Full Refresh [#market-data--snapshotfull-refresh] Such messages are continuously sent by the FIX server after the client subscribes to a ticker symbol. A new message is sent with each market data update. The **Market Data — Snapshot/Full Refresh** message includes the following fields: ## Trading [#trading] **Place an order** After establishing a trading session with the FIX server, the client can place a new order by sending a [New Order Single](fix-api#new-order-single) message. In response to this, the FIX server sends back an [Execution Report](https://docs.b2connect.b2broker.com/en/fix-api.html#execution-report) with the `<150> ExecType` field set to `A`, indicating that the order is placed successfully. If the order can’t be placed (for example, due to lack of credit funds or other issues), the report is sent with `<150> ExecType` set to `8`. After placing the order, the FIX server sends a separate report with `<150> ExecType` set to `F` each the order status changes: * If the order is executed partially, `<39> OrdStatus` is set to `1`. * When the order is fully filled, `<39> OrdStatus` is set to `2`. **Cancel an order** To cancel an open order, the client can send an [Order Cancel Request](fix-api#order-cancel-request). If the order is canceled (either explicitly by a trader, or automatically due to timeout), the [Execution Report](fix-api#execution-report) is sent with `<150> ExecType` set to `4`. In this case, the `<14> CumQty` field indicates the amount that has already been filled by the time the order was canceled, and `<151> LeavesQty` indicates the unfilled amount. If an order can’t be canceled for any reason, the FIX server sends back an [Order Cancel Reject](fix-api#order-cancel-reject) message indicating why the order cancellation failed. ### New Order Single [#new-order-single] This message is sent by the client to place a new order with specified parameters. The **New Order Single** message includes the following fields: ### Order Cancel Request [#order-cancel-request] This message is sent by the client to cancel an open order in its entire remaining amount. This request is assigned a unique `<11> ClOrdID` and is treated as a separate order. Upon successful cancellation of the order, an [Execution Report](fix-api#execution-report) is sent with the `<39> OrdStatus` field set to `4`. In this case, the `<14> CumQty` field indicates the amount that has already been filled by the time the order was canceled. If the order can’t be canceled for some reason, the FIX server sends back an [Order Cancel Reject](fix-api#order-cancel-reject) message indicating why the order cancellation failed. The **Order Cancel Request** message includes the following fields: ### Order Cancel Reject [#order-cancel-reject] This message is sent by the FIX server upon receiving an [Order Cancel Request](fix-api#order-cancel-request) that can’t be fulfilled. The **Order Cancel Reject** message includes the following fields: ### Execution Report [#execution-report] This message is sent by the FIX server upon successfully placing or cancelling an order, or any change to the order status (such as a complete or partial execution). Among other data, the report indicates: * the current order status at the moment of report creation (`<39> OrdStatus`) * the most recent change in the order status, which is being reported (`<150> ExecType`) The **Execution Report** message includes the following fields: Explore the liquidity providers and FIX platforms supported by B2CONNECT Explore the liquidity providers and FIX platforms supported by B2CONNECT Find step-by-step instructions on most common user scenarios Find step-by-step instructions on most common user scenarios Explore the B2CONNECT FIX API reference Explore the B2CONNECT FIX API reference ## July 30, 2026 [#july-30-2026] ### New features [#new-features] #### Daily turnover reports delivered to Slack and email [#daily-turnover-reports-delivered-to-slack-and-email] B2CONNECT now produces a Turnover Report for each hub automatically, once a day, and delivers it to the Slack channels and email addresses of your choice. Both the CSV and the PDF arrive as ready-to-open attachments on the message itself, so recipients read the report without opening the Web UI or holding platform credentials. Daily volume becomes visible to management, account managers, and back-office teams alike. Each report covers the previous trading day and breaks traded volume down by trading instrument, asset class, and quote currency, showing bought and sold volume for each, followed by totals per quote currency. Administrators control delivery from the B2CONNECT Web UI: * Set the daily publication time for each hub, or switch the schedule off. * Produce a report on demand with **Publish now**. * Subscribe Slack channels and email recipients under **Business notifications**, alongside the platform's other notifications. * Re-download any past report from the report archive. This is the next step in the rollout of **TRAM** (Tracking, Reporting, Alerting, and Monitoring), the unified reporting and observability layer that brought **Hub Reports** to the Web UI in the April release. Where Hub Reports covers reports requested on demand for individual margin accounts, daily turnover reporting replaces the manual, spreadsheet-based volume roundups that reporting teams previously assembled by hand. #### HTX USDT-M Futures upgraded to API V5 [#htx-usdt-m-futures-upgraded-to-api-v5] B2CONNECT has been upgraded to HTX API V5 for USDT-M perpetual futures across the full path: market data, funding data, symbol information, and trading. HTX has retired the legacy API behind these instruments, so the upgrade keeps this liquidity available on a supported interface. Brokers sourcing HTX perpetual futures liquidity through B2CONNECT keep uninterrupted market data and order flow, with no action required on their side. B2CONNECT now also confirms the collateral mode on every HTX connection when it starts, so a change made to the account on the exchange side can no longer cause order placement to fail without an evident cause. *** ### Improvements [#improvements] #### More efficient liquidity provider connections [#more-efficient-liquidity-provider-connections] Liquidity provider connections on a hub now make more efficient use of its infrastructure, while each connection stays isolated from the others and is monitored independently. A new liquidity provider also goes live sooner. The change is being enabled progressively. #### Order recovery after an interruption [#order-recovery-after-an-interruption] After a connection to a liquidity venue is interrupted, B2CONNECT now sizes its recovery request to the length of the interruption instead of using a fixed window, so orders placed during a longer outage are still picked up and reconciled. *** ### Resolved issues [#resolved-issues] The issues below occurred infrequently and only under specific conditions. Some may have affected production environments; most were identified in testing before they could. * Resolved an issue where, in rare cases, the connection to a liquidity venue did not re-establish itself after a network drop, leaving the affected instruments without fresh quotes until the service was restarted. Connections now detect a silent drop on their own, reconnect, and restore every affected instrument. * Resolved two issues that could occasionally leave funding data for perpetual futures failing after an instrument's mapping changed. Quotes recovered on their own, but funding rate, mark price, and funding interval could remain affected. Funding data now follows mapping changes as quotes do. * Resolved two issues affecting connection setup and quote acceptance in certain scenarios: a liquidity provider credentials element was rejected as too long when configuring a connection, and quotes for certain FX instruments arriving from a liquidity aggregator hub were rejected because of a mismatch in how the quote's entry count was determined. ## June 29, 2026 [#june-29-2026] ### Improvements [#improvements-1] #### Systematic Hedging under high-frequency flow [#systematic-hedging-under-high-frequency-flow] Systematic Hedging, introduced in the previous release, has been hardened to stay reliable under high-frequency, high-volume flow such as copy-trading and HFT bursts. B2CONNECT shapes the incoming client flow so that only the residual net position is routed to each liquidity provider (LP), keeping order placement comfortably within venue API rate limits even during tick storms. In the B2CONNECT Web UI, the real-time Risk Status view and its cumulative order-accumulation status bar now update accurately at very high request rates, so risk teams keep a precise, live picture of how exposure is building and when it will hedge. #### More flexible symbol and instrument naming [#more-flexible-symbol-and-instrument-naming] The liquidity aggregator integration now supports independent taker-side and maker-side symbols. Previously both legs shared a single venue name, causing a platform to distribute the LP’s symbols to the FIX clients. B2CONNECT now resolves the incoming FIX symbol against a dedicated taker symbol and maps it to the liquidity aggregator catalog name separately — so brokers can keep their own client-facing symbology regardless of an LP’s naming. Asset and trading instrument names can now also include the ampersand (`&`) character. Such symbol names are accepted directly, removing the previous need to substitute `AND`. #### Reduced noise from stale-liquidity alerts [#reduced-noise-from-stale-liquidity-alerts] Stale-liquidity alerts triggered by delisted symbols now fire once instead of repeating, cutting alert noise for monitoring teams when a venue delists an instrument. *** ### Resolved issues [#resolved-issues-1] * Resolved an issue where a market-data subscription on WebSocket liquidity venues (such as Kraken, Huobi, and Binance) could remain silent after a connector reconnect, leaving the affected symbols without fresh quotes — and FIX clients receiving only invalidations — until the connector was restarted. Such subscriptions now recover automatically. * Resolved an issue in the liquidity aggregator integration where a transient quote-cancel message was treated as a permanent subscription rejection, silently stopping quote publishing for the symbol until a restart. Transient cancels no longer drop the subscription, so streaming resumes as soon as the venue sends the next quote. ## May 29, 2026 [#may-29-2026] ### New features [#new-features-1] #### Systematic Hedging [#systematic-hedging] **B2CONNECT** introduces **Systematic Hedging**, a new execution option that complements — and does not replace — standard straight-through processing (STP). When enabled for a symbol, **B2CONNECT** aggregates incoming client flow into a managed risk position, nets opposing buy and sell volume, and hedges only the net residual to the liquidity provider (LP). This gives risk teams tighter control over exposure and lower execution costs. And because only net positions are hedged, platforms send far fewer orders to their LPs — staying comfortably within API rate limits and easing the load on each provider, so every LP connection goes further. Hedging stays fully under the risk team's control and is set per symbol: trigger by accumulated volume, a timer, a schedule, or manually; tune the hedge ratio and lock-routing behavior; or keep routing large orders straight through. The **B2CONNECT** Web UI adds a **Symbol Hedging Configuration** page, a real-time **Risk Status** page, and a master toggle, and risk-position state is restored automatically after any restart — so exposure is never lost or double-counted. #### B2CORE integration [#b2core-integration] **B2CONNECT** now integrates with **B2CORE**, the **B2BROKER** ecosystem's CRM — the centralized control center for a brokerage's front-end client experience and back-end administrative operations. By connecting margin accounts on the **B2CONNECT** hub directly to **B2CORE**, the integration gives B2B clients who power their trading platforms with **B2CONNECT** seamless account onboarding and a streamlined day-to-day experience, with account creation, funding, and balance management all handled from one control center. It also puts the wider advantages of the **B2BROKER** ecosystem within reach on a single, connected stack. Administrators set up and manage the connection from a new **B2CORE Integration** page in the **B2CONNECT** Web UI. #### Tiered commission profiles [#tiered-commission-profiles] **B2CONNECT** now supports **tiered commission profiles**, which automatically lower the commission rate as an account's traded volume grows. Administrators define volume thresholds and the rate that applies beyond each one; **B2CONNECT** tracks cumulative volume over the chosen period — for example, a calendar month — and steps the rate down as each threshold is reached, including on liquidation orders. For brokers, this turns growing volume into lower costs: the more flow through the hub, the lower their own per-trade commission — rewarding scale and protecting margins as the business grows. *** ### Resolved issues [#resolved-issues-2] There have been no customer-facing issues reported in this release. ## April 30, 2026 [#april-30-2026] ### New features [#new-features-2] #### Tiered margin profiles [#tiered-margin-profiles] **B2CONNECT** now supports tiered margin profiles, allowing Administrators to apply different margin rates to different slices of an account's notional exposure. Each profile can define up to five threshold–rate pairs per symbol, so brokers can mirror the bracketed margin schedules used by major liquidity providers — without falling back on inflated blanket rates that deter retail traders or on manual, position-by-position adjustments. This delivers predictable, schedule-aligned leverage on every tranche of a client's position and removes a recurring source of operational overhead for risk and operations teams. #### Hub Reports under TRAM [#hub-reports-under-tram] A new **Hub Reports** section is now available under **TRAM** (Tracking, Reporting, Alerting, and Monitoring) in the **B2CONNECT** Web UI, bringing reporting for margin accounts together in a single place. Back-office operators can request, track, and download reports directly from the platform — an important milestone in the rollout of TRAM, the unified reporting and observability layer for B2CONNECT. The initial release of Hub Reports ships with three reports: * **Consolidation Statement** — a complete picture of an account's activity and exposure for any reporting period, including opening and closing balances, deposits, withdrawals, fees, opening and closing equity, unrealized PnL, used and free margin, margin utilization, and a dedicated **Open Positions** section listing each position's symbol, direction, average price, unrealized PnL, and margin. Account names are populated automatically, so each statement is clearly attributed. * **Trading Report** — per-trade execution details for one or more margin accounts over a chosen date range, delivered as a CSV. Each row includes the connection used, taker login and order identifiers, executed price and volume, and commission, giving back-office and reconciliation teams everything they need to audit individual fills. * **Turnover (Traded Volume) Report** — aggregated traded volume per account and per symbol for the selected period, supporting fee schedules, rebate calculations, and periodic client reviews. *** ### Improvements [#improvements-2] #### Binance Futures WebSocket endpoints [#binance-futures-websocket-endpoints] **B2CONNECT** has been migrated to **Binance**'s new WebSocket URL architecture for perpetual futures, which separates traffic into dedicated public, market, and private channels. Brokers connecting to Binance Futures via B2CONNECT will continue to receive uninterrupted market data and order updates after Binance retires the legacy WebSocket URLs on **2026-04-23**, with no action required on the broker's side. #### Stream update reliability for Incoming Connectors [#stream-update-reliability-for-incoming-connectors] Subscription updates on **Incoming Connectors** are now more resilient under load. The platform allows more time for new streams to take effect and automatically retries on transient failures, preventing the rare cases where a slow update could leave a maker's symbols without fresh quotes until the next resubscription cycle. *** ### Resolved issues [#resolved-issues-3] * Resolved a consistency issue in the oneZero quoting integration where unsubscribing and immediately resubscribing to a symbol could occasionally fail with a duplicate-request error, leaving the symbol without market data until the next resubscription cycle. Resubscriptions are now handled atomically. ## March 2, 2026 [#march-2-2026] ### New features [#new-features-3] #### Automatic account liquidation on stop-out [#automatic-account-liquidation-on-stop-out] **B2CONNECT** now automatically liquidates open positions when an account's equity falls to the stop-out level, eliminating the need for manual intervention during margin events. The liquidation process executes iteratively — the system sends liquidation orders for all active positions, waits for each to reach a final state, and then evaluates whether the account has recovered before scheduling the next iteration. If the account's margin recovers above the stop-out threshold at any point, liquidation halts immediately. The engine is designed for operational reliability: if a restart occurs mid-liquidation, the process resumes safely without duplicating or missing orders. Execution uses live market pricing to ensure liquidation orders reflect current conditions, preventing margin miscalculations during volatile periods. The waiting period before liquidation begins and the retry policy between iterations are configurable. *** ### Improvements [#improvements-3] #### Account cache reliability [#account-cache-reliability] The account management system now supports per-account cache reinitialization. When a cache error is detected, only the affected account's state is rebuilt rather than triggering a broader reset. This targeted recovery approach improves stability and reduces the potential for stale account data to affect margin calculations or order routing during error-recovery scenarios. *** ### Resolved issues [#resolved-issues-4] There have been no customer-facing issues reported in this release. ## February 27, 2026 [#february-27-2026] ### New features [#new-features-4] #### New B2CONNECT website and deep Insights [#new-b2connect-website-and-deep-insights] This February release is dedicated to documentation updates. Alongside the ongoing expansion of our integrations-related docs, we've launched the new **B2CONNECT** product website and introduced the **Insights** section— deep-dive articles aimed at brokers, exchanges, and liquidity providers building multi-asset liquidity infrastructure. *** ### Improvements [#improvements-4] #### Liquidity engine performance, stability, and security enhancements [#liquidity-engine-performance-stability-and-security-enhancements] We've delivered a set of improvements across the quoting and trading engine to increase overall performance and operational robustness. These updates include several security and stability hardening primarily related to the underlying technology stack and runtime components that support core execution workflows. *** ### Resolved issues [#resolved-issues-5] There have been no customer-facing issues reported in this release. ## January 30, 2026 [#january-30-2026] ### New features [#new-features-5] #### Incoming Connectors: Trading Settings tab [#incoming-connectors-trading-settings-tab] A new dedicated **Trading Settings** tab is now available for Incoming Connectors, allowing the Hub Administrators to configure symbols directly within the connector setup. This streamlines onboarding of new liquidity providers and simplifies ongoing symbol configuration and updates. *** ### Improvements [#improvements-5] #### Improved FIX credentials compatibility [#improved-fix-credentials-compatibility] FIX credential settings for supported liquidity aggregators are now more aligned with the standard FIX naming convention, ensuring more consistent configuration and reducing setup friction. #### More descriptive error messages [#more-descriptive-error-messages] Incoming Connector pages now display clearer, human-readable error messages in two common cases: when credential validation fails, and when the Administrator tries to enable trading for a symbol that’s disabled in Hub settings. These messages help identify the issues, so troubleshooting is more straightforward. *** ### Resolved issues [#resolved-issues-6] * Generated FIX credentials no longer start with an underscore in `SenderID` or `TargetID`, resolving compatibility issues with counterparties that reject such values. ## December 22, 2025 [#december-22-2025] ### New features [#new-features-6] #### Perpetuals data over FIX: funding rate, mark price & funding interval [#perpetuals-data-over-fix-funding-rate-mark-price--funding-interval] B2CONNECT now enriches FIX market‑data streams with `FundingRate`, `MarkPrice`, and `FundingInterval` fields, allowing any FIX‑compatible platform to price and offer perpetual futures out of the box. These parameters are delivered alongside standard quote updates in the FIX contract, eliminating the need for custom side channels or additional integrations to pass funding data. #### Interest on idle cash and unused margin (AMS) [#interest-on-idle-cash-and-unused-margin-ams] The **AMS** module now supports paying interest on idle cash and unused margin via dedicated **Interest rate profiles** in the Web UI. Administrators can configure per‑asset interest rates and a daily posting time in UTC; B2CONNECT then accrues interest automatically and posts it once per day as separate **Interest** transactions on client accounts. Brokers, exchanges, and other trading platforms are empowered to create a clear incentive for end-users (traders) to keep extra funds in their accounts, strengthening client retention and serving as a strong competitive differentiator. *** ### Improvements [#improvements-6] #### Maker credentials management inside Incoming Connectors [#maker-credentials-management-inside-incoming-connectors] Trading and quoting Maker credentials are now configured directly within each Incoming Connector. Administrators can add, revoke, and review credentials in the same place where they manage the connection, reducing context switching and keeping connectivity and access control aligned per connector. #### Target maker [#target-maker] A new **Target maker** control has been added to the Incoming Connectors page, making it straightforward to set or review which maker is currently used for routing. This improves transparency around active maker selection and simplifies switching and validating liquidity sources. *** ### Resolved issues [#resolved-issues-7] There have been no customer-facing issues reported in this release. ## October 30, 2025 [#october-30-2025] ### New features [#new-features-7] #### New docs section: Supported FIX platforms [#new-docs-section-supported-fix-platforms] With this release, we’ve added a new [FIX platforms](supported-venues/fix-platforms) section to our documentation, showcasing trading platforms compatible with B2CONNECT via the **FIX protocol**. This new catalog includes baseline configuration guides and is linked to our FIX API reference. Integration teams can now quickly verify FIX compatibility and access the appropriate configuration templates from a single location, streamlining the setup process. *** ### Improvements [#improvements-7] #### Deep order recovery on LP disconnects [#deep-order-recovery-on-lp-disconnects] We’ve moved from a conservative recent‑orders snapshot to a controlled step‑by‑step rebuild that thoroughly recovers pending orders after a disconnect. As before, requests respect each Liquidity Provider’s API limits; the updated pacing keeps us right at the safe edge, delivering a far higher recovery count without triggering rate‑limit bans. Expect more complete catch‑ups on high count bursts and during volatile periods. *** ### Resolved issues [#resolved-issues-8] There have been no customer-facing issues reported in this release. ## September 30, 2025 [#september-30-2025] ### New features [#new-features-8] #### Internal risk warehousing (formerly B-Book) [#internal-risk-warehousing-formerly-b-book] B2CONNECT clients can now execute selected symbols internally within the crypto-native liquidity hub, retaining spread and reducing external fees. This new execution model provides per-symbol control to enable internal execution where it’s commercially advantageous, empowering clients to optimize their risk-return profiles with unprecedented precision. The configuration can be managed via CSV. #### Partial risk internalization (formerly C-Book) [#partial-risk-internalization-formerly-c-book] B2CONNECT clients can now optimize risk management with configurable order splitting between external hedging and internal execution. Set hedge ratios per symbol (0-100%) to determine the split, where the internal portion mirrors external fill pricing and proportions exactly. This approach reduces commission costs while maintaining risk control and supports both market and limit order flows. #### Price invalidation for synthetic symbols [#price-invalidation-for-synthetic-symbols] Synthetic markets now support invalidation signals the same way as organic symbols, providing consistent invalidation behavior across all symbol types. This development unlocks safe production deployment of the invalidation feature, providing traders with more reliable price feeds and reducing the risk of stale quotes across the entire trading ecosystem. #### Liquidity acquisition configuration via incoming connectors [#liquidity-acquisition-configuration-via-incoming-connectors] The configuration of liquidity acquisition service has been migrated from a global CSV to a structured, connector‑based flow. The new approach includes bulk asset upload capabilities, automated symbol-to-maker listing matching, and quoting CSV configuring, reducing setup time and potential errors while enabling more granular control over individual service instances. *** ### Improvements [#improvements-8] #### WebUI modernization [#webui-modernization] The Admin panel interface has been enhanced delivering improved usability. The following upgrades land across the **AMS accounts**, **AMS profiles**, **Notifications**, **Incoming Connectors** and **Symbols** sections: * **Navigation enhancements**: * Streamlined menu structure with fewer clicks to access key data. * Relocated Notifications to Hub settings for better organization. * Expanded table layouts for improved data visibility. * **Single Sign-On**: * Centralized identity provider with standards-based SSO. * Unchanged sign-in experience for end users. * Continued user management capabilities for B2CONNECT administrators. Additionally, the sidebar has been redesigned, with rebuilt left navigation reflecting the new information architecture, making the **Liquidity**, **Symbols**, **Accounts**, and **Settings** sections easier to access. #### AMS profiles: CSV import/export [#ams-profiles-csv-importexport] The **Commission** and **Margin Requirements** profiles setup has been accelerated through an import wizard and one‑click CSV export. These enhancements optimize workflows particularly when working with large instrument lists. #### Asset management [#asset-management] B2CONNECT administrators are now provided with enhanced control over asset configurations with built-in safeguards to prevent deletion of referenced assets. This ensures system integrity while providing the flexibility to clean up obsolete or unused assets. *** ### Resolved issues [#resolved-issues-9] * Fixed an issue with trading parameter calculations for instruments with contract sizes. The system now correctly converts all trading parameters using contract size multipliers, ensuring accurate minimum order amounts, price steps, and notional values are communicated through the FIX SecurityList endpoint. This fix particularly benefits trading of derivative contracts where the underlying instrument differs from the quoted contract size. ## August 29, 2025 [#august-29-2025] ### New features [#new-features-9] #### New docs section: Supported exchanges [#new-docs-section-supported-exchanges] With this release, we've introduced a detailed [Supported exchanges](supported-venues/exchanges) section in our documentation, offering a comprehensive reference for each exchange our platform supports. This addition promotes clarity and easy access, allowing B2CONNECT users to quickly compare and reference available capabilities across exchanges at a glance. *** ### Improvements [#improvements-9] #### Explicit default STP setting [#explicit-default-stp-setting] To prevent unexpected behavior and reduce reliance on exchange policy defaults, we now explicitly set a fixed internal default STP (Self-Trade Prevention) mode in our API calls. This ensures consistent and predictable trade execution across all environments, regardless of future changes by liquidity providers. *** ### Resolved issues [#resolved-issues-10] There have been no customer-facing issues reported in this release. ## July 31, 2025 [#july-31-2025] ### New features [#new-features-10] #### Granular asset management via Web UI [#granular-asset-management-via-web-ui] B2CONNECT administrators now benefit from enhanced control and efficiency in asset management with new export/import options integrated into the B2CONNECT Web UI: * **Bulk asset export**: Efficiently export assets to CSV for reporting or backup purposes, streamlining administrative tasks and protecting essential configuration data. * **Bulk asset import**: Effortlessly import multiple assets from CSV files, reducing manual entry, minimizing errors, and ensuring asset uniqueness through built-in validation rules. #### Alerts system for swap charge issues [#alerts-system-for-swap-charge-issues] The system monitoring has been enhanced by implementing automated notifications for failed swap charges. These real-time notifications provide detailed explanations of failures, facilitating quick troubleshooting, and boosting system reliability. Common issues addressed include missing market rates, symbol data discrepancies, infrastructure issues, and internal errors. *** ### Improvements [#improvements-10] #### Enhanced compatibility with Binance [#enhanced-compatibility-with-binance] To ensure continued compatibility and accuracy, B2CONNECT services have been updated to align with recent changes in the Binance API. This enhancement makes certain that the minimum notional values provided through the B2CONNECT FIX API SecurityList endpoint are always accurate, preventing order rejections due to incorrect amounts. Additionally, the Binance Spot adapter has been updated to meet the latest WebSocket API requirements, ensuring smooth order updates and improved platform reliability. #### Advanced raw message logging [#advanced-raw-message-logging] A significant enhancement has been added to order placement and execution workflow. A key point is the implementation of advanced raw message logging. This enables B2CONNECT to log all raw incoming and outgoing messages during its communication with a supported liquidity provider, thus enabling precise troubleshooting and rapid issue resolution at the LPs end. #### Improved error handling [#improved-error-handling] Another improvement in the order placement and execution workflow includes the refined logic for handling timeout errors. An order is now considered placed if such an error occurs, providing a definitive status and preventing uncertainty during order execution. #### Rate limiting for reliable connectivity [#rate-limiting-for-reliable-connectivity] The reconnect algorithm for a supported liquidity provider has been improved by integrating a robust rate-limiting mechanism. This enhancement caps the number of reconnect attempts to an optimal value, reducing the chance of IP bans and maintaining stable, uninterrupted connectivity. #### Reduced trading service startup time [#reduced-trading-service-startup-time] With this release, the bulk-load order event recovery mechanism has been implemented. By efficiently processing large volumes of order events during system startup, this update significantly reduces the time required to restore services after a restart or unexpected outage. As a result, traders experience minimal downtime, ensuring continuous access to the trading platform and improving overall operational efficiency. *** ### Resolved issues [#resolved-issues-11] There have been no customer-facing issues reported in this release. ## June 30, 2025 [#june-30-2025] ### New features [#new-features-11] #### Advanced multi-provider liquidity orchestration [#advanced-multi-provider-liquidity-orchestration] This release introduces a groundbreaking update in liquidity infrastructure management: B2CONNECT now features liquidity orchestration across multiple liquidity providers and trading platform types. Key enhancements include: * Liquidity acquisition from multiple providers and its distribution to diverse trading platforms and market data consumer types. * Price feed across all asset classes, including forex, CFDs, indices, metals, and crypto (both spot and derivatives), accessible via both single or multiple connectors. * Uninterrupted liquidity with automated order routing based on symbol availability and robust failover policies. #### Advanced spread control [#advanced-spread-control] B2CONNECT administrators can now precisely control the maximum allowable spread in order books, significantly enhancing liquidity and boosting trader confidence. They can set and manage maximum spread limits to avoid sharp market data fluctuations, and track anomalies through detailed metrics. #### Symbol-based price invalidation [#symbol-based-price-invalidation] B2CONNECT introduces sophisticated symbol-based price invalidation to ensure price accuracy: * **Web interface management**: Configure, view, and manage price invalidation parameters directly through the Web UI. * **CSV import**: Import symbols via CSV files that include detailed price invalidation parameters. * **Real-time logic**: Implement comprehensive real-time price invalidation across all stages for consistent and precise quoting and trading. #### Aggregated execution reports [#aggregated-execution-reports] Execution reporting now supports fill aggregation, optimizing reports for platforms such as cTrader. This feature consolidates multiple fills into a single, coherent execution report. B2CONNECT administrators can enable or disable aggregation settings to tailor reporting to the trading platform preferences. Alerts for overfilled aggregation scenarios provide timely insights for effective risk management. #### Automated swap fee charging [#automated-swap-fee-charging] B2CONNECT now streamlines swap charge management. B2CONNECT administrators can easily set up Swap Profiles and apply them to trading accounts. The built-in Swap Charges Planner helps schedule and run swap charges efficiently. Migration to an optimized Account Configuration system provides superior performance and reliability. *** ### Improvements [#improvements-11] #### Enhanced precision handling for FOK orders [#enhanced-precision-handling-for-fok-orders] Handling of Fill-or-Kill (FOK) orders has been improved to guarantee compatibility across all liquidity providers, even when the order amount precision differs from trading platform specifications. #### Standardized order cancellation for Liquidity Takers [#standardized-order-cancellation-for-liquidity-takers] The order cancellation support has been improved for liquidity aggregators and other liquidity consumers, ensuring more responsive and reliable order lifecycle management. #### Symbol integration into account configuration [#symbol-integration-into-account-configuration] Symbol management is now seamlessly incorporated into account configuration to maintain consistency across liquidity settings and to simplify administrative tasks. #### Streamlined UX [#streamlined-ux] The B2CONNECT WebUI has been upgraded, focusing on user experience and performance enhancements. These improvements feature a more intuitive color scheme and streamlined design, offering a modern and visually appealing interface. The user flow has been optimized, making navigation more straightforward and efficient. Additionally, component performance has been boosted, reducing load times and enhancing overall responsiveness for a better user experience. *** ### Resolved issues [#resolved-issues-12] * Fixed an issue where an order cancellation request might be mishandled if received before the system processed the initial order confirmation from a liquidity provider. ## May 30, 2025 [#may-30-2025] ### Improvements [#improvements-12] #### Enhanced FIX API SecurityList endpoint [#enhanced-fix-api-securitylist-endpoint] Improved the liquidity metadata handling to ensure that order placements, based on the liquidity parameters provided via the SecurityList FIX endpoint, are compatible across multiple liquidity streams. This upgrade aggregates liquidity parameters for symbols across multiple providers, combining them into universally supported values. As a result, orders can be placed across several liquidity providers either simultaneously or in a failover mode, ensuring compatibility with all involved providers. #### Improved handling of negative spreads [#improved-handling-of-negative-spreads] Enhanced management of negative spreads has been achieved through more efficient filtering of Level 2 quotes and incremental updates. This improvement targets asset prices that could cause negative spreads in liquidity distributed to trading platforms and other consumers via the FIX protocol. The newly updated business logic effectively and efficiently filters out such quotes to prevent the negative spreads from appearing in the distributed liquidity. #### Enhanced resilience when processing fast subscribe/unsubscribe sequences [#enhanced-resilience-when-processing-fast-subscribeunsubscribe-sequences] B2CONNECT FIX server can robustly handle fast subscribe/unsubscribe sequences by liquidity aggregators, even when these aggregators do not strictly adhere to the FIX protocol standard, reusing the same request IDs. The newly implemented algorithm reliably handles such cases, eliminating even the intermittent subscription failures. *** ### Resolved issues [#resolved-issues-13] * Fixed an issue, where orders were re-sent (placed again) if one of the supported liquidity providers returned an unrecognized error message. Such messages are now categorized under a unified system, resulting in conserving the API rate limits on redundant order placements and reducing the risk of IP bans. * Fixed an issue where, after replacing the API credentials of a supported liquidity provider with new ones, the system continued subscribing to the execution reports stream using the old credentials until restarted. This fix ensures that the credentials can be replaced live, without the restart of services. ## March 31, 2025 [#march-31-2025] ### New features [#new-features-12] #### New integration with Bybit [#new-integration-with-bybit] B2CONNECT has launched a new adapter for **Bybit**, providing full support for perpetual futures contracts. This integration leverages B2CONNECT's robust infrastructure, allowing access to Bybit's market data and trading functionalities. It ensures seamless trading and quoting, enabling client platforms to offer advanced trading options and enhanced user experience. Benefit from efficient order execution and reliable price feeds — all within the B2CONNECT ecosystem! #### Advanced Trade API support for Coinbase integration [#advanced-trade-api-support-for-coinbase-integration] With this release, B2CONNECT introduces full support for **Coinbase Advanced Trade API**, replacing the deprecated Coinbase Pro API. This update ensures uninterrupted access to Coinbase’s liquidity, benefiting from the superior capabilities and performance of the Advanced Trade API. This upgrade affirms B2CONNECT commitment to delivering cutting-edge liquidity solutions, ensuring clients always have access to the best available liquidity infrastructure. *** ### Improvements [#improvements-13] #### Improved symbol specification management and real-time configuration [#improved-symbol-specification-management-and-real-time-configuration] The process for managing symbol specifications during bulk import has been significantly enhanced. Users can now interactively review and selectively edit symbol specifications directly within the import interface. This improvement enables on-the-fly adjustments, ensuring higher accuracy and flexibility when dealing with large sets of symbols. #### Binance Futures adapter enhancements [#binance-futures-adapter-enhancements] Several improvements have been implemented for the Binance Futures adapter, increasing its reliability and stability: * **Execution report deduplication**: Logic has been added to effectively deduplicate execution reports from Binance Futures. This resolves issues caused by occasional duplicate reports originating from the LP side, ensuring accurate order state tracking. * **Order state recovery rate limiting**: A rate limiter has been implemented for requests related to order state recovery. This proactive measure prevents potential rate limit violations on the Binance Futures platform, safeguarding against temporary bans or request throttling during high-activity periods. These updates contribute to a more robust and resilient integration with Binance Futures. *** ### Resolved issues [#resolved-issues-14] There have been no customer-facing issues reported in this release. *** ## Past releases [#past-releases] ### December 24, 2024 🎄 [#december-24-2024-] #### New features [#new-features-13] ##### Taker orders routing to multiple LPs [#taker-orders-routing-to-multiple-lps] This newly released feature allows orders received through a single FIX connector to be routed to multiple liquidity providers. This functionality enables sophisticated order placement and execution strategies through: * **Failover mechanism**: Enables B2CONNECT to maintain each Taker connector linked to multiple liquidity sources and to dynamically reroute orders among them in case a provider becomes unavailable. * **Symbol-based order routing**: Caters to cases where a particular symbol may be unavailable with one liquidity provider, but listed on others. This feature allows for dynamic routing of orders to the most suitable liquidity source based on the specific trading symbol. This feature significantly enhances access to a wider range of trading instruments and improves fault tolerance for liquidity distribution at supported trading venues via both quoting and trading sessions. ##### Incoming connectors creation [#incoming-connectors-creation] B2CONNECT administrators can now create and configure connections to Makers via the Web UI. The solution supports a variety of protocols (WSS, REST, FIX), offering flexible and robust connectivity options. By streamlining the setup process, it enhances the user experience, making it easy to integrate incoming connectors. ##### Order status recovery at WebSocket disconnect [#order-status-recovery-at-websocket-disconnect] This feature ensures the recovery of pending order statuses in case a WebSocket connection is disrupted or unavailable. It's specifically designed for WSS+REST trading integration, allowing retrieval of a placed order status even if the execution report can't be extracted from a WebSocket data stream B2CONNECT subscribed to. This solution largely eliminates cases where an order is placed on the liquidity provider but is not correctly confirmed on the Taker platform due to WebSocket issues. The implementation significantly enhances execution quality and mitigates market risks. #### Improvements [#improvements-14] ##### Symbol creation interface [#symbol-creation-interface] The B2CONNECT Web UI now features a dedicated interface for adding symbols. This enhancement utilizes existing base and quote assets, building on the recent release of the Asset and Asset Classes management UI. This feature is in addition to the bulk settings import functionality, allowing for individual symbol creation and management. #### Resolved issues [#resolved-issues-15] There have been no customer-facing issues reported in this release. *** ### November 29, 2024 [#november-29-2024] #### New features [#new-features-14] ##### Taker FIX credentials management via the Web UI [#taker-fix-credentials-management-via-the-web-ui] The latest B2CONNECT release introduces a brand new Web UI Section in the Liquidity Hub administrative interface, designed for managing FIX protocol credentials. These authorization details are vital for B2CONNECT customers, including digital asset exchanges, brokerages, crypto payment gateways, and other liquidity consumers, to connect to the Liquidity Hub. Following the trend of previous improvements, such as the Maker API keys management interface, this update enables B2CONNECT administrators to efficiently generate and distribute FIX credentials. Once the credentials are generated and validated, B2CONNECT administrator can transfer them to a Taker platform so that their clients can authorize when connecting to the B2CONNECT FIX server. Credentials are automatically updated across B2CONNECT services, ensuring seamless client connectivity. This development marks a significant stride toward achieving comprehensive connectivity and streamlined liquidity distribution within B2CONNECT's growing infrastructure. #### Resolved issues [#resolved-issues-16] There have been no customer-facing issues reported in this release. *** ### October 31, 2024 [#october-31-2024] #### New features [#new-features-15] ##### Faster order placement and execution on the Binance spot platform [#faster-order-placement-and-execution-on-the-binance-spot-platform] B2CONNECT Liquidity Hub has implemented an advanced adapter to the WebSocket API for the Binance (spot) trading platform. This upgrade allows for faster order placement, thereby improving the trading experience and enhancing the liquidity distribution quality. By employing a high-end connectivity technology, trade-related messages are now transmitted through a bidirectional full-duplex protocol. When assessed against previous benchmarks, the order round-trip time on Binance (spot) has been shortened significantly. This advancement will be beneficial to any trading platform or liquidity taker client, substantially enhancing their user experience in order execution. #### Improvements [#improvements-15] ##### Enhanced Admin interface for configuring trading credentials [#enhanced-admin-interface-for-configuring-trading-credentials] B2CONNECT administrators can now independently configure trading credentials via the web interface, ensuring a faster and more secure process. This improvement simplifies the procedure of entering API keys using a dynamic, maker-specific form tailored with relevant fields, thereby streamlining operations. The system automatically validates the entered API keys to minimize errors. This is another addition to the rapidly expanding capabilities of the Liquidity Engine Web UI. #### Resolved issues [#resolved-issues-17] There have been no customer-facing issues reported in this or previous releases. *** ### September 30, 2024 [#september-30-2024] #### New features [#new-features-16] ##### Fully-featured liquidity adapter for Crypto.com [#fully-featured-liquidity-adapter-for-cryptocom] The full-blown liquidity acquisition adapter to **Crypto.com** is now available immediately to all B2CONNECT Liquidity Hub clients connecting via the FIX API. Crypto.com is a top-ranked cryptocurrency exchange platform that has recently been gaining traction among B2B clients as a direct market access enabler. With the introduction of the new connectivity option, B2CONNECT clients can now enhance their offerings with an expanded range of trading pairs. This feature also empowers them to diversify effectively, mitigating various risks such as counterparty, regulatory, and so on. The adapter enables access to price feeds (Level 2 quotes) on the trading platform and supports order placement, execution, and execution confirmation. Besides, its implementation ensures that these two main processes, getting quotes and trading, can be done in parallel, with the highest possible throughput and lowest network latency. This is the next step in B2CONNECT’s mission to enhance access to liquidity for its B2B clientele — digital asset exchanges and brokerages. We’re excited to provide trading platform operators with new opportunities to differentiate themselves by offering the trading community a wider range of trading options and better UX. ##### Liquidity configuration via CSV [#liquidity-configuration-via-csv] The B2CONNECT Web UI has been enhanced with the bulk import option of liquidity settings via a CSV file. This new feature enables B2CONNECT administrators to import an unlimited list of markets along with advanced liquidity parameters such as markups, volume modifiers, market depth, price and volume precision, and so on. Additional fields for defining synthetic instruments are provided to configure synthetic cross legs, quote sources, inversion, and more. The new interface validates the CSV file upon upload and also stores a history of imported settings. The latter empowers the B2CONNECT Hub operators to always have a fresh copy of the setup available for export as a CSV file, making it easier to enter adjustments, re-upload the configuration, and apply new liquidity settings. *** ### August 29, 2024 [#august-29-2024] #### New features [#new-features-17] ##### Faster Perpetual Futures trading via a high-end communication protocol [#faster-perpetual-futures-trading-via-a-high-end-communication-protocol] With this release, the B2CONNECT team has implemented a new integration with a fresh WebSocket API introduced by the Binance Futures platform earlier this year. This is a new option in addition to the time-tested REST API trading. The new connectivity technology uses a bidirectional, full-duplex protocol to transmit trade-related messages, which drastically increases execution quality. The average route time for trades shows an up to fourfold improvement over previously measured round-trip benchmarks. This is a true moonshot advancement in order execution quality that will allow any trading platform or other liquidity taker to offer exceptional trader UX improvements throughout their entire user base. ##### Concurrent connections to multiple API endpoints [#concurrent-connections-to-multiple-api-endpoints] This new feature allows B2CONNECT liquidity adapters to connect simultaneously to multiple endpoints associated with private and public APIs (where available). This enables access to digital resources on both types of endpoints at the same time. This advanced architecture improves resource availability and eliminates a single point of failure, giving B2CONNECT liquidity acquisition and distribution services the ability to simultaneously access market and trading data across various API clusters. The primary benefit of this new feature from a client perspective is much more reliable, fault-tolerant price feeds, order placements, and execution confirmations, improving UX while reducing market risks at the same time. #### Improvements [#improvements-16] * Trading log entries and error messages from both B2CONNECT internal services and external sources (such as supported liquidity providers) are now categorized and given a unified content and format before being transmitted to taker platforms. This ensures that messages are organized in a consistent manner and are better prepared for human consumption. This improvement is aimed at enhancing UX and reducing the load on a technical support team. * An improved B2CONNECT FIX server shutdown procedure has been implemented, which allows for graceful state saving and restoration, as well as prevents data loss due to interruptions of quoting and trading sessions. This enhancement ensures orderly logouts across all platforms connected via the FIX protocol, and availability of FIX messages after a restart. #### Resolved issues [#resolved-issues-18] * Fixed an issue where, in some scenarios, third-party FIX clients had issues reconnecting to the B2CONNECT FIX server after a logout. We have also ensured that a Logout message is consistently sent upon a client’s logout, which in rare cases may have been skipped prior to this release. * Fixed an issue that infrequently caused situations where after setting the order book depth to decrease, the number of levels would sometimes not increase back after reverting the settings. *** ### March 13, 2024 [#march-13-2024] #### New features [#new-features-18] ##### Liquidity distribution to the B2TRADER Brokerage Platform (BBP) [#liquidity-distribution-to-the-b2trader-brokerage-platform-bbp] With this release, the B2CONNECT team is excited to announce that the emerging B2TRADER Brokerage Platform has been added to our growing list of supported trading venues. This addition further advances our commitment to delivering top-notch connectivity to trading platforms and liquidity providers. The key updates encompass a bespoke order execution flow as well as custom FIX API endpoints that streamline the retrieval of available markets and contract specifications. With these enhancements, our industry-standard FIX protocol implementation enables a robust connection between the newly added platform and the liquidity providers supported by B2CONNECT. This integration empowers BBP’s clients to embrace flexible business models and adjustable execution strategies. And, as a result, further boost their success by providing exceptional user experiences to their end users — the members of the trading communities. ### November 10, 2023 [#november-10-2023] #### New features [#new-features-19] ##### Maker-integration with cTrader via the FIX protocol [#maker-integration-with-ctrader-via-the-fix-protocol] With this release, the B2CONNECT team is pleased to announce the achievement of a significant milestone in our ongoing quest to provide exceptional connectivity to both trading platforms and liquidity providers: we have successfully integrated B2CONNECT Liquidity Hub with **cTrader**. With this integration, B2CONNECT Liquidity Hub can now distribute the liquidity to cTrader, a complete trading platform solution for the forex and CFD brokers, via the FIX protocol. On one hand, this furnishes our clients running trading platforms with the ultimate access to liquidity. On the other hand, this empowers liquidity providers to implement comprehensive distribution solutions. This release marks the paradigm shift in the connectivity approach by including trading platform integrations alongside the liquidity providers and liquidity aggregators — our focus previously. This is a major step forward in expanding our ecosystem to include taker-venues, making our product a versatile liquidity distribution solution that meets the needs of a wide range of industry players in the dynamic world of trading. This new integration enables the provision of unique liquidity streams empowering our clients to differentiate themselves in a competitive and highly volatile market. Retail and institutional brokers, crypto exchanges, and liquidity providers can leverage our performant liquidity distribution solutions powered by industry-standard communication protocols and fast APIs built on scalable frameworks. *** ### October 20, 2023 [#october-20-2023] #### New features [#new-features-20] ##### Full support for Bitfinex Derivatives [#full-support-for-bitfinex-derivatives] Following the Bitfinex Spot support implemented earlier this year, we are pleased to announce full support for Bitfinex Derivatives with this release. It has been done per popular client request to support and improve diversification of perpetual futures liquidity flows, following the collapse of a global cryptocurrency derivatives player late last year. With this release, trading platforms powered by the B2BROKER technology receive additional benefits and opportunities, such as: * expand your offer with additional trading instruments * increase market depth due to additional liquidity source * improve liquidity, including faster and more flexible price feeds and better execution quality * diversify liquidity streams by the additional source of liquidity and avoid a single point of failure * differentiate yourself from competing platforms and, at the same time, delight your users by creating unique liquidity streams that have just become available from the newly supported platform. Among other features, the trading API and pre-execution model are fully supported and immediately available to client venues using the FIX protocol and relying upon the B2CONNECT’s signature FIX API (v1.2 and later). #### Improvements [#improvements-17] * A new tutorial has been added to the B2CONNECT Product guide, illustrating the process of setting up a connection to Coinbase. We took a special care to highlight the required credentials and help clients find them easily. *** ### September 29, 2023 [#september-29-2023] #### New features [#new-features-21] ##### FIX API 1.2 [#fix-api-12] With this release, B2CONNECT introduces a new version 1.2 of FIX API, which is an expanded and improved version of the previous implementation: * The Business Message Reject has been deleted. * The [Sequence Reset](fix-api#sequence-reset) message has been added. * The following tags have been added to the [Market Data Request](fix-api#market-data-request) message: `<267> NoMDEntryTypes` (required), `<269> MDEntryType` (required). * The following tag has been added to the [Market Data — Snapshot/Full Refresh](fix-api#market-data-snapshot-full-refresh) message: `<299> QuoteEntryID`. * The following tag has been added to the [New Order Single](fix-api#new-order-single) message: `<1> Account`. * The following tags have been added to the [Execution Report](fix-api#execution-report) message: `<64> SettlDate`, `<75> TradeDate`, `<103> OrdRejReason`. * The following tag has been added to the [Order Cancel Reject](fix-api#order-cancel-reject) message: `<39> OrdStatus` (required). The [FIX API specification](fix-api) has been updated to reflect the changes as well as to become more clear and consistent. *** ### May 12, 2023 [#may-12-2023] #### New features [#new-features-22] ##### A new form for entering API keys [#a-new-form-for-entering-api-keys] The B2CONNECT Web UI has been updated to display a customized form for entering API keys for each of the supported hedging platforms. As a result, the issues with entering the credentials have been eliminated. Since every platform features a different set of fields for entering the API keys, this form was updated to display the authorization fields as they are provided by each hedging platform and to prevent any ambiguity arising from the difference in the field names. #### Improvements [#improvements-18] * The contents of Web UI controls and field descriptions have been revised to afford a more intuitive interface. * The look and feel of the B2CONNECT Web UI has been enhanced by updating some of its most commonly used visual elements. #### Resolved issues [#resolved-issues-19] * Fixed an issue causing the API key editing window to hang when an entry for a hedging platform was absent in the configuration. Such exceptions are now handled, and the stability of the UI has increased as a result. * Fixed an issue due to which empty fields were erroneously assigned zero values after updating the hedging configuration. * Fixed an issue due to which duplicate entries could be displayed for clients on the Hedging Status tab. * Fixed an issue due to which incorrect values were submitted in certain scenarios when enabling or disabling hedging on the Hedging Status page of the Web UI. *** ### April 21, 2023 [#april-21-2023] #### Improvements [#improvements-19] ##### Liquidity provider validation before accepting incoming orders [#liquidity-provider-validation-before-accepting-incoming-orders] The order execution reliability has been greatly improved as a result of including a check for the actual availability of the supported liquidity providers before the B2CONNECT Liquidity Hub services can go forth and accept the incoming orders from a taker platform. Following the update of the B2CONNECT liquidity distribution services, they now always ensure that the connected liquidity providers are ready to execute a placed order, in which case the order is then accepted for execution on the connected trading venue serving as a liquidity consumer. ##### Type-agnostic execution of orders [#type-agnostic-execution-of-orders] If the order type that was set by a taker platform isn’t recognized as a valid execution option, the B2CONNECT liquidity distribution services can be configured to emulate the required order type by assigning a different type to the order. This way you can further ensure that the placed orders will be filled regardless of their types, and their execution quality will match the expectations of your end-users to the fullest possible extent. ##### Repeated requests for order placement [#repeated-requests-for-order-placement] The B2CONNECT order placement services have been revised to enable them to retry order placement if a target liquidity provider platform is unable to fill an order for a transient reason. If the dedicated B2CONNECT service recognizes the returned error as transient (as opposed to intrasient errors, such as those arising from connection failures), the service then works around this issue by automatically sending a repeated request for order placement, which increases the chances that the order will be eventually filled. This is especially useful in times of increased market volatility resulting in drastic increase in traders’ activity, which may overwhelm the liquidity provider services making it difficult to fulfill all the requests for orders execution. #### Resolved issues [#resolved-issues-20] * Fixed some issues affecting the B2CONNECT notification service. These include occasional service stability issues arising from an incorrect data format, as well as the issue due to which a user identifier defined in hedging configuration could not be resolved if this user’s trading platform was left unspecified. * Fixed an issue that affected the adapter used to connect to one of the supported liquidity providers and prevented restarting the service and restoring the connection after the liquidity provider has disconnected the communication protocol. * Fixed some minor issues with the B2CONNECT Web UI due to which it could be difficult for users to replace the API keys in certain scenarios. * Fixed an issue with the Hedging Reports section of the B2CONNECT Web UI due to which the Amount field in the Order Details section could be occasionally assigned incorrect data. *** ### March 10, 2023 [#march-10-2023] #### New features [#new-features-23] ##### Hedging on Bitfinex [#hedging-on-bitfinex] Bitfinex, a global cryptocurrency exchange and spot trading venue, is now supported as a new hedging platform. As is well known, diversification is the key to thriving, regardless of market conditions. This is why with the two most recent releases we specifically focused on providing the widest variety of connectivity options to our global-minded clients, while offering them the opportunity to hedge market risks on suitable platforms in as many regions and jurisdictions as possible with a view of achieving the maximum geographical and regulatory diversity. The newly released trading adaptor for the Bitfinex API is the next step on the B2CONNECT’s journey aimed at empowering its discerning B2B clients, which include cryptocurrency exchanges and crypto brokers. In the meantime, our main goal remains constant: we are eager to not only delight trader communities by ensuring a fantastic user experience, but also to offer trading platforms broad opportunities for spreading risks and allow them to take a savvy approach to exposure in a wide range of market situations. #### Improvements [#improvements-20] ##### Enhanced support for trading instruments engineered as contracts [#enhanced-support-for-trading-instruments-engineered-as-contracts] We have significantly expanded the contract specification capabilities for some of the supported crypto assets by encompassing all popular methods of defining trading instruments. With the enhanced contract sizes, the price and/or amount can be configured in any combinations while designing contracts for various symbols, with taking into consideration both the contracts that are priced by amount and those evaluated by face value regardless of their amount. #### Resolved issues [#resolved-issues-21] * Fixed an issue due to which the adaptor used for price discovery on one of the supported liquidity providers could hang in certain scenarios. * Fixed an issue which hampered the efficiency of the cloud resources utilization by making multiple subscriptions to quotes for the same asset if liquidity for this asset was used to maintain price feeds for several symbols. * Fixed an issue which caused intermittent disconnection of the FIX protocol after restarting one of the supported liquidity aggregators. * Fixed an issue related to number formats which occasionally appeared in hedging reports. As a result, the scientific EXP format used for some of the fields has been replaced with a more user-friendly financial format. *** ### February 17, 2023 [#february-17-2023] #### New features [#new-features-24] ##### Hedging on Kraken [#hedging-on-kraken] As part of our relentless pursuit of providing crypto asset exchanges and brokers seamless access to the widest possible choice of hedging platforms, we are pleased to announce full support for the Kraken trading API, which opens new horizons for trading venues relying on B2CONNECT Liquidity Hub in terms of risk transfer and supplying the price feed. This is a major landmark for B2CONNECT, made possible by enhancing the previously released adapter used for connecting to this well-established bitcoin trading platform and cryptocurrency exchange which is based in San Francisco. As a result, both Level 2 quotes and hedging for all symbols traded on Kraken are now available to B2CONNECT clients. #### Improvements [#improvements-21] ##### Extended documentation [#extended-documentation] [A new tutorial](how-to-articles/how-to-properly-configure-api-keys-on-kraken) has been added to B2CONNECT documentation, illustrating the process of obtaining the API keys required to enable hedging on Kraken using the newly introduced hedging adapter. Paying special attention to keeping our documentation up-to-date and complete, we invite you to learn more about B2CONNECT by exploring our Product Guide and encourage you to contact us if you have any suggestions or need further assistance. #### Resolved issues [#resolved-issues-22] * Fixed an issue which caused the hedging engine to hang up immediately after entering the API keys for connecting to some of the hedging platforms in certain scenarios. * Fixed an issue which prevented simultaneous placement of multiple hedging orders, causing instead their consecutive placements which resulted in slightly delayed execution. * Fixed an issue which caused recurrent switching between the main and backup liquidity providers in certain scenarios. *** ### January 27, 2023 [#january-27-2023] #### New features [#new-features-25] ##### Level 2 quotes supported for Bitfinex spot liquidity [#level-2-quotes-supported-for-bitfinex-spot-liquidity] Yet another major cryptocurrency exchange Bitfinex has been integrated, ensuring steady supply of spot asset liquidity from this global platform. This highly anticipated development opens exciting new opportunities for operators of crypto trading venues, since it is hard to overestimate the importance of being able to connect to unique liquidity sources. For those who are determined to survive the ongoing “crypto winter” and excel in a highly competitive environment, this is a great opportunity to appeal to extremely discerning trader communities with the best possible offering, which includes a wide array of trading instruments and guarantees tighter spreads and remarkable market depth. This is undoubtedly great news both for the exchanges powered by matching engines, such as B2TRADER, and for third-party crypto exchanges and brokers connected to B2CONNECT via the FIX protocol (either using the B2CONNECT proprietary FIX API or solutions relying on liquidity aggregators, such as oneZero and PrimXM). #### Improvements [#improvements-22] ##### Improved handling of Level 2 quotes [#improved-handling-of-level-2-quotes] The performance of locally maintained extended order books with a virtually unlimited number of price levels (up to 5,000 and beyond) has been enhanced, thanks to implementation of an improved solution, which enables combining multiple price feeds into a single data stream, as opposed to one-to-one channel subscriptions that were previously supported. This has resulted in a drastic performance boost for the price discovery engine, along with a notable increase in the frequency of Level 2 quote updates. #### Resolved issues [#resolved-issues-23] * Fixed an issue that caused occasional generation of empty reports due to incorrect logging of executed trades. * Fixed an issue that prevented subscription to more than a hundred trading instruments due to a bug in the adaptor used to connect to one of the supported liquidity providers. * Fixed an issue related to data exchange with message-oriented middleware, which caused occasional rejection of orders placed using the FIX protocol. * Fixed an issue due to which in certain scenarios the hedging engine attempted to place trades on one of the supported liquidity provider platforms despite the corresponding API keys being missing. * Fixed an issue due to which requests to place offset orders were occasionally sent to hedging platforms even when the order volume was zero after applying the trading rules governing decimal precision of order amounts on these platforms. ### December 16, 2022 [#december-16-2022] #### New features [#new-features-26] ##### Support for multiple accounts on a single hedging platform [#support-for-multiple-accounts-on-a-single-hedging-platform] Automated hedging can now be performed simultaneously on two or more accounts on the same hedging platform for routing offset trades with a purpose of hedging market risks. First and foremost, the B2CONNECT team is committed to empowering its user base — that is, operators of trading venues, such as spot crypto exchanges and brokerages — and putting their best efforts to implement as flexible and efficient hedging policies as possible. With that in mind, this newly added feature is aimed at supporting multiple accounts on a single hedging platform, while ensuring precise order placements, timely delivery of execution confirmations and in-depth reporting for each account used to make offset trades on a given liquidity provider platform. #### Improvements [#improvements-23] ##### Unmatched execution quality due to asynchronous placement of orders [#unmatched-execution-quality-due-to-asynchronous-placement-of-orders] The B2CONNECT order placement engine relying on trading sessions maintained using the FIX protocol has been vastly improved by adding support for asynchronous placement of large numbers of orders submitted for execution on liquidity provider platforms, which has resulted in unprecedented speed and unrivaled execution quality. ##### Extended infrastructure for engineering of synthetic instruments [#extended-infrastructure-for-engineering-of-synthetic-instruments] A new improvement to the B2CONNECT synthetics engine has significantly extended the range of available sources of quotes suitable for engineering synthetic trading instruments, such as synthetic crosses, fractional markets and inverted pairs. Accessible price feeds are not only received from a B2CONNECT instance hosting the synthetics engine itself, but also from any other instance within the Liquidity Hub ecosystem. #### Resolved issues [#resolved-issues-24] * Fixed an issue related to the reporting service: when a single order was filled by way of multiple executions on a particular hedging platform, only one of the executions was recorded. * Fixed a bug related to the [SimpleFIX Go library](https://github.com/b2broker/simplefix-go/) implementing the FIX protocol, which could have caused an issue with the logon sequence if a client used a different FIX protocol implementation. * Fixed an issue causing a resource leak in the synthetics engine that could have given rise to intermittent stability issues. In addition, another resource leak has been eliminated in an adapter used to connect to one of the supported spot cryptoasset liquidity providers, ensuring overall stability of the service, its reliability and uninterrupted uptime. ### November 25, 2022 [#november-25-2022] #### New features [#new-features-27] ##### Direct integration of the B2CONNECT FIX server with PrimeXM [#direct-integration-of-the-b2connect-fix-server-with-primexm] The B2CONNECT Liquidity Hub is now capable of distributing liquidity as a maker to PrimeXM. Client connections to this leading liquidity aggregation platform are powered by the industry-standard FIX protocol, and the liquidity bridged by B2CONNECT can now be distributed directly on PrimeXM for its subsequent distribution across other trading venues. Both the quoting and trading sessions are supported, providing immense benefits to trading venues participating in the B2CONNECT ecosystem and offering them new exciting opportunities to grow their business and differentiate from competitors in both the scope and performance of trading instruments available both to their users and the trading community as a whole. #### Improvements [#improvements-24] ##### Automatic validation of markups [#automatic-validation-of-markups] The price construction mechanism featured by B2CONNECT has been further improved by adding validation to the key parameters entered for price markups. If the markup values assigned to the BID and ASK sides are asymmetric, a warning is issued prompting a venue operator to correct the entered values so that unequal markup amounts are not placed on both sides of the order book. ##### More data for tracking orders and matching elements of the hedging flow [#more-data-for-tracking-orders-and-matching-elements-of-the-hedging-flow] The logging and reporting functionality provided by various B2CONNECT services has been enhanced by listing external execution identifiers assigned by connected liquidity providers along with their B2CONNECT-assigned equivalents. This way, order matching has become much quicker, also facilitating subsequent analysis of trades. Moreover, orders have also become easier to track thanks to newly introduced granular timestamps. #### Resolved issues [#resolved-issues-25] * Fixed an issue due to which the order book was reset upon receiving out-of-sequence incremental updates for Level 2 quotes from one of the supported liquidity providers. * Fixed an issue related to one of the supported liquidity providers: a command to subscribe to incremental updates was ignored for all trading instruments if it couldn’t be executed only for some of them. * Fixed an issue related to the B2CONNECT FIX protocol: non-sequential numbers were assigned to certain FIX messages. * Fixed a rarely occurring issue related to the B2CONNECT Web UI: toggling a certain switch when setting up one hedging platform could result in misconfiguration of another hedging platform. * Fixed an issue related to the reporting and alerting service used for sending messages to a Slack channel: in some cases, incorrect data was being reported. *** ### October 14, 2022 [#october-14-2022] #### New features [#new-features-28] ##### Liquidity from and hedging on FTX [#liquidity-from-and-hedging-on-ftx] We are happy to announce yet another major achievement in our quest for unrivaled connectivity for B2CONNECT across the spot crypto liquidity space: with this release, FTX, a top-rated global crypto exchange, has been supported, once again letting B2CONNECT assert itself as a flagship liquidity hub and price discovery engine. The liquidity for all markets represented on FTX is immediately available for any exchange powered by the B2TRADER matching engine as well as to any trading platform connected to B2CONNECT via the FIX API. Along with supplying the price feed for spot markets, the newly introduced connection adapter radically extends the range of price risk hedging options offered by the B2CONNECT hedging engine. #### Improvements [#improvements-25] ##### DB connectivity monitoring [#db-connectivity-monitoring] When it comes to the cloud infrastructure accommodating the B2CONNECT services, we put our best efforts to not only ensure its highest performance and extreme reliability, but also envision efficient ways to monitor and maintain connectivity. In keeping true to our principle — trust, but verify — we have implemented automated detection of connectivity issues related to managed cloud database services. ##### Optimal subscription management [#optimal-subscription-management] Superb performance is the cornerstone on which rests the success of the B2CONNECT liquidity platform, and it’s been proved time and again during its development that the key to achieving the highest degree of efficiency is constant optimization. This time, it has been ensured that the liquidity hub only subscribes to the symbols that take part in liquidity distribution. This saves the cloud resources due to removal of subscriptions which are not currently in demand and further improves the overall platform performance. #### Resolved issues [#resolved-issues-26] * Fixed an issue due to which one of services stopped after removing a subscription to a price feed. * Fixed an issue due to which a mandatory time-in-force parameter value wasn’t sent when placing hedging orders of a certain type on a particular hedging platform. *** ### September 23, 2022 [#september-23-2022] #### New features [#new-features-29] ##### Conversion of derivative contract lot sizes to smaller and larger tradable amounts [#conversion-of-derivative-contract-lot-sizes-to-smaller-and-larger-tradable-amounts] With this release, you can split derivative contracts and reform contract specifications with underlying digital assets to change the contract lot size and lot price. This is a major development, since it enables quoting and trading fractional and, inversely, consolidated crypto derivative contracts. For example, if an instrument is traded at a liquidity provider venue in lots of 1000, such derivatives can now be traded in lots of one to a million on a taker side, with the contract quotes readily adjusted to the new contract sizes. When the orders are placed for executions on liquidity provider venues, they are adjusted to meet the lot size requirements of each venue. #### Improvements [#improvements-26] ##### The order book state may be preserved indefinitely [#the-order-book-state-may-be-preserved-indefinitely] The adapter used to connect to liquidity providers has been further improved by adding the option to hold the last value of a quote indefinitely. A good case for this is dealing with acquisition of quotes when the asset price changes only intermittently even though the connection to the liquidity provider is alive. ##### The current state of Level 2 quotes is now reset upon disconnection [#the-current-state-of-level-2-quotes-is-now-reset-upon-disconnection] This improvement is related to the previous one: it has been ensured that even when the asset price is configured to handle infrequent refreshing of quotes, once connection to a liquidity provider goes down, the state of Level 2 quotes is reset until connection to the source of quotes is renewed. #### Resolved issues [#resolved-issues-27] * Fixed an issue due to which, when asset volume is denominated with high decimal precision, small order amounts could be truncated to zero and error messages may be sent by liquidity providers. It is now ensured that hedging is handled properly, and in cases when orders are so small that they would be rejected by liquidity provider venues, they are not sent there for execution. * Fixed an issue which caused race conditions. This has resulted in improved stability and performance of a hedging agent along with an adapter used to fetch asset quotes from a liquidity provider venue. * Fixed an issue related to recording of time values. It has been ensured that timing is now properly recorded and corrected for ongoing order execution requests. * Fixed an issue concerning a service responsible for handling the FIX protocol. The service is now capable of resuming the price feed after connection to the liquidity taker was reinstated. * Fixed an issue due to which upon entering a long numerical value on a Web UI form, its last digit was switched to zero. *** ### September 2, 2022 [#september-2-2022] #### New features [#new-features-30] ##### Updated documentation [#updated-documentation] A new section has been added to the B2CONNECT documentation providing a user interface overview and illustrating how to accomplish the most common tasks. Refer to the **Product guide** to learn about the hedging functionality provided by B2CONNECT. #### Improvements [#improvements-27] With this release, various changes have been introduced to B2CONNECT user interface, which include the following improvements: * A table header in the Hedging configuration section has become fixed, making it easier to see the field captions when scrolling down the page. * All buttons have been provided with tooltips describing their functionality. * The minimum screen resolution (960px) is now supported on all product pages. *** ### August 12, 2022 [#august-12-2022] #### New features [#new-features-31] ##### Full support for Huobi Futures [#full-support-for-huobi-futures] Huobi Futures, a top-rated derivative exchange platform, has been fully supported. As a result, robust supply of level 2 quotes has been ensured across the entire range of trading instruments, including but not limited to futures, swaps and perpetual swaps available on the newly supported platform. This new level of liquidity has been provided following a major update of a recently released Huobi Spot Adapter, which was greatly extended to allow B2CONNECT clients to explore all the advantages offered by Huobi-powered trading venues. The trading API is also supported, which opens new opportunities for best price execution and radically expands the range of options available to B2CONNECT Liquidity Hub clients in the realm of market risk mitigation while allowing them to offer their end users the tightest spreads and deepest order books across today’s markets. Among other features, pre-execution model is fully supported and immediately available to client venues utilizing the FIX protocol and relying upon the B2CONNECT signature FIX API. #### Improvements [#improvements-28] ##### Increased consistency of synthetic quotes [#increased-consistency-of-synthetic-quotes] The engine responsible for engineering synthetic cross pairs and fractional trading instruments has received yet another boost in functionality to increase the consistency of synthetic quotes by eliminating any outlying values when calculating spreads. ##### Extra validation ensuring decimal precision of asset prices [#extra-validation-ensuring-decimal-precision-of-asset-prices] Arguably, when it comes to cryptocurrencies and other types of digital assets, the issue of decimal precision may be challenging for some legacy trading platforms and liquidity aggregators that primarily deal with fiat instruments and traditional securities. In contrast, B2CONNECT ensures that liquidity is always ingested, handled and distributed with superb efficiency, regardless of decimal precision and numerical value range of asset prices. With an additional layer of validation added to its liquidity engine, B2CONNECT makes sure that decimal precision values are always handled in strict accordance with the client specification, throughout the entire liquidity processing pipeline. #### Resolved issues [#resolved-issues-28] * Fixed an issue due to which supported platforms could sometimes fail to subscribe to level 2 quotes provided by B2CONNECT. * Fixed an issue due to which the final status of an order execution could be recorded incorrectly in certain scenarios involving one of the supported hedging platforms. *** ### July 1, 2022 [#july-1-2022] #### New features [#new-features-32] ##### Hedging reports — New section in Web UI [#hedging-reports--new-section-in-web-ui] On a newly introduced Hedging Reports page, you can find the history of hedging orders, view comprehensive order data and drill down to the minute details of each execution. The data on order placement requests and hedging platform responses is readily available, along with the information related to timing of each step along the order processing pipeline. You can filter the reports by various criteria, including different types of order and counterparty IDs, order placement and execution data, as well as various time intervals. The table layout is configurable, making it possible to reorder the columns and display or hide any column according to your preferences. #### Resolved issues [#resolved-issues-29] * Fixed various usability issues to improve the user experience. * Fixed an issue which prevented access to inputs due to an overlapping menu. *** ### June 10, 2022 [#june-10-2022] #### New features [#new-features-33] ##### A tenfold increase in Level 2 quotes update speed [#a-tenfold-increase-in-level-2-quotes-update-speed] The rate of Level 2 quote updates has been increased ten times compared to the previous release, enabling liquidity feeds to be refreshed with an interval of 100 ms. This feature allows B2CONNECT Liquidity Hub clients to initiate and maintain the most up-to-date order books that enhance user experience for traders on the supported exchange and broker platforms, as well as make risk management aspects of trading venue operations more predictable. #### Improvements [#improvements-29] ##### API rate limits implementation [#api-rate-limits-implementation] The B2CONNECT Liquidity Hub hedging engine’s reliability has been given yet another boost with the implementation of support for request rate limits. This ensures optimal uptime for API connections employed for the purposes of trade executions and reporting. ##### Heartbeats and graceful connection termination [#heartbeats-and-graceful-connection-termination] Health checks and connection handling safeguards have been added to ensure a seamless connection to liquidity provider data. As a result, unmatched reliability in managing Level 2 quote feeds has been achieved. #### Resolved issues [#resolved-issues-30] * Fixed timeout issues that could affect reliability of full-duplex communication channels-while connecting to certain liquidity providers via API. * Fixed an issue with the mechanism responsible for restoring an API connection upon its interruptions in certain corner cases. * Fixed an issue due to which the Filled Amount field in hedging order execution reports could contain incorrect values. *** ### May 20, 2022 [#may-20-2022] #### New features [#new-features-34] ##### Markups as a function of order book depth [#markups-as-a-function-of-order-book-depth] B2CONNECT Liquidity Hub clients can now apply multiple markups based on the price level defined for Level 2 quotes. Together with variable volume modifiers introduced earlier this year, this feature empowers the trading venue operators to manage the liquidity of their order books to a highest precision, thus improving the user experience while mitigating market risks. #### Improvements [#improvements-30] ##### Improved logics for applying markups [#improved-logics-for-applying-markups] The algorithms used for applying both constant and multi-tiered markups have been revised. This has resulted in improved quality of liquidity distribution after applying markups. ##### More granular analytics with new data included in hedging order execution reports [#more-granular-analytics-with-new-data-included-in-hedging-order-execution-reports] More data about orders is now recorded by the B2CONNECT reporting engine. A new field has been added to store the order status information provided by hedging platforms. Furthermore, a new status has been included to distinguish expired orders from those canceled for other reasons. #### Resolved issues [#resolved-issues-31] * Fixed an issue that caused a leak of resources during disconnections occurring as a result of intermittent network failures. * Fixed several issues that occurred in rare scenarios. Reliability and high availability of services responsible for liquidity supply in various market conditions has been ensured as a result. *** ### April 29, 2022 [#april-29-2022] #### New features [#new-features-35] ##### Yet more liquidity from Huobi Global [#yet-more-liquidity-from-huobi-global] The B2CONNECT Liquidity Hub is celebrating a new major update: we worked hard to introduce a fully featured adapter for the top-rated crypto exchange Huobi Global. Both the Level 2 quote and hedging adapters have become available to all B2CONNECT Ecosystem participants. This highly anticipated component has boosted both the breadth and depth of the crypto spot liquidity offering, carrying a great advantage for supported digital asset exchanges, including B2TRADER. For the liquidity hub as a platform, this also ensures increased availability and improved failover capability. The influx of liquidity from the new source will also benefit the client venues integrated with B2CONNECT via FIX API. #### Improvements [#improvements-31] ##### Optimized market data delivery [#optimized-market-data-delivery] The parser of market data coming from one of the world's largest crypto exchanges has been optimized, which resulted in a significant improvement in the adapter performance. Latency has been reduced by an order of magnitude, and the quality of market data and overall reliability have been considerably improved. ##### More flexible hedging with enhanced time-in-force settings [#more-flexible-hedging-with-enhanced-time-in-force-settings] A hedging adapter for one of the major crypto-asset exchanges has been revamped, extending our offering to encompass the full range of trading parameters available for orders placed in the context of market risk hedging. With the newly introduced time-in-force options, our clients are free to devise more flexible and ultimately more efficient hedging strategies. #### Resolved issues [#resolved-issues-32] * Fixed an issue which didn't allow the hedging agent to record certain fields when trades were rejected by a hedging platform. * Fixed an issue which affected processing of incoming and outgoing messages used by one of the supported protocols, when some messages could be blocking other ones at a high load. A considerable potential bottleneck has been prevented as a result. * Fixed an issue that could affect order book consistency for one of the supported exchanges. * Fixed an issue that could have impact on the stability of some of the B2CONNECT services if reports were received in an incorrect format. * Fixed an issue that could result in a failure to cancel a previously placed order while executing a hedging strategy on one of the supported hedging platforms. ### April 8, 2022 [#april-8-2022] #### New features [#new-features-36] ##### Comprehensive integration with Bittrex Global [#comprehensive-integration-with-bittrex-global] A new adapter has been introduced to enable price discovery and market risk hedging on Bittrex Global. Connection to this global crypto exchange drastically extends the range of trading instruments and hedging options provided by B2CONNECT. ##### Hedging on Coinbase [#hedging-on-coinbase] A new adapter has been introduced to enable spot asset hedging on the Coinbase crypto exchange. For B2CONNECT Liquidity Hub clients who already came to appreciate the advantages of seamless Coinbase connection, this improvement signals complete integration with this major crypto trading platform, opening the opportunity for superior spot asset hedging. #### Improvements [#improvements-32] ##### Extended price feed options [#extended-price-feed-options] The price feed can now be streamed in the form of order book snapshots. Adding up to incremental feed updates, this further ensures even and reliable streaming of prices. ##### New performance benchmark reached [#new-performance-benchmark-reached] Over 200% increase in B2CONNECT performance has been secured thanks to optimization of the data interchange mechanism, which resulted in a major reduction of latency and more judicious use of computing resources. Smart use of cloud resources and bandwidth directly translates into the amount of trading instruments which a B2CONNECT instance can handle efficiently. This also implies increased market depth and higher frequency of symbol quote updates, along with a much better quality of order execution and improved bottom line. #### Resolved issues [#resolved-issues-33] * Fixed an issue impairing the reliability of streaming order book data in rare scenarios. * Fixed an issue which occasionally caused a resource leak in cases when specific configuration parameters were missing. The stability of the hedging services has improved as a result. * Fixed an issue causing occasional inversion of sides when hedging trades were placed on certain platforms. *** ### March 18, 2022 [#march-18-2022] #### New features [#new-features-37] ##### Streamlined order book consolidation [#streamlined-order-book-consolidation] With this release, B2CONNECT supports consolidation of Level 2 quotes with unlimited market depth into any order book, according to flexible configuration rules. As a result, B2CONNECT clients can stream a price feed with a specified liquidity distribution to fill an order book with fewer levels while preserving the overall market depth. This way the B2CONNECT platform, with its support for virtually unlimited market depth, becomes even easier to integrate with trading venues whose market depth is limited to just a dozen or a hundred order book levels. At present, this functionality is available only for services accessible via FIX API. ##### Improved SimpleFIX Go documentation [#improved-simplefix-go-documentation] The official documentation for the SimpleFIX Go library has been updated. This state-of-the-art library makes for a major contribution to open source on behalf of B2BROKER, providing an up-to-date FIX engine implementation out of the box while featuring high performance and employing a highly sought-after Go technology stack. The library is available at [https://github.com/b2broker/simplefix-go](https://github.com/b2broker/simplefix-go/) offering the global developer community a quick and easy approach to integrate FIX messaging pipelines into modern trading solutions powered by Go as well as ensure a closer integration with well-proven products from the B2BROKER family. #### Improvements [#improvements-33] ##### Support for liquidity with virtually unlimited order book depth [#support-for-liquidity-with-virtually-unlimited-order-book-depth] As a result of this improvement, nearly unlimited number of Level 2 quotes is now supported when it comes to the actual number of price levels in the order book, which includes (but is not limited to) order books featuring 1,000+ levels that are currently supported. ##### Extended configuration of Level 2 quotes [#extended-configuration-of-level-2-quotes] The set of configuration parameters required for consolidation of Level 2 quotes into a custom price feed has been extended to include the options that define the number of price levels being consolidated into a target order book, volume distribution settings and the rules for discovering prices at specific order book levels. #### Resolved issues [#resolved-issues-34] * Revamped a service responsible for switching the source of Level 2 quotes in the case when the counterparty starts supplying incorrect order book data. Continuous operation of price discovery services has been ensured as a result. * Fixed an issue that caused inversion of hedging trade sides in certain scenarios. *** ### February 25, 2022 [#february-25-2022] #### New features [#new-features-38] ##### Pre-trade execution control [#pre-trade-execution-control] B2CONNECT now supports pre-trade execution control that enables the trading venues integrated via the FIX API to connect to the B2CONNECT Liquidity Hub as takers. When connected as a taker, a venue receives Level 2 quotes, it can place orders and receive confirmations when a maker executes the orders. ##### FIX API documentation [#fix-api-documentation] Basic [FIX API specification](fix-api) has become available to help independent trading venues and liquidity providers integrate B2CONNECT Liquidity Hub into their solutions via the FIX API. #### Improvements [#improvements-34] ##### Pricing Service streams prices with markups already applied [#pricing-service-streams-prices-with-markups-already-applied] A specialized B2CONNECT service providing top-of-the-book prices (that is, Level 1 quotes) is now streaming quotes with configurable markups already applied, as opposed to the earlier implementation, with only the raw quotes provided so that markups had to be applied explicitly upon receiving the markup values via separate REST APIs. The newly introduced approach is much easier and less time-consuming. #### Resolved issues [#resolved-issues-35] * Fixed an issue that resulted in the lot size not being taken into account when placing hedging orders on certain hedging platforms. * Fixed issues that affected the stability and performance of the B2CONNECT hedging engine. *** ### February 4, 2022 [#february-4-2022] #### New features [#new-features-39] ##### Full support for Kraken spot liquidity [#full-support-for-kraken-spot-liquidity] Trading venues participating in the B2CONNECT Ecosystem can now take advantage of ready access to spot liquidity on one of the top-ranked cryptocurrency exchanges — yet another milestone for B2CONNECT continuing on its mission of diversifying access to liquidity, be it crypto spot markets, crypto derivatives or other popular trading instruments. #### Improvements [#improvements-35] ##### Improved support for Poloniex API [#improved-support-for-poloniex-api] The Poloniex connection adapter has been updated following the changes to the API of this leading digital assets exchange, which resulted in enhanced performance and improved connection stability. ##### Extended integration with B2TRADER [#extended-integration-with-b2trader] With this release, B2CONNECT features even deeper integration with B2TRADER, a flagship matching engine and crypto assets exchange platform. As a result, more efficient delivery of trading reports and faster execution of hedging orders have become possible. #### Resolved issues [#resolved-issues-36] * Fixed an issue related to the Poloniex adapter and causing inconsistencies in Level 2 quotes under certain circumstances. * Fixed a reporting-related issue to ensure that the fees and commissions data is properly received and reflected in hedging reports. * Fixed issues causing occasional quote feed inconsistencies arising immediately after updating the configuration of some of the B2CONNECT services. *** ### January 14, 2022 [#january-14-2022] #### New features [#new-features-40] ##### Volume modifiers variable by price level [#volume-modifiers-variable-by-price-level] B2CONNECT Liquidity Hub clients can now configure a volume modifier (otherwise known as multiplier) as a function of market depth. Risk management precision can be ensured by fine-tuning liquidity distribution data in the order book. ##### Execution of hedging orders on Binance Futures [#execution-of-hedging-orders-on-binance-futures] A new adapter has been introduced for execution of hedging orders on Binance Futures, a major platform specializing in crypto derivatives. Combined with instruments for perpetual futures trading, this new service creates truly exciting opportunities for B2CONNECT Liquidity Hub clients. ##### Hedging of spot assets with Binance perpetual futures [#hedging-of-spot-assets-with-binance-perpetual-futures] Spot asset trades can be hedged with perpetual futures. B2CONNECT clients can reduce costs and improve the cash flow by applying more attractive strategies. #### Improvements [#improvements-36] * A new adapter has been introduced for connection to Gemini, another major cryptocurrency exchange providing spot liquidity for B2CONNECT clients. * A new adapter has been introduced for execution of hedging orders on the Poloniex crypto exchange. #### Resolved issues [#resolved-issues-37] * Fixed an issue that could result in omission of some trade parameters in the hedging orders trade history. * Fixed an issue that could cause an order timeout error despite normal execution of actual trades. ### December 17, 2021 [#december-17-2021] #### New features [#new-features-41] ##### Hedging configuration in the B2CONNECT Admin panel [#hedging-configuration-in-the-b2connect-admin-panel] Introducing a new Admin panel with a convenient user interface featuring useful hedging configuration options, allowing you to: * Specify the minimum and maximum amount at which to execute hedging orders, and define different hedge ratios for each order side. * Map some of the hedging order symbols to other symbols, meaning that you can hedge using any symbols apart from those present in a particular instrument. These options can find a variety of applications. For example, you can hedge by forcibly splitting large orders and executing each portion separately. ##### Hedging status — New section in Web UI [#hedging-status--new-section-in-web-ui] On a new Hedging Status page, you can manage and monitor trading venues and hedging platforms to solve any of the following tasks: * Run or stop the hedging process. * Connect hedging platforms to client exchanges or disconnect them according to your risk transfer preferences. * Manage API keys provided by the connected hedging platforms. *** ### December 3, 2021 [#december-3-2021] #### New features [#new-features-42] ##### FIX integration — Another major liquidity distribution platform supported [#fix-integration--another-major-liquidity-distribution-platform-supported] A new adapter has been introduced for connection to another major platform specializing in margin trading. This is a welcome addition to a rich set of connectivity options available to B2CONNECT Liquidity Hub clients. ##### Simultaneous connection to a number of ecosystem makers [#simultaneous-connection-to-a-number-of-ecosystem-makers] Any venue participating in the B2CONNECT ecosystem (or *ecosystem taker*) can now establish a live connection with multiple *ecosystem partners*, enjoying simultaneous access to multiple liquidity streams and gaining a competitive edge on the turbulent hedging market #### Improvements [#improvements-37] * The identifier assigned to executions by an exchange is now being tracked throughout the entire succession of hedging operations. This greatly improves the quality of end-to-end analytics available to risk managers employed at venues participating in the B2CONNECT ecosystem. * The hedging order placement process has been streamlined, resulting in improvements to the prioritization engine, which ensures the fastest possible routing of orders resulting in timely and efficient risk transfer coming handy to any risk management strategy. * In anticipation of possible connection failures or other issues compromising continuous liquidity flow from ecosystem makers, both the price feed and hedging can be configured to prescribe automatic switching to another ecosystem partner or external liquidity provider, followed by switching back to use them again as soon as the connection is restored. #### Resolved issues [#resolved-issues-38] * Fixed an issue that could compromise reliability of order routing services in some scenarios. Fault tolerance is now ensured in potentially disruptive cases, such as when trading symbols are found to be misconfigured or missing from a hedging configuration. *** ### November 12, 2021 [#november-12-2021] #### New features [#new-features-43] ##### The VWAP and total volume included in reports [#the-vwap-and-total-volume-included-in-reports] Hedging orders exceeding a certain amount (configurable) can be executed in multiple portions. The total hedging volume and Volume Weighted Average Price are included into a corresponding report. ##### 100 price levels — Market depth milestone passed [#100-price-levels--market-depth-milestone-passed] Liquidity can now be provided with a market depth of more than 100 order book levels, which in practice implies virtually infinite order book. The previous milestone, with a maximum of 100 levels in the order book, has been reached and passed — the actual market depth now depends solely on the available computing resources. ##### Flexible user roles and granular access permissions [#flexible-user-roles-and-granular-access-permissions] It is now possible to configure and assign custom user roles, dynamically if required. This approach to maintaining access permissions ensures proper access control granularity, promising an easier way to manage a multitude of permissions across various system modules. #### Improvements [#improvements-38] * Data exchange between various product services via the internal messaging system has been optimized, resulting in sturdier interoperability and reduced consumption of cloud resources. * Currency pairs can now be inverted, which adds up to the range of hedging parameters available for synthetic instruments. They can be modeled on any of the symbols in a pair, regardless of whether they are notionally considered base or quoted. #### Resolved issues [#resolved-issues-39] * Fixed an issue that imposed an unreasonable limit upon the order book depth. *** ### October 22, 2021 [#october-22-2021] #### New features [#new-features-44] ##### Synthetic Engine integration [#synthetic-engine-integration] The Synthetics Engine has become an integral part of the B2CONNECT Liquidity Hub ecosystem. ##### Notional values as hedging order limits [#notional-values-as-hedging-order-limits] The set of hedging configuration parameters has been extended, making for a much more flexible risk management: when configuring limit settings of your hedging orders, you can list both a base asset and a notional symbol which may be quoted in any asset, including fiat currencies. ##### More order types, hedging with time-in-force settings [#more-order-types-hedging-with-time-in-force-settings] The set of available time-in-force options has been extended. Apart from a variety of market orders, you can place limit orders and configure their slippage settings. #### Improvements [#improvements-39] * Precise timing is now an important aspect of analytics available to B2CONNECT Liquidity Hub clients. The time of order execution at a hedging platform is now being tracked, opening doors for new insights inspired by accurate execution data. * It is now possible to specify the minimum and maximum amount for hedging orders. The amount limits are adjusted to the hedge ratio. #### Resolved issues [#resolved-issues-40] * Fixed an issue compromising the stability of an internal service monitoring the status of sources supplying Level 2 quotes to B2CONNECT. Continuous streaming of liquidity feeds is now ensured. *** ### June 10, 2021 [#june-10-2021] #### New features [#new-features-45] ##### RESTful API with Swagger documentation [#restful-api-with-swagger-documentation] RESTful API has been provided to lay the ground for a graphical user interface and further integration between B2CONNECT and other B2BROKER products featuring a UI. ##### External liquidity providers as venues for price risk hedging [#external-liquidity-providers-as-venues-for-price-risk-hedging] Trades executed on B2TRADER can now be hedged automatically, by forwarding price risks to an external liquidity provider, such as Binance. ##### Direct hedging upon external liquidity providers for B2BX clients [#direct-hedging-upon-external-liquidity-providers-for-b2bx-clients] Direct hedging of price risks via external liquidity providers has become possible. You can execute hedging orders on Binance or any other platform connected to a client exchange participating in the B2CONNECT ecosystem and receiving liquidity from B2BX. ##### Currency conversion for values displayed in reports [#currency-conversion-for-values-displayed-in-reports] A new service has been introduced, tracking conversion rates and allowing you to convert the reported order size and trade total values into any currency. #### Improvements [#improvements-40] ##### Extended hedging parameters [#extended-hedging-parameters] The set of hedging parameters has been extended, enabling B2CONNECT clients to: * configure hedge parameters based on trader account identifiers * define a hedge ratio based on the trade side (buy or sell) * map a hedging instrument to another spot market symbol (for instance, you can hedge BTC/USDT trades with BTC/USDC orders) ##### Improved trade placement and execution analytics [#improved-trade-placement-and-execution-analytics] More data about each trade is now provided by B2TRADER, improving end-to-end analytics derived from hedging requests and responses. ##### Synthetics engine supports inversion [#synthetics-engine-supports-inversion] When designing synthetic instruments, components of synthetic cross pairs can now be inverted. #### Resolved issues [#resolved-issues-41] * Fixed an issue causing the hedging agent to drop connection in case of empty credentials having been specified for any API member in the configuration. * Fixed an issue preventing operation of some of the markets available to a pricing service. * Fixed an issue related to a price discovery gateway and resulting in improper application of market depth constraints to some of the trading instruments. *** ### February 18, 2021 [#february-18-2021] #### New features [#new-features-46] ##### Internal hedging on B2TRADER [#internal-hedging-on-b2trader] Introducing a new hedging agent, named Hedgehog, for redirecting trading orders placed on one platform to another venue. ##### Authorization based on JSON Web Token [#authorization-based-on-json-web-token] A new JWT-based service has been implemented, enabling authorization of clients connecting to B2CONNECT. Among other things, this makes it possible to identify transactions made on different B2TRADER platforms with a view of subsequent hedging. ##### Tracking of hedging orders [#tracking-of-hedging-orders] A new service has been implemented for gathering statistics and analytics necessary to properly monitor execution of hedging orders. #### Improvements [#improvements-41] ##### Timeout customization for individual instruments [#timeout-customization-for-individual-instruments] Custom timeouts can now be configured separately for each instrument. Using this option, you can reset the instrument's order book and switch to another price source, ensuring price quotation reliability for low-liquidity instruments. ##### Improved price feed [#improved-price-feed] The price feed reliability has been ensured, while the overall performance has improved. ##### New metrics for performance monitoring [#new-metrics-for-performance-monitoring] New metrics have been added for tracking the status and performance of B2CONNECT services to identify and prevent any possible failures. #### Resolved issues [#resolved-issues-42] * Fixed an issue preventing constructed quote (market) updates for some instruments by checking that a corresponding symbol is mapped. Learn about trading platforms, payment providers, and other third-party solutions integrated with B2CORE Learn about trading platforms, payment providers, and other third-party solutions integrated with B2CORE Gain a deeper view of the B2CORE Back Office user interface Gain a deeper view of the B2CORE Back Office user interface Step-by-step guides for common admin tasks and configurations in the B2CORE Back Office Step-by-step guides for common admin tasks and configurations in the B2CORE Back Office Deploy branded mobile apps for iOS and Android Deploy branded mobile apps for iOS and Android Identify and address common issues quickly and effectively with our guides Identify and address common issues quickly and effectively with our guides The B2CORE API is restricted and *not* publicly available. If you require the API documentation, please submit a support ticket with a clear and detailed description of your intended use cases. Providing a thorough explanation of how you plan to use the API will help us assess your needs accurately and minimize follow-up questions or delays. Explore the Back Office and learn how to launch your own partnership programs Explore the Back Office and learn how to launch your own partnership programs Discover IB Room and join a partner plan to begin attracting new clients while earning rewards Discover IB Room and join a partner plan to begin attracting new clients while earning rewards ## May 29, 2026 [#may-29-2026] ### New features [#new-features] #### CPA (Cost-Per-Acquisition) payment plans [#cpa-cost-per-acquisition-payment-plans] A new **Cost-Per-Acquisition (CPA)** payment model is now available. Brokers can reward partners when a referred client reaches a milestone, such as completing **registration**, passing **KYC verification**, or making a **minimum deposit**. *** #### Granular access permissions [#granular-access-permissions] Access to the **Introducing Brokers** section can now be controlled with greater precision. The broad **View** and **Edit** permissions have been split into per-section permissions, so Back Office roles can be granted access to exactly the sections they need — for example, viewing **Reports** without the ability to edit **Payment plans**. *** ### Improvements [#improvements] * A **date range** filter has been added to an individual partner's payment report, making it easier to review rewards over a specific period. *** ### Resolved issues [#resolved-issues] * Resolved an issue where exporting trades for a specific client could be very slow for partners with large trade histories. These exports now complete significantly faster. *** ## Past releases [#past-releases] ### April, 2026 [#april-2026] #### New features [#new-features-1] ##### Platform Spread and Platform Markup payment plans [#platform-spread-and-platform-markup-payment-plans] Two new payment plans are now available — **Platform Spread** and **Platform Markup**. They reward partners based on the actual spread and markup applied on the trading platform, captured automatically per symbol, rather than values estimated from a configured ratio. #### Improvements [#improvements-1] * The process that recalculates statistics and reports has been reworked for greater speed and reliability. Partner and program figures now refresh more consistently, even for brokers handling large data volumes. *** ### March, 2026 [#march-2026] #### New features [#new-features-2] ##### IB chain reassignment [#ib-chain-reassignment] New **“Reassign Users”** UI added. Brokers can now reassign an entire IB sub-branch from one partner to another in a single operation. This significantly simplifies the reassignment process, making it faster and less prone to errors than moving branches manually one by one. #### Improvements [#improvements-2] * A **Position lifetime** column has been added to the **Trades** table. *** ### February, 2026 [#february-2026] #### New features [#new-features-3] ##### TradeLocker platform integration [#tradelocker-platform-integration] The **TradeLocker** platform is now supported, enabling brokers to connect TradeLocker to their partnership program and reward partners on the same terms as other platforms. Support covers accounts, symbols, trading groups, trades, and payment plans, all manageable from the Back Office. #### Improvements [#improvements-3] * Added a new **IB Program Type** restriction. *** ### January, 2026 [#january-2026] #### New features [#new-features-4] ##### Asynchronous data exports [#asynchronous-data-exports] Exporting large data sets from the **Introducing Brokers** section — including trades, payments, accounts, and rewards — now runs asynchronously in the background. Brokers can continue working while an export is prepared and download the file once it's ready, rather than waiting on the page or risking a timeout. This makes it possible to export much larger data sets reliably. ### December, 2025 [#december-2025] #### New features [#new-features-5] ##### B2TRADER platform integration [#b2trader-platform-integration] The B2TRADER platform is now integrated with B2CORE IB, enabling brokers to connect B2TRADER to their IB setup and start rewarding partners on the same terms as other platforms. All payment plans are supported, so you can keep existing partner configurations and apply the same reward logic across supported environments. ##### Spread payment plan for cTrader [#spread-payment-plan-for-ctrader] The Spread payment plan is now available for the cTrader platform, allowing brokers to reward partners based on a percentage of the spread. This option aligns cTrader with the spread-based rewards model already available on other platforms, so you can keep a consistent approach to partner payouts. #### Improvements [#improvements-4] * Reports for deposits and withdrawals have been reimplemented to improve consistency and performance. The updated reporting logic is designed to present results in a clearer, more stable way. ### October, 2024 [#october-2024] #### New features [#new-features-6] ##### New Spread payment plan for MT5 platform [#new-spread-payment-plan-for-mt5-platform] The IB team is excited to introduce the much-anticipated Spread payment plan for the MetaTrader 5 platform. This innovative plan enables brokers to reward their partners based on a percentage of the spread, significantly expanding their referral reach across various markets. ##### Tier volume in USD [#tier-volume-in-usd] From now on, trading volume for tiers can be set not only in lots, but in USD as well, offering brokers increased flexibility in IB types configuration. #### Improvements [#improvements-5] * The **IB** column has been added to the **Clients** page. It shows the partner's name who referred the client and serves as a link to the partner details. * The **Payments** > **Methods** page has been removed from the Back Office due to the potential for unforeseen issues arising from modifying or deleting payment methods. For the same reason, it’s no longer possible to delete platforms through the Back Office. * When creating a new IB type, a default tier with empty parameters will no longer be automatically created, as previously done. #### Resolved issues [#resolved-issues-1] There have been no customer-facing issues reported in this release. *** ### August, 2024 [#august-2024] #### New features [#new-features-7] ##### Migration to PostgreSQL [#migration-to-postgresql] Our team is happy to announce that the migration from MongoDB to PostgreSQL has been successfully completed. Although this is mostly an internal technical enhancement, end-users will notice that the IB application now runs faster and more stable. ##### Min. position lifetime for cTrader [#min-position-lifetime-for-ctrader] For the cTrader platform, the **Min position lifetime** option has been added. The logic is exactly the same as for MT platforms: if a position was closed earlier than the Min position lifetime, it’s not taken into account in rewards calculations. The **Min position lifetime, sec.** field is now available in the cTrader platform preferences. #### Improvements [#improvements-6] * IDs of new partners are now in UUID format, not an index number, as it was before. This change eliminates the need for the **Encrypted** setting on the **Promo** > **Landings** > **Links** page. Existing IDs retain the numeric format, the **Encrypted** setting continues to work for them. All existing referral links remain working. * Information on clients’ accounts is now available on a separate **Accounts** tab in IB details. * Payment of rewards has become faster, thanks to technical improvements that allow for parallelization of the process. * Now running the system processes from the Back Office is disabled by default. It’s aimed at avoiding potential overloads of the database and application. Contact our technical support team if you need to restart a process. * To improve system performance, process logs are no longer stored in the database. As a result, the **Introducing brokers** > **Logs** section has been removed from the Back Office menu, and the **Logs** column has been removed from the **Introducing brokers** > **Processes** page. * To improve system performance, data storage limits have been implemented in the database: * Processes: 1 month * Deposits: 1 year * Withdrawals: 1 year * Trades: 1 year ### March 21, 2023 [#march-21-2023] #### New features [#new-features-8] ##### cTrader integration with IB [#ctrader-integration-with-ib] cTrader has been integrated with B2CORE IB, allowing you to connect the cTrader platform to your IB instance by navigating to **Introducing Brokers** > **Platforms** > **Platforms**. #### Resolved issues [#resolved-issues-2] * Fixed an issue due to which it was impossible to create a payment plan for all symbols in a trading group as it was only created for the selected symbol. * Fixed an issue due to which the trade opening time wasn’t updated according to the time zone set on the MetaTrade4 platform. * Fixed an issue due to which the position lifetime didn’t match the time difference between opening and closing a position. * Fixed an issue due to which the clients’ deposit and withdrawal operations weren’t displayed in the **Introducing Brokers** section. * Fixed an issue due to which duplicate records were displayed for deposit and withdrawal operations. ### April 12, 2022 [#april-12-2022] #### New features [#new-features-9] ##### Brand new IB section [#brand-new-ib-section] The IB section featuring new design and extended functionality for running partnership programs has been introduced in the B2CORE UI. For details, refer to the **For partners** section. ##### Max amount payment plan [#max-amount-payment-plan] A new **Max amount** payment plan has been introduced with this release. With this plan, you can pay partners a fixed amount for each lot traded by their clients, in the same way as with the Lot payment plan, but with the opportunity to set the maximum reward amount regardless of the number of levels and specify the exact amount which a partner receives at each level. For details, refer to [Payment plans](broker-guide/payment-plans#max-amount). ##### Data on deposits, withdrawals and trades [#data-on-deposits-withdrawals-and-trades] The **Deposits**, **Withdrawals**, and **Trades** tabs have been added to IB details in the B2CORE Back Office. The tabs display data on deposits, withdrawals, and trades of all clients of a selected partner. The export feature as well as filtering and sorting options are available. *** ### March 29, 2022 [#march-29-2022] #### New features [#new-features-10] ##### Deposits & withdrawals data [#deposits--withdrawals-data] The **Deposits** and **Withdrawals** sections have been added to **Platforms**. They display data on deposits/withdrawals of all clients on all trading accounts, indicating the date-time, account, amount, and currency as well as the unique identifier of the operation on the trading platform. *** ### March 15, 2022 [#march-15-2022] #### New features [#new-features-11] ##### Platform disabling [#platform-disabling] A new feature that enables you to turn off a trading platform without deleting it has been implemented. A new **Status** field (Enabled/Disabled) has been added to the platform details in **Platforms** > **Platforms**. ##### Account disabling [#account-disabling] A new feature that allows you to disable trading accounts without deleting them has been implemented. Disabled accounts are excluded from data sync and reward payment. A new **Enabled** field (Yes/No) has been added to the account details in **Platforms** > **Accounts**. ##### Filter by account type [#filter-by-account-type] This feature is aimed at closer integration with PAMM, MAM, and B2COPY. It helps to distinguish trading accounts from investment accounts. A new **Account type** field has been added to **Platforms** > **Accounts**, **Platforms** > **Trades** and **Payments** > **Rewards**. When opening a trading account, its type is obtained from B2CORE. When changing the type of an accounts group in B2CORE, the type is updated for all accounts. ##### Trading volume in USD [#trading-volume-in-usd] The **Trading volume, USD** column has been added to the **Introducing brokers** section and **Clients** tab in broker details. Filtering by non-zero/zero trading volume (Yes/No) is available. The **USD Trading volume** field has also been added to the **Payment report**, **Reports** tab in partner details and IB type details, to the trade details and payment details. ##### Deposits & withdrawals data [#deposits--withdrawals-data-1] The **Deposits** and **Withdrawals** tabs have been added to the client details in **Program** > **Clients** and account details in **Platforms** > **Accounts**. They display data on deposits/withdrawals, indicating the date-time, account, amount, and currency of the operation. ##### Contract size [#contract-size] A new **Contract size** field has been added to the symbol details, trade details and payment details. *** ### March 1, 2022 [#march-1-2022] #### New features [#new-features-12] ##### Partners and clients data import [#partners-and-clients-data-import] Customers who switch to B2CORE from other systems can now import data of their partners and clients into B2CORE IB. #### Improvements [#improvements-7] * Languages and themes of banners in selectors are now displayed in alphabetical order in the B2CORE UI. *** ### February 15, 2022 [#february-15-2022] #### New features [#new-features-13] ##### Deposits & withdrawals details [#deposits--withdrawals-details] Dates, currencies, amounts, and account numbers of deposits and withdrawals have been synchronized with MT4 and MT5. ##### Trading volume in USD [#trading-volume-in-usd-1] Trading volume in USD is now calculated for each trade. #### Improvements [#improvements-8] * The capability to sort banners by size has been added to the B2CORE UI. The banners are ordered by their width. If two banners have the same width, their length is taken into account. * The Client tag field has been added to the client’s details. Before, it was displayed only on the Clients tab in the partner’s details. *** ### February 1, 2022 [#february-1-2022] #### New features [#new-features-14] ##### PDO Driver v3 [#pdo-driver-v3] MetaTrader 4, MetaTrader5, and B2CORE Payment Method have migrated to the PDO driver v3. ##### B2CORE admin tags [#b2core-admin-tags] Access to the data of B2CORE Back Office sections can now be restricted using tags specified for the admin. See [B2CORE Back Office Guide](https://docs.b2core.b2broker.com/en/back-office-guide.html) for more details. ##### Languages priority [#languages-priority] The Priority property has been added to the Languages tab of **Promo** > **Landing** > **Links**. ##### Symbol group trades [#symbol-group-trades] The Trades tab has been added to the trading group details. On this tab, you can see and export a list of trades in the symbol group. #### Improvements [#improvements-9] * The **Base currency code** and **Quote currency code** fields have been added to **Platforms** > **Symbols**. Filtering and sorting by these fields are supported. *** ### January 18, 2022 [#january-18-2022] #### New features [#new-features-15] ##### WEBAPI v4 driver [#webapi-v4-driver] Sync of trading groups and trading symbols can now be run with the newly integrated WEBAPI v4 driver. ##### Drivers priority [#drivers-priority] The **Priority** property has been added to drivers, with prioritization logic similar to that of rate providers: first, the driver with the highest priority is taken, in case of failure — the next backup driver, and so on. If all drivers return a failure, the service reports that the function can't be performed. This property has been added to the **Drivers** tab in **Platforms** > **Platforms**. When creating a driver, it's automatically assigned the lowest priority; the priority can be changed when a driver is being edited. #### Improvements [#improvements-10] * A validation by platform ID has been added to the B2CORE Back Office, which prohibits connecting the same trading platform multiple times. ### December 21, 2021 [#december-21-2021] #### New features [#new-features-16] ##### Converter platform support [#converter-platform-support] Starting with this release, partners can receive rewards for the exchange operations performed by their clients. Currency pairs data is taken from the Currency pairs section of the B2CORE Back Office. Rewards are paid in the base currency of the partner's account, regardless of the currency pair of the exchange operation. The Commission payment plan is available. Rewards for exchange operations on demo accounts aren't processed. ##### Customizing link languages [#customizing-link-languages] For links in **Promo** > **Landings**, language customization has been added. You can configure separate URLs for each language of the landing page on the **Languages** tab, which has been added to the **Link** editing page. #### Improvements [#improvements-11] * From now on, when clients and partners are deleted from the B2CORE Back Office, their details such as name, email and account number are still displayed in the rewards history. * The **Platforms** section has been optimized to display information about various trading platforms: unused fields have been hidden to reduce the amount of displayed data and make it more accessible. * Sorting by the **Registrations**, **Clicks**, **Click Conversion Rate** fields has been added to the sections **Promo** > **Banners** > **Banners** and **Promo** > **Landing** > **Links**. *** ### December 7, 2021 [#december-7-2021] #### New features [#new-features-17] ##### Concurrency integration [#concurrency-integration] The concurrency framework has been implemented along with parallel processing of commands for synchronizing data with trading platforms, calculating rewards, crediting money to accounts and canceling rewards. The performance is expected to increase on average by 500%. ##### Support for B2CORE multi-currency accounts [#support-for-b2core-multi-currency-accounts] A new version of the **Payment method** for IB has been developed, which is compatible with multi-currency accounts of the B2CORE. It's important that this feature doesn't imply multi-currency payments: rewards are still paid in the original account currency or base currency. #### Improvements [#improvements-12] * The **Landing page** selector has been removed from banners create/edit pages. *** ### October 26, 2021 [#october-26-2021] #### New features [#new-features-18] ##### Export feature [#export-feature] The **Export** button is added to the number of sections and tabs and allows to download available data. For most sections, unless stated otherwise, the data is downloaded in CSV format, and retains all filters and a structure of the original table. The **Export** button is only visible to users with granted **Export** permissions. Explore the new feature here: * **Banners** — Introducing brokers > Program > Introducing Brokers > Edit > Banners tab. * **Links export** — Introducing brokers > Program > Introducing Brokers > Edit > Links tab. * **Currencies** — Introducing Brokers > Payments > Currencies section. * **Account transactions** — Introducing brokers > Payments > Accounts > Edit > Transactions tab. * **Transaction rewards** — Introducing brokers > Payments > Accounts > Edit > Transactions > Edit > Rewards tab. * **Logs** — Introducing brokers > Logs section. * **Countries** — Introducing brokers > Preferences > Location > Countries section. * **Accounts** — Introducing Brokers > Payments > Accounts section. The data in the Accounts section is downloaded in CSV format, and retains all filters and a structure of the original table except for the Balance field, which doesn't get exported. *** ### October 12, 2021 [#october-12-2021] #### New features [#new-features-19] ##### Transactions export [#transactions-export] List of transactions in the **Introducing Brokers** > **Payments** > **Transactions** section can now be exported via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. The export feature for this and other sections and tabs is only available to users with Export permissions. ##### Symbols export [#symbols-export] List of symbols can now be exported in the **Introducing Brokers** > **Platforms** > **Symbols** and **Introducing brokers** > **Programs** > **Types** > **Symbols** tab sections via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. ##### Trades export [#trades-export] Trades data for a particular account or a client can now be exported via the **Export** button located on **Trades** tab in **Introducing Brokers** > **Platforms** > **Accounts** and **Introducing Brokers** > **Clients** sections. The data is downloaded in CSV format, and retains all filters and table structure of the original table. ##### Accounts export [#accounts-export] List of all accounts or accounts belonging to a specific client can now be exported via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. To explore the feature navigate to **Introducing brokers** > **Platforms** > **Accounts** or **Introducing brokers** > **Clients** > **Account** tab. ##### Clicks statistics export [#clicks-statistics-export] Clicks data on the **Introducing brokers** > **Program** > **Introducing brokers** > **Clicks** tab can now be exported via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. #### Improvements [#improvements-13] * Newly generated QR codes in the **Promo** section are now displayed in a smaller size. *** ### September 28, 2021 [#september-28-2021] #### New features [#new-features-20] ##### Clients and trading groups export [#clients-and-trading-groups-export] List of Introducing brokers clients and **Platform** > **Groups** can now be exported to a CSV file via the new **Export** button that replaced the **Excel** and **CSV** buttons. This feature is only available to users that have **Export** permissions. All entries in an exported data set are sorted in the same way they were in the original table. #### Improvements [#improvements-14] * Users can now see when a particular program's tier or level was created and updated. * Date-time in all sections is now displayed in a single format: `Mon. DD, YYYY HH:MM:SS`, for example: Jan. 21, 2021 11:28:06. Month abbreviations consist of the first three characters of the month name. Months with four-character names, such as June, aren't abbreviated. * Paxios currency new alias is updated in currency details. #### Resolved issues [#resolved-issues-3] * Fixed the Client ID filter error in Preferences > Security > Authorizations, Preferences > Security > Authentications. *** ### September 14, 2021 [#september-14-2021] #### New features [#new-features-21] ##### Tiers and levels settings export [#tiers-and-levels-settings-export] Tiers and levels settings of an IB Program can now be exported to a CSV file via the new **Export** button (that replaced the **Excel** and **CSV** buttons). This feature is only available to users that have Export permissions. All entries in an exported data set are sorted in the same way they were in the original table. To explore the new feature, navigate to **Introducing Brokers** > **Program** > **Types** > **details** > **Tiers** and **Levels** tab. ##### Clicks records export [#clicks-records-export] Clicks records export is now available to users with **Export** permissions via the new **Export** button. All entries in an exported data set are sorted in the same way they were in the original table. To explore the new feature, navigate to **Promo** > **Analytics** > **Clicks**. *** ### August 31, 2021 [#august-31-2021] #### New features [#new-features-22] ##### Export and import permissions for Introducing brokers [#export-and-import-permissions-for-introducing-brokers] New **Export permission** and **Import permission** groups have been added to the **System** > **Groups** > **Introducing brokers** section of the B2CORE Back Office. ##### Geolocation update button [#geolocation-update-button] It has become possible to update your database to the latest version by clicking the **Update** button on the **Database** tab in the **Preferences** > **Location** > **Geolocation** section. ##### QR code generation [#qr-code-generation] It has become possible to generate QR codes for a partner link. A new feature is available in the **Program** > **Introducing brokers** section on the **Links** tab of the partner’s detailed information. #### Improvements [#improvements-15] * Only the languages, that are enabled in the **System** > **Localization** section, are now being displayed if you click the localization button next to the **Name** and **Description** fields of the **Preferences tab** in the **Introducing brokers** > **Program** > **Types** section. * You can now filter trading groups by multiple parameters at the same time. To do that, type in a list of groups separating them with space, comma, or colon in the filter field. * Symbol settings import support is available for macOS and Windows. *** ### August 03, 2021 [#august-03-2021] #### Improvements [#improvements-16] * The list of trading instruments is now synchronized and displayed in the **Symbols** section of the B2CORE Back Office. *** ### July 20, 2021 [#july-20-2021] #### New features [#new-features-23] ##### New Description field [#new-description-field] A new **Description** field has been added to IB types. In this field you can specify more information about the partnership program. ##### QR codes colors and icons [#qr-codes-colors-and-icons] Color and icon configurations for QR codes generation are added to the B2CORE Back Office. ##### Link to Release notes [#link-to-release-notes] You can navigate to Release notes from the **Updates** section of the B2CORE Back Office. #### Improvements [#improvements-17] * IB types, partners and clients are combined in the **Program** section in the B2CORE Back Office to optimize the convenience of B2CORE IB use. * To create a new IB type, specify only its name, description, type of registration, approval, and currency for rewarding partners. * When registering in the type with disabled approval option, the partner redirects immediately to the IB Room with no need to refresh the page. * The size of the distributive is now 2 times smaller. It speeds up the installation and updating processes, minimizes the amount of space needed on the hard drive and optimizes the hosting costs. * The troubleshooting is faster and more accurate, and the problems can be solved in a few seconds due to the improved diagnostics of the geographical location service. *** ### July 6, 2021 [#july-6-2021] #### Improvements [#improvements-18] * On the **Payment plans** tab of a symbol, you can now configure how much the broker pays for trades with this symbol for all IB types or edit these values in one place. This is especially useful when new symbols appear on trading platforms: on the list of symbols, sort and filter by date to select recently added symbols, then set up payment plans for all types at once on one page. * In the details of a partner, the number of levels for which the broker pays this partner is now explicitly displayed. When changing the IB type, the number of levels automatically changes according to the IB type settings. To set up individual conditions for a partner, the broker can select Custom Levels and specify the number of Master Levels for which the partner receives a reward. * The **encrypted links** configuration is moved from IB type settings to **Links** to make the setup more convenient. To enable or disable encryption for a link, open the edit link and set the value to Enabled or Disabled. * It's now possible to see not only levels for which the broker pays partners, but also those for which the broker doesn't pay. Partners still can see only paid levels which are configured in the IB type or individually for a partner. The Show hidden levels option can be enabled in the IB type, it's disabled by default. #### Resolved issues [#resolved-issues-4] * Fixed an issue with filtering by 0. You can now filter entries by any value including 0, for example, find crypto currency 0x. * In the partners app, fixed a filter that incorrectly displayed the list of rewards for the specified time period — not including the end date. For the end date, the time was set to 00:00, which caused incorrect selection and made it impossible to view the rewards of one day. The end date is now set to 23:59. *** ### June 22, 2021 [#june-22-2021] #### Improvements [#improvements-19] * Added currencies signs. * Special characters are now allowed in the Alias field for currency. * For payment plan, number of digits after the decimal separator now matches the currency settings (minor unit value). All non-significant zeros after the decimal separator are hidden for readability. * A new type of client request has been added to quickly filter requests related to Introducing brokers in the B2CORE Back Office. #### Resolved issues [#resolved-issues-5] * Fixed sorting and filters by country, latitude, longitude and position lifetime. *** ### June 8, 2021 [#june-8-2021] #### Improvements [#improvements-20] * Base and quote currencies were added to symbol details, trades details, and reward details. * Reward states naming was improved. The following states are now available: * **Done** — the reward was successfully credited to the partner’s account * **Pending** — the reward was calculated, but not yet credited to the partner’s account * **Canceled** — the reward was canceled and debited from the partner’s account * In the **trade details**, fields naming and order were reworked and improved. The data is now split into two tabs — **Trade data** and **Rewards**. * In the **reward details**, fields naming and order were reworked and improved. The data is now split into two blocks — **reward data** and **trade data**. * In the **symbol details**, fields naming and order were reworked and improved. The data is now split into two tabs — **Symbol** and **Payment plan**. * All top-ranked cryptocurrencies with a market capitalization of over $1B added to the default configuration to make the setup process easier. *** ### May 26, 2021 [#may-26-2021] #### New features [#new-features-24] ##### Min position lifetime [#min-position-lifetime] New parameter was added to MT4 and MT5 platforms in Introducing brokers. If a position was closed earlier than the min position lifetime, it's not taken into account in rewards calculating. ##### Symbols import [#symbols-import] It's now possible to import symbol settings, as a CSV file, in IB types. The **Import** button is available on the **Symbols** tab of the **IB type details** in the B2CORE Back Office. You can now export settings, change the formula, and then import the settings file in the same or in a different IB type. #### Improvements [#improvements-21] * Tier name was added. * Added MaxMind geolocation service diagnostics. * Added PostgreSQL reporting support for MT5. #### Resolved issues [#resolved-issues-6] * Fixed displayed number of digits after decimal separator for JYP. *** ### April 27, 2021 [#april-27-2021] #### New features [#new-features-25] ##### Reports [#reports] The Reports section has been added. At the moment, Acquisition report and Payment report are available with date range filters, grouping by hour, day, week, month, year. IB also provides performance indicators with actual value, absolute, and relative change compared to the previous period, as well as traffic analytics: group by country, geographic region, traffic source. ##### Symbols export [#symbols-export-1] It's now possible to export symbol settings to a CSV file. The Export button is available on the Symbols tab of IB type details. ##### New rates provider integrated [#new-rates-provider-integrated] A new rates provider has been integrated — **Open Exchange Rates**. #### Improvements [#improvements-22] * Reworked and optimized the naming of entities related to Symbols. * Another update in rates providers: B2BINPAY Rate Provider was removed. * Open positions on MetaTrader 4 added to trading session syncing. * Position ID added to trading session syncing. * Payment Level UX improved. * Added Diagnostic failure details. *** ### March 16, 2021 [#march-16-2021] #### New features [#new-features-26] ##### Lot size [#lot-size] A new **Lot size** field has been added for cent groups in the **Platforms** > **Groups** section. ##### Geolocation service [#geolocation-service] A new IP intelligence and online fraud prevention tool - **MaxMind** has been added to **Preferences** > **Location** > **Geolocation**. ##### Location data [#location-data] New fields: **Latitude**, **Longitude** and **Country** have been added to clicks statistics data in **Promo** > **Analytics**. ##### Country of residence [#country-of-residence] A new **Country of residence** field has been added to IB’s and client’s **Personal data** tabs. ##### Countries [#countries] A new **Countries** section has been added to **Preferences** > **Location**, displaying a list of countries divided into the following fields: Name, Alpha-2 code, Alpha-3 code and Numeric code, which conforms to the [ISO-3166 standard](https://www.iso.org/iso-3166-country-codes.html). ##### Geographic regions [#geographic-regions] A list of Geographic regions in M49 Standard Country or Area Codes for Statistical Use (United Nations GeoScheme) has been added. ##### Geospatial queries support [#geospatial-queries-support] Added Geospatial Queries support within GeoJSON objects: points and polygons. ##### Clicks and registrations stats [#clicks-and-registrations-stats] Statistics on banner clicks and the following registrations are added to **Promo** > **Analytics**. *** ### March 2, 2021 [#march-2-2021] #### New features [#new-features-27] ##### User-Agent info for link clicks [#user-agent-info-for-link-clicks] To **Promo** > **Analytics** > **Clicks**, a new field **User-Agent** has been added to display information about the software, such as browser and operating system, used by people who clicked on partners’ affiliate links. ##### Extended settings for Master levels [#extended-settings-for-master-levels] A new setting is added to Master partners that allows to override the number of Levels a Master partner is paid for. ##### HTTP version preference [#http-version-preference] Added HTTP Protocol Version (1.0, 1.1, 2.0) preference to deal with Expect: 100-continue header. *** ### February 16, 2021 [#february-16-2021] #### New features [#new-features-28] ##### Rewards data export [#rewards-data-export] Brokers can now export information about all rewards paid within a particular IB type or to a particular partner via the new **Export** button added to **Program** > **Introducing Brokers** / **Type** > **Edit** > **Rewards** tab. ##### Master partner settings [#master-partner-settings] A new feature that allows brokers to individually set the Number of Levels and Master Level Ratio for Master partners has been added to the Personal data tab of an IB. ##### Trading session sync by trading account number [#trading-session-sync-by-trading-account-number] A new **Trading account number** option has been added and allows a broker to synchronize the trading session for the selected trading account from the admin panel. ##### Banners [#banners] New **Banners**, **Themes**, **Languages** and **Sizes** subsections have been added to the Promo > Banners section, allowing the broker to create and manage the banners in an easier and more efficient way. ##### Prevented attacks log [#prevented-attacks-log] A new **Security** > **Attacks** section has been added that displays all prevented brute-force attacks. ##### System incidents log [#system-incidents-log] A new **Security** > **Incidents** section has been added that displays information about all security incidents registered in the systems such as: invalid client ID, invalid client secret or invalid access token. ##### Blacklist and Whitelist settings for an API access [#blacklist-and-whitelist-settings-for-an-api-access] New **Blacklist** and **Whitelist** sections have been added and allow admin users to manage which IPs get access to APIs. *** ### February 2, 2021 [#february-2-2021] #### New features [#new-features-29] ##### IB type change [#ib-type-change] A new option has been added that allows brokers to change partner’s type. ##### Rewards cancellation [#rewards-cancellation] A new option has been added that allows brokers to cancel trade rewards. ##### Tier rolling period [#tier-rolling-period] A new **Tier period** field has been added to the **Program** > **Types** > **Edit** > **Preferences** tab, allowing the broker to customize the duration of each tier in rolling days. ##### Trading groups archiving [#trading-groups-archiving] Brokers can now archive trading groups, accounts, and symbols that were removed from trading platforms. ##### Rewards per transaction [#rewards-per-transaction] A new **Rewards** tab, that contains a list of all rewards for a specific transaction, has been added to transaction details in **Payments** > **Transactions**. #### Improvements [#improvements-23] * The process of setting up landing links for partners is simplified. ### December 22, 2020 [#december-22-2020] #### New features [#new-features-30] ##### Encrypted tokens [#encrypted-tokens] Encrypted tokens option has been added to **Promo** > **Landings** > **Links**. ##### Tier calculation [#tier-calculation] Tiers can now be calculated by the number of active clients referred by a partner. ##### Position settings in payment plan [#position-settings-in-payment-plan] A new **Position** field has been added to the **Platforms** > **Symbols** > **Edit** > **Payment plan** tab and indicates whether the payments are made for a closed or an open position, or for both. ##### Bulk update of trading groups [#bulk-update-of-trading-groups] An option to bulk update the settings of the trading groups has been added. ##### 145 new filters [#145-new-filters] Data filtering across the entire **Introducing Brokers** section has been made even better with around 145 of new filters. *** ### December 8, 2020 [#december-8-2020] #### New features [#new-features-31] ##### Program rewards statistic [#program-rewards-statistic] Report on all rewards payable in a particular program type has been added to **Program** > **Types** > **Edit** > **Reports** tab. ##### Partner’s rewards statistic [#partners-rewards-statistic] Report on all rewards payable to a particular partner has been added to **Introducing brokers** > **Edit** > **Reports** tab. ##### Export of partners and clients data [#export-of-partners-and-clients-data] Data in the **Introducing brokers** > **Program** > **Introducing brokers** and **Introducing brokers** > **Program** > **Clients** sections can now be exported via the newly added export function in CSV or Excel formats. *** ### November 24, 2020 [#november-24-2020] #### New features [#new-features-32] ##### Payments and trades data export [#payments-and-trades-data-export] Data in the **Trades** and **Payments** sections can now be exported in CSV or Excel formats. ##### Restricted registration [#restricted-registration] A new **Restricted registration** type has been added to **Program** > **Types** > **Edit** > **Preferences** and allows a selective acquisition of new partners for a particular partnership program. *** ### November 17, 2020 [#november-17-2020] #### New features [#new-features-33] ##### New payment systems [#new-payment-systems] Three new rate providers have been integrated: **B2BINPAY**, **CoinMarketCap** and **European Central Bank**. ##### Custom rate provider [#custom-rate-provider] With the new **Custom rate provider** feature, brokers can now create their own crypto currency exchange rates. ##### Support for multi-language links [#support-for-multi-language-links] Multi-language links support has been added to the B2CORE URI. ##### System logs [#system-logs] The **Logs** section has been added and provides detailed information about all system events. ##### Network diagnostics [#network-diagnostics] Network diagnostic is added and allows to individually or in bulk test the connection of drivers in **Platforms**, **Rates** and **Geolocation** sections. ##### Unix socket support [#unix-socket-support] **Unix socket** support has been added to the **Payment method** connection settings. ##### AWS deployment support [#aws-deployment-support] Support for deployment on AWS has been added. *** ### September 22, 2020 [#september-22-2020] #### New features [#new-features-34] ##### Client details [#client-details] Brokers can now view full client details in the **Partner** > **Referral** section of the B2CORE UI. ##### Reward details [#reward-details] Brokers can now view full partner rewards details in the **Partner** > **Rewards** section of the B2CORE UI. #### Improvements [#improvements-24] * A majorly improved **Introducing brokers** section of the B2CORE Back Office that now displays all data available in the partnership program. * The **Client chain** field has been added to the client’s **Personal data** tab and indicates which partner referred a particular client to the broker. The chain data is presented in the following format: Partner's name → Client's name. Understand the basics and learn everything you need to start using the B2TRADER API Understand the basics and learn everything you need to start using the B2TRADER API Consult an in-depth reference describing REST API requests and responses Consult an in-depth reference describing REST API requests and responses Explore the supported WebSocket API methods and streams Explore the supported WebSocket API methods and streams Connect to the FIX 4.4 API for market data streaming and order execution Connect to the FIX 4.4 API for market data streaming and order execution ## June 2, 2026 [#june-2-2026] ### Improvements [#improvements] #### Trading API: Stop orders for closed markets [#trading-api-stop-orders-for-closed-markets] The **Trading API** now accepts **Stop** orders for markets that are closed according to their trading calendar. The order is stored and activates automatically when the market reopens, instead of being rejected at submission. #### Reports API: full account history [#reports-api-full-account-history] Trading reports can now be generated for the entire account history. The previous **92-day** limit has been removed, and an **All data** range is now available for report generation. #### Trading API: market asset identifiers [#trading-api-market-asset-identifiers] The `baseAssetId` and `quoteAssetId` fields have been added to the v6 `/markets` responses, allowing clients to resolve the base and quote assets of each market without additional lookups. #### Accurate unrealized PnL [#accurate-unrealized-pnl] Unrealized PnL returned by the API is now calculated using the correct order book side for each position direction, improving the accuracy of PnL values in position and margin responses. *** ### Resolved issues [#resolved-issues] * Resolved an issue where `WebhookAlert` order reason and position modifier values were returned as numeric codes instead of API enum strings in History API `/v2/orders` responses. ## April 9, 2026 [#april-9-2026] ### New features [#new-features] #### Trading credit in API responses [#trading-credit-in-api-responses] Broker-issued **trading credit** is now exposed through the API. The account margin data response and the real-time margin stream include the current credit amount in the Reference Asset (`creditInRAT`). Credit is included in the account equity and excluded from the withdrawable amount. *** ### Improvements [#improvements-1] #### Webhook Trading API: webhook URL in key listing [#webhook-trading-api-webhook-url-in-key-listing] The list webhook API keys response now includes the `webhookUrl` field, so the configured webhook endpoint can be retrieved for each key. ## March 16, 2026 [#march-16-2026] ### New features [#new-features-1] #### Webhook Trading API [#webhook-trading-api] A new **Webhook Trading API** has been added, enabling automated order creation via webhook alerts with API key authentication. **Key points:** * Create and manage webhook API keys for secure authentication * Receive trading alerts and create orders automatically * Idempotency supported via deduplication ID * Market type routing by symbol prefix (spot, CFD, perpetual) #### Public Account ID [#public-account-id] A new `publicAccountId` field has been added across all API endpoints, providing a human-readable account identifier as an alternative to internal UUIDs. **Affected APIs:** * Trading API — account-related responses and filters * Settings API — account configuration endpoints * History API — all REST endpoints and WebSocket streams * Reports API — report responses and filters #### Long-term trading data history [#long-term-trading-data-history] Date range restrictions have been removed from **Order History** and **Closed Positions** endpoints, allowing access to full trading history without time-based limitations. *** ### Improvements [#improvements-2] #### Transfer subtype field [#transfer-subtype-field] A new `subtype` field has been added to transfer responses in the History API to distinguish **Negative Balance Protection** transfers from manual ones. #### Rounded position prices [#rounded-position-prices] The `positionPriceInRAT` values are now properly rounded in closed position API responses according to the Reference Asset (RAT) scale. *** ### Resolved issues [#resolved-issues-1] * Resolved an issue where `/total-swaps` requests returned HTTP 504 timeout errors. ## March 11, 2026 [#march-11-2026] ### Added FIX API documentation [#added-fix-api-documentation] Added new FIX API section covering Market Data and Trading sessions via the FIX 4.4 protocol. ## March 11, 2026 [#march-11-2026-1] ### Initial version [#initial-version] ## March 2, 2026 [#march-2-2026] ### New features [#new-features-2] #### Trading Terminal AI assistant [#trading-terminal-ai-assistant] A new **AI assistant** has been added to the Trading Terminal, providing traders with an intelligent widget for market analysis and trading support. *** ### Improvements [#improvements-3] #### Public Account ID (preview) [#public-account-id-preview] The `publicAccountId` field has been added to account-related API responses as a preview, ahead of the full rollout across all endpoints. ## February 25, 2026 [#february-25-2026] ### New features [#new-features-3] #### Funding Rates API [#funding-rates-api] New API endpoints have been added for retrieving funding rate data synchronized from **B2CONNECT**, including funding rates, mark price, and funding interval for Perpetual Futures markets. **Key points:** * Funding rate values streamed in real time * Mark price used for position valuation when available from LP * Funding interval synchronized per market configuration * FIX API contract extended with funding data fields #### OHLC Candlestick API [#ohlc-candlestick-api] A new API endpoint has been added for retrieving OHLC (candlestick) data, supporting both **Spot** and **Perpetual Futures** markets. Minute-level candle data is now stored for up to 5 years. OHLC candle data streaming is also available via the WebSocket API using gRPC transport, providing real-time candlestick updates. #### Favorite markets [#favorite-markets] A new **Favorite markets** feature has been added, allowing traders to manage personalized market lists via the Trading API. #### Comment field for orders and positions [#comment-field-for-orders-and-positions] A new `comment` field has been added to order and position responses across REST, WebSocket, and History APIs. The comment can be set when placing an order and is propagated to the associated position and execution records. #### B2COPY Integration API [#b2copy-integration-api] New API endpoints have been added for **B2COPY** and IB (Introducing Broker) integrations, including special account types for copy trading. The `isCopyTradingAccount` field has been added to the `/api/v1/total-fundings` endpoint. *** ### Improvements [#improvements-4] #### FIX API: enhanced request throughput [#fix-api-enhanced-request-throughput] The FIX API trading request processing has been optimized to support up to 100 requests per second per connection. All `TimeInForce` types are now supported, including **GTD** (Good Till Date). #### Multilingual support [#multilingual-support] Trading API, Settings API, and Reports API endpoints now support multilingual content with full Unicode character support, enabling localized responses for configurable fields, report names, and templates. #### Stop Market order calculation [#stop-market-order-calculation] The **Value** and **Amount** calculation for **Stop Market** orders has been corrected for **Spot** markets. **Slippage Rate** has been removed from **CFD** and **Perpetual Futures** order calculations. #### Trading API: empty categories hidden [#trading-api-empty-categories-hidden] Empty market categories are now automatically excluded from Trading API responses, reducing unnecessary data in category listings. #### Balance API: zero balance for all assets [#balance-api-zero-balance-for-all-assets] Assets without prior balance operations now return a zero balance in API responses instead of being omitted. #### Cross-rate market configuration [#cross-rate-market-configuration] Markets used exclusively for cross-rate calculations can now be disabled for trading while remaining active for rate conversion. #### History API: extended contracts [#history-api-extended-contracts] Positions and Events API responses have been extended with additional fields. The `updatedAt` field is now available as a sorting and filtering parameter in History Server API endpoints. #### Settings API: market update endpoint [#settings-api-market-update-endpoint] The market update endpoint has been changed from `PATCH` to `PUT` semantics, requiring the full market object in the request body. #### Settings API: legacy endpoints removed [#settings-api-legacy-endpoints-removed] Legacy commission and routing rule endpoints have been removed following the tier commission update. Use the current endpoints as documented in the API reference. *** ### Resolved issues [#resolved-issues-2] * Resolved an issue where `takeProfitPrice` and `stopLossPrice` values were missing from the History Server `/v2/orders` endpoint responses. * Resolved an issue where bulk order cancellation returned a successful result for non-existing orders. * Resolved an issue where bulk order cancellation returned a successful result for orders that could not be cancelled. * Resolved incorrect error codes returned when `closePositionLotAmount` was set to `0`, a negative value, or an empty string. * Resolved an issue where the WebSocket Book stream continued sending prices with an outdated tick size after market parameter changes. * Resolved an issue where negative spreads in the **Market Data API** were not handled correctly. * Resolved an issue where orders could not be created when using the default 24/7 calendar. * Resolved an issue where the `/external-orders` API returned `null` for `rejectReason` although the Trading Server received a reason from the LP. Customize your Trading Terminal and configure settings Customize your Trading Terminal and configure settings Explore and manage all available trading widgets Explore and manage all available trading widgets Learn basic terms and values used across the platform Learn basic terms and values used across the platform Get a quick introduction to B2TRANSLATE and get familiar with basics and key terms Get a quick introduction to B2TRANSLATE and get familiar with basics and key terms Explore the B2TRANSLATE interface and start managing your product translations Explore the B2TRANSLATE interface and start managing your product translations ## July 9, 2026 [#july-9-2026] ### New features [#new-features] #### Notifications [#notifications] **B2TRANSLATE** now includes a notification center. A bell at the bottom of the sidebar shows a badge with your unread count and opens a panel with your most recent notifications, such as a finished AI translation, a ready export, or a completed import. Open **All notifications** to see the full history, and mark notifications as read individually or all at once. Notifications can also be delivered outside the app — to **Email**, **Slack**, or **Telegram**. A workspace administrator sets up these channels and chooses who receives each type of event. *** #### Account settings page [#account-settings-page] A new **Account** item in the sidebar opens a dedicated **Settings** page that gathers your personal options into one place, with tabs for **Personal API tokens** and **Change password**. *** ### Improvements [#improvements] #### Change your own password [#change-your-own-password] You can now change your sign-in password yourself from **Account** > **Change password**, without contacting an administrator. *** #### Redesigned navigation [#redesigned-navigation] The controls for the interface language, notifications, and signing out have moved to the bottom of the sidebar for quicker access. **Personal API tokens** are now managed on the new **Account** > **Settings** page, replacing the former profile menu. *** ### Resolved issues [#resolved-issues] There have been no customer-facing issues reported in this release. ## June 29, 2026 [#june-29-2026] ### Improvements [#improvements-1] #### Modernized interface [#modernized-interface] The **B2TRANSLATE** interface has been rebuilt on a modern technology stack. Everything you use stays exactly where it was — the update refreshes the foundation of the interface and paves the way for faster delivery of new features. ## May 14, 2026 [#may-14-2026] ### Improvements [#improvements-2] #### Tenant language management for the Customer role [#tenant-language-management-for-the-customer-role] Users with the **Customer** role can now manage the list of languages on their tenant directly from the **Edit project** modal — add or remove languages without requesting help from an administrator. To prevent accidental changes, the tenant name field is now read-only for **Customer** users. ## April 29, 2026 [#april-29-2026] ### New features [#new-features-1] #### Translation version history [#translation-version-history] Every translation key now keeps an audit trail of the last 10 destination values per language. From the translation view, open the history dialog to see who changed a translation, when, and what the previous value was — and restore any earlier version with a single click. This protects translations from accidental edits and AI overrides. *** ### Improvements [#improvements-3] #### Personal API Tokens — custom expiration [#personal-api-tokens--custom-expiration] When you create or rotate a **Personal API Token**, you can now pick the exact expiration date through a calendar picker, up to one year ahead. This replaces the previous fixed presets and aligns with enterprise security policies that require periodic credential rotation. *** #### New languages: Hebrew and Mongolian [#new-languages-hebrew-and-mongolian] **Hebrew** is now available with full right-to-left (RTL) support, and **Mongolian** is added with the correct plural forms. Both languages are immediately available in every project and ready for AI translation. ## March 31, 2026 [#march-31-2026] ### New features [#new-features-2] #### Personal API Tokens [#personal-api-tokens] **B2TRANSLATE** now supports **Personal API Tokens** — a new authentication method for programmatic API access. Users can generate long-lived tokens to integrate **B2TRANSLATE** with external tools and automation workflows without sharing their login credentials. * Generate and manage personal tokens from the **Profile** page * Tokens support all V2 API endpoints * Configurable token expiration: 1, 6, 12, or 24 hours * Revoke tokens at any time for security ## March 17, 2026 [#march-17-2026] ### New features [#new-features-3] #### Custom language ordering [#custom-language-ordering] You can now customize the order in which languages appear across your project. Open the **Language order** modal from the **three-dot menu** on the **Projects** page or from within a project, and then drag and drop languages into your preferred sequence. The custom order is applied to language dropdowns and lists throughout the project. To revert to the default alphabetical order, click **Reset to default** in the modal. ## February 10, 2026 [#february-10-2026] ### New features [#new-features-4] #### Compact mode [#compact-mode] A new **Compact mode** toggle has been added to the **Profile menu**, giving you the ability to reduce spacing and density across all UI components. This option provides a more condensed interface for those who prefer to view more content on their screen at once. *** ### Improvements [#improvements-4] #### BCP 47 language support [#bcp-47-language-support] B2TRANSLATE now supports the **BCP 47 standard** for language codes, providing more precise language identification and regional variant handling. The system maintains backward compatibility with legacy format codes in the translations endpoint, ensuring existing integrations continue to work seamlessly. Each language in the languages table now includes a descriptive label for better clarity. #### Unified search and filters [#unified-search-and-filters] Search input fields and filter controls have been standardized across all system pages, providing a consistent user experience throughout the platform. This unified approach makes it easier to locate and filter content regardless of which page you're working on. *** ### Resolved issues [#resolved-issues-1] There have been no customer-facing issues reported in this release. ## January 13, 2026 [#january-13-2026] ### Improvements [#improvements-5] #### AI model upgrade [#ai-model-upgrade] B2TRANSLATE has upgraded its AI translation engine from Chat GPT 4.0 to **Chat GPT 5.2**, delivering improved translation quality and enhanced performance across all supported languages. #### Enhanced search with keyboard shortcuts [#enhanced-search-with-keyboard-shortcuts] Navigation has been streamlined with the addition of keyboard shortcuts for quick search access. Users can now press **⌘/** (**Ctrl+/**) and **⌘K** (**Ctrl+K**) to instantly open the search functionality, making it faster to locate keys and navigate through projects. *** ### Resolved issues [#resolved-issues-2] There have been no customer-facing issues reported in this release. ## December 12, 2025 [#december-12-2025] ### Improvements [#improvements-6] #### Redesigned Translations page [#redesigned-translations-page] The **Translations** page has been reorganized for a clearer view and smoother editing experience: * Key identifiers now occupy separate rows and include category badges and last‑updated timestamps. * Translation columns have clearer labels and each displays a language badge, so you always see which language you are editing. * Actions such as Translate with AI, Reset to source translation, and Save as empty are grouped under intuitive icons for easier discovery and use. * Global controls — language selector, search field, filter panel, key import, and CSV upload — are consistently placed and easier to find. *** ### Resolved issues [#resolved-issues-3] There have been no customer-facing issues reported in this release. ## September 30, 2025 [#september-30-2025] ### Improvements [#improvements-7] This release introduces comprehensive **default translations across various languages** and empowers administrators with **automated bulk translation capabilities via ChatGPT** integration, streamlining localization workflows and accelerating global deployment. ## September 10, 2025 [#september-10-2025] ### New features [#new-features-5] #### Pluralization support [#pluralization-support] B2TRANSLATE now includes comprehensive pluralization support, enabling accurate translation of **quantity-dependent strings** across all languages. This feature addresses the critical need for handling strings that change based on quantity, such as "1 file" versus "3 files", which is particularly important for languages with **complex plural rules**. The system intelligently detects when pluralization is required based on the combination of key format and target language. When pluralization is needed, B2TRANSLATE automatically generates multiple input fields for each key according to the Unicode rules for plural forms. Each form includes contextual labels that explain proper usage, such as "one," "few," or "many," helping translators understand when each form should be applied. This feature is fully compatible with AI translations. For more details, see [Handle plural forms](user-guide/manage-translations/handle-plural-forms). All existing non-pluralized strings remain fully functional, ensuring complete backward compatibility with current projects and workflows. *** ### Improvements [#improvements-8] #### Clearer hierarchy of translations [#clearer-hierarchy-of-translations] Managing default and custom translations has become more intuitive. The **padlock icon** has been removed, its functionality has been replaced by more declarative options: **Reset to default** and **Save as empty**. The tooltip in the **Translation** field indicates which default translation is currently used in the WebUI. #### Enhanced key display and project navigation [#enhanced-key-display-and-project-navigation] The project interface has been redesigned to provide better visibility and more flexible organization of translation keys. Previously, **Categories** were mandatory and could hide certain keys from view. Now, the system displays the complete list of all project keys by default, giving translators immediate access to their entire translation scope. **Categories** have been repositioned as optional **filtering** tools while maintaining their automatic assignment functionality. Translators can now work with any key regardless of its category assignment. This improvement is particularly beneficial for maintaining translation consistency, as similar keys are now visible together in the unified list rather than potentially hidden across different category sections. When needed, category filters can still be applied to narrow down the key list for focused work. Additionally, the **translation pages** have been reorganized for more clear structure and display: * Default translations have been grouped to a single column. * Language icons have been added. * Information on when a key was added or updated has been moved to key details. *** ### Resolved issues [#resolved-issues-4] There have been no customer-facing issues reported in this release. ## August 4, 2025 [#august-4-2025] ### Improvements [#improvements-9] This release is dedicated to behind-the-scenes improvements that benefit our platform administrators. While there aren't any new features for you this time, these updates help ensure everything runs smoothly. ## June 27, 2025 [#june-27-2025] ### New features [#new-features-6] #### Platforms [#platforms] This release introduces a new **platform** entity. Platforms are separate buckets inside products, such as Web, iOS, Android. Each platform has its own set of categories, while all platforms within a product share the same set of languages. Currently, this feature is enabled exclusively for the `b2core` product type. Platforms are added and configured by Admins. If a project has only one platform, the user experience remains unchanged. However, if multiple platforms are added, corresponding tabs appear on the **Categories** page and users must first select a platform before providing translations. *** ### Improvements [#improvements-10] * Internal improvement: A new endpoint has been added to update a list of languages in the language selection modal on the **Translations** page. *** ### Resolved issues [#resolved-issues-5] * Fixed an issue with key search in categories. ## May 20, 2025 [#may-20-2025] ### New features [#new-features-7] #### Translation Download/Upload functionality [#translation-downloadupload-functionality] With this release, we've implemented the Download/Upload functionality for translations. You can now export selected translations for a specific language in CSV format for external editing. Once edited, you can upload the CSV back to B2TRANSLATE, allowing for quicker and easier bulk updates and management of the translations. Additionally, the system will provide messages indicating the success or failure of an export/import attempt. For details, see [the article](user-guide/manage-translations/download-and-upload-translations). #### Copy buttons for keys [#copy-buttons-for-keys] To further improve user interaction, we have added a copy button next to each key name on the Translations page. This update provides you with the ability to effortlessly copy the full key name to the clipboard. The copy button is accompanied by a visual confirmation to indicate a successful copy action. This functionality is compatible across major web browsers including Chrome, Safari, and Firefox, ensuring a consistent user experience. #### RTL/LTR cursor for Arabic, Farsi, and Urdu languages [#rtlltr-cursor-for-arabic-farsi-and-urdu-languages] The translation handling has been enhanced by the support for both right-to-left (RTL) and left-to-right (LTR) languages in the editor. The text direction now automatically adjusts based on the selected language, optimizing text display without distortion. The movement of the cursor and text selection is smooth for all directions, and these improvements are seamlessly incorporated without affecting pre-existing editor capabilities. This update guarantees robust text management for all supported languages, providing you with an intuitive translation experience. *** ### Resolved issues [#resolved-issues-6] * Fixed an issue where icons weren’t displayed correctly in the Firefox browser. ## March 26, 2025 [#march-26-2025] ### New features [#new-features-8] #### AI translations with ChatGPT [#ai-translations-with-chatgpt] With this release, we've upgraded our integration with ChatGPT to enable AI translations for users. Note that this feature isn’t enabled by default and must be explicitly requested per project. Using AI for translations is limited: for each project utilizing ChatGPT integration, a monthly credit is provided, AI translation costs are automatically deducted from this allocated balance. AI translations are available for all project languages, excluding the default language (usually English). This feature translates the **Default translation (EN)** to your selected language and adds it to the **Translation** field. For more details, see [Translate with AI](user-guide/manage-translations/translate-with-ai). #### New Customer role [#new-customer-role] The new user role, **Customer**, has been added. It’s similar to the former **Editor** role, but expands functionality by providing access to AI-powered translations. All users currently assigned the **Editor** role will seamlessly transition to the **Customer** role, whether or not the AI translation feature is activated within their respective projects. *** ### Improvements [#improvements-11] * To enhance user experience and navigation efficiency, **search fields** have been added across all dropdowns. This allows users to swiftly locate specific items within extensive lists, streamlining overall interaction. * The **user avatar** icon has been added to the topbar. By hovering over it, you can access your email and role information alongside the **Log out** button. The language select has been removed from the topbar, but remains available within the main menu. *** ### Resolved issues [#resolved-issues-7] There have been no customer-facing issues reported in this release. ## February 11, 2025 [#february-11-2025] ### New features [#new-features-9] #### Enhanced security [#enhanced-security] With this release, two-factor authentication (2FA) has been updated to require authenticator apps, such as **Google Authenticator** as the primary option and **Twilio Authy** as an alternative for users in regions where Google Authenticator may be unavailable. When signing in to B2TRANSLATE, you’ll now be prompted to set up an authenticator app to generate 2FA codes by following the on-screen instructions. For security reasons, you’ll be requested to enter a code from the app each time you sign in after providing your credentials. *** ### Resolved issues [#resolved-issues-8] There have been no customer-facing issues reported in this release. *** ## Past releases [#past-releases] ### December, 2024 🎄 [#december-2024-] #### New features [#new-features-10] ##### UI enhancements [#ui-enhancements] The latest release brings several enhancements to the user interface for a more intuitive and streamlined experience. * On the **Projects** page, project types are now organized into tabs, providing a more compact and structured view. * The main menu has become collapsible for greater convenience. * The following updates have been made to the **Translations** page: * For translation editing, the input field now supports autocomplete and syntax highlighting for improved ease of use. * The **Send translations** menu has been repositioned above the table for quicker access. * The **Filters** button has been made more visible. * Pagination is consistently positioned at the bottom of the page. * On the **Login** page, the password is now hidden by default. Additionally, a support link has been added for users experiencing sign-in issues. #### Improvements [#improvements-12] * Backend enhancements have been made through the refactoring of certain endpoints, taking the first step towards improved performance and speed. * The design system components have been implemented, aiming to enhance code reusability, maintainability, and scalability. * New services for collecting metrics are introduced, supporting better monitoring and analysis. #### Resolved issues [#resolved-issues-9] There have been no customer-facing issues reported in this release. *** ### October, 2024 [#october-2024] #### New features [#new-features-11] ##### WebUI translated into 20 languages [#webui-translated-into-20-languages] We’re excited to announce that the B2TRANSLATE WebUI is now available in 20 languages. In addition to English, you can now use B2TRANSLATE in French, German, Italian, Polish, Portuguese, Russian, Spanish, Ukrainian, Turkish, Arabic, Indonesian, Hindi, Urdu, Farsi, Japanese, Korean, Vietnamese, and Chinese (both traditional and simplified). This update improves the user experience for our global community. We’ve added a language select option to the main menu, making it easy and intuitive to use. #### Improvements [#improvements-13] Yandex.Metrika along with Webvisor has been integrated to B2TRANSLATE so we can dive deeper into the analytics and better identify usability issues. ### September, 2024 (Part 2) [#september-2024-part-2] #### New features [#new-features-12] ##### AI integrated for enhanced translation [#ai-integrated-for-enhanced-translation] With this release, **DeepL** and **ChatGPT** have been integrated as a translation service. Key updates include: * **AI workflows**: Assign specific AI workflows to entire projects or individual languages. * **Translator permissions**: Configure AI users with translator permissions. * **Glossary functionality** (for DeepL only): Add terms to a glossary for consistent translation of defined terms. * And many more. These AI service integrations will boost translation efficiency, quality, and speed of delivery. *** ### September, 2024 [#september-2024] #### New features [#new-features-13] ##### Language selector for faster translation modifying [#language-selector-for-faster-translation-modifying] Following recent updates to simplify translation management, a language selector has been added to the **Translations** page. Previously, users had to constantly switch back to the language list when modifying translations for multiple languages. Now, selecting a category takes you directly to the key list. You can switch languages using the new selector on this page, significantly reducing the time needed for setting translations. #### Improvements [#improvements-14] * When adding a new project, it now loads faster and displays a dynamic preloader. * The **New keys** column has been removed from the project list. This change enhances user experience by decluttering the **Projects** page and improving performance through key data caching. * The search engine now retains search results across page reloads, providing a consistent user experience. * When switching to the next page of search results, the page scrolls to the top automatically, providing a more intuitive experience. *** ### June, 2024 [#june-2024] #### Improvements [#improvements-15] ##### Simplified Default translations management [#simplified-default-translations-management] A new column displaying default translations in the selected language, distinct from English, has been added to the **Translations** page. Previously, only English translations were provided, but now users can easily edit translations for all 22 supported languages. ##### New project types [#new-project-types] Two new project types have been added: `pbsr-v2` and `pbsr-admin`. *** ### April, 2024 [#april-2024] We're thrilled to announce the release of **B2TRANSLATE version 2**, packed with new features and enhancements to improve your translation workflow. Here's what's new in this release: #### New features [#new-features-14] ##### Pre-translated keys from the Template project [#pre-translated-keys-from-the-template-project] Pre-loaded translations for the keys from the Template project are now available for all supported languages in the existing projects. For new projects, users now have the flexibility to choose between pre-loading all languages or selecting specific languages that they require. ##### User-editable translations [#user-editable-translations] We have introduced the ability for users to modify the pre-translated keys in their respective languages. This flexibility empowers users to fine-tune translations according to their specific project requirements or preferences. ##### Feedback form [#feedback-form] A brand-new feedback form is now available in the main menu. This allows users to provide feedback directly from the B2TRANSLATE platform, enabling the B2TRANSLATE team to gather insights, address issues, and continuously improve the user experience. :tada: **Happy translating!** To properly connect Binance to B2CONNECT Hub using an Ed25519 key, you need to: ### Get a list of trusted IP addresses from B2CONNECT [#get-a-list-of-trusted-ip-addresses-from-b2connect] Contact your Account Manager to obtain a list of B2CONNECT IP addresses. You'll need them later, to properly configure a list of trusted IPs. ### Create Ed25519 keys [#create-ed25519-keys] 1. Download and install the Asymmetric Keys Generator. 2. Generate private and public Ed25519 keys. Follow the **How to create an Ed25519 key pair?** section of the [Binance instruction](https://www.binance.com/en/support/faq/detail/6b9a63f1e3384cf48a2eedb82767a69a) for step-by-step guidance. ### Register your Ed25519 keys on Binance [#register-your-ed25519-keys-on-binance] Follow the **How to register my Ed25519 key on Binance?** section of the [Binance instruction](https://www.binance.com/en/support/faq/detail/6b9a63f1e3384cf48a2eedb82767a69a) for step-by-step guidance. ### Edit restrictions [#edit-restrictions] Add previously acquired B2CONNECT IP addresses as trusted IPs to the allowlist of newly registered API keys. ### Configure the connection on the B2CONNECT side [#configure-the-connection-on-the-b2connect-side] Contact your Account Manager for guidance on integrating the keys into the B2CONNECT settings. When creating API keys on the Kraken platform, on the **Add API key** page, set the **Nonce window** field to `10000000000` (one followed by ten zeros). To avoid typos when entering this value, you can copy it above and paste it into the form as follows: Generate Kraken API keys This is required for proper handling of time variables (nanoseconds in this case). The following table provides an overview of liquidity provider platforms that are supported by B2CONNECT and outlines the B2CONNECT adaptor connectivity capabilities when connecting to a corresponding platform. [^1]: 20 for WSS B2CONNECT supports connectivity to multiple FIX-enabled trading platforms across various asset classes. Access or distribute liquidity with the [B2CONNECT FIX API](../fix-api). The table below outlines the supported platforms and their integration capabilities. Orders with the `GTC` Time in force are currently supported as `IOC`. 1, 2 Supported under the External Maker Specification. This guide outlines the steps you need to follow to properly prepare your Android app for Google review, approval, and successful publication on Google Play. These instructions provide general guidance as of the date of publication. You are responsible for completing all required fields in your Google Play Console. Providing incorrect or incomplete information may result in warnings, restrictions, or suspension of your developer account by Google. ## Step 1. Compliance checkpoint [#step-1-compliance-checkpoint] Before creating and submitting your Android app for Google review, determine the countries where you want your app to be available and ensure you hold all required licenses and legal permissions for each country. This process may take time, so obtain the necessary licenses in advance to confirm that you are authorized to offer all configured trading instruments in your B2CORE instance and provide this information during the Google Play review. To learn more about Google Play policies for financial services and cryptocurrency, refer to their **Policy center** and specifically to the following: * [Blockchain-based content](https://support.google.com/googleplay/android-developer/answer/6112435?hl=en\&ref_topic=3450769\&sjid=9872213577143447449-NA) * [Understanding Google Play’s cryptocurrency exchanges and software wallets policy](https://support.google.com/googleplay/android-developer/answer/6112435?hl=en\&ref_topic=3450769\&sjid=9872213577143447449-NA) ## Step 2. Prepare required app information [#step-2-prepare-required-app-information] Prepare the following information that will be required when creating your app in the Google Play Console and submitting it for Google review. ### Support and legal information [#support-and-legal-information] Provide the following details: * **Privacy policy URL** — a link to a publicly accessible web page that explains how your app collects, uses, stores, and protects user data. For Android apps published on Google Play, the privacy policy is mandatory, even if your app collects minimal data. The page must: * Be publicly available. * Be hosted on your website or another reliable public domain. * Clearly describe what data is collected, how it is used, and how users can request account deletion or data removal. * **Demo account** — a demo account that Google can use during the review process (for details, refer to [Step 3. Create and configure a demo account in the B2CORE UI](#step-3-create-and-configure-a-demo-account-in-the-b2core-ui)). * **Contact email for Google** — an email address used for official communication from Google. This email will be linked to your developer account in Google Play Console. * **Public developer contact details** — contact information visible to users on Google Play, which must include: * Support email * Contact phone number * Website URL ### Store Listing information [#store-listing-information] Prepare the following store listing details for your app: * App name * Short description (up to 80 characters) * Full description (up to 4,000 characters) * Graphical assets (can be provided by the B2CORE team). To request them, contact [android-support@b2broker.com](mailto:android-support@b2broker.com) or your account manager. ## Step 3. Create and configure a demo account in the B2CORE UI [#step-3-create-and-configure-a-demo-account-in-the-b2core-ui] To be able to review all of your app functionality, the Google reviewers need access to a demo account. For this reason, you need to configure a demo account as follows: * Verify your demo account by going through all the steps of your configured KYC procedure. * In the Back Office, examine and enable all the B2CORE UI modules that will be featured in your mobile app. Each module must be properly configured to ensure that your mobile app will not be rejected by Google during review. * If your app enables its users to transfer or exchange assets, you also need to make sure that there are enough funds on your demo account, so that the Google reviewers are able to check the transfer and exchange functionality as well. ## Step 4. Register in the Google Play Console as an Organization [#step-4-register-in-the-google-play-console-as-an-organization] To publish your Android app, you need to register in the [Play Console](https://play.google.com/console/signup) as an organization and create a developer account. Further on, with each Android release, the B2CORE team will provide new app bundles (`.abb` files) for you and you will be responsible for managing the regular maintenance of the app. For more information, refer to [Get started with Play Console](https://support.google.com/googleplay/android-developer/answer/6112435?hl=en\&ref_topic=3450769\&sjid=9872213577143447449-NA). ## Step 5. Create a new app in the Play Console [#step-5-create-a-new-app-in-the-play-console] To create an app: Sign in to the [Google Play Console](https://play.google.com/console/). Select your developer account. To start a new app, click **Create app**. Fill in the app details: * In the **App name** field, enter the name for your app. This is how your app will appear on Google Play. * In the **Default language** dropdown, select **English**. * In the **App or game** section, select **App**. * In the **Free or paid** section, select **Free**. App details Add an email address that Google Play users can use to contact you about your app. In the **Declarations** section, accept app developer declarations and confirm policy compliance. Declarations Click **Create app**. After creating the app, you'll be redirected to the Dashboard to continue the app setup. If you’re not automatically redirected, you can access it anytime from the **Home** menu in the Play Console by clicking your app. ## Step 6. Set up your app on the Play Console Dashboard [#step-6-set-up-your-app-on-the-play-console-dashboard] At this step, provide all the information requested by Google Play about your app. To provide information about the app: In the Play Console, select your app. Click each link in the **Set up your app** section of the Dashboard and fill in the required details. Play Console Dashboard ### Set privacy policy [#set-privacy-policy] * In this section, enter a link to your privacy policy that explains how you handle sensitive user and device data. * Click **Save** to return to the Dashboard. ### App access [#app-access] * In this section, select the option **All or some functionality in my app is restricted**. App access ### Ads [#ads] * In this section, select the option **No, my app does not contain ads**. * Click **Save** to return to the Dashboard. ### Content ratings [#content-ratings] * In the **Category** section, fill in the following: * **Email address** — specify your contact email. * Select the option **All other app types**. * Enable the checkbox to **Agree with the Terms of Use**. Content ratings — Category * In the **Questionnaire** section, select **No** for all the following: * Downloaded app * User content sharing * Online content * Promotion or sale of age-restricted products or activities * Miscellaneous Content ratings — Questionnaire * In the **Summary** section, verify the displayed summary and click **Save**. ### Target audience and content [#target-audience-and-content] * In the **Target audience**, select the checkbox **18 and over**. Selecting this checkbox will redirect you to the **Summary** section. * You can fill in the previous sections, such as **App details**, **Ads**, and **Store presence** if necessary. Target audience and content * In the **Summary** section, verify the displayed summary and click **Save**. ### Data safety [#data-safety] * Read the **Overview** section. * In the **Data collection and security** section, select the options as shown below and provide a URL to the section in your B2CORE UI where an account can be deleted. The URL must follow this format: `https://{your-Front-Office-URL}/profile-info` Make sure to replace `{your-Front-Office-URL}` with the domain of your B2CORE UI. Ensure that your B2CORE instance supports account deletion. This is a Google Play requirement and may be checked at any time by Google Play or by users. Failure to comply may result in suspension of your developer account in Google Play Console or a permanent ban. Data collection and security * In the **Data types** section, fill in the following: * **Location**: B2CORE does not collect this type of data. * **Personal info**: Specify the data that clients are required to provide during registration in your B2CORE instance. This usually includes (but isn't limited to) "Name", "Email address", "Phone number", or other. * **Financial info**: B2CORE does not collect this type of data. * **Health and fitness**: B2CORE does not collect this type of data. * **Messages**: B2CORE does not collect this type of data. * **Photos and videos**: B2CORE does not collect this type of data. * **Audio files**: B2CORE does not collect this type of data. * **Files and docs**: B2CORE does not collect this type of data. * **Calendar**: B2CORE does not collect this type of data. * **Contacts**: B2CORE does not collect this type of data. * **App activity**: B2CORE collects "App interactions" data. * **Web browsing**: B2CORE does not collect this type of data. * **App info and performance**: B2CORE collects "Crash logs" and "Diagnostics" data. * **Device or other IDs**: B2CORE does not collect this type of data. * In the **Data usage and handling** section, you will see a set of questionnaires related to the data collected by the app. * Complete the questionnaires in the **Personal info** section as shown in the example below: Personal info * Complete the questionnaires in the **App info and performance** and **App activity** sections as shown in the example below: Cash logs * In the **Preview** section, verify the displayed summary and click **Save**. ### Government apps [#government-apps] * Select **No** for the displayed option. Government apps * Click **Save** to return to the Dashboard. ### Financial features [#financial-features] * Select the checkboxes for the features that your app provides. Make sure to select only the features that your app actually provides. These may differ from the example shown below. Financial features * Click **Save** to return to the Dashboard. ### Health apps [#health-apps] * Select the option **My app does not have any health features** and click **Next**. * The **Documentation** section doesn't require any additional actions. * Click **Save** to return to the Dashboard. ### Store settings [#store-settings] * In the **App category** section, fill in the following: * In the **App or Game** option, select **App**. * In the **Category**, select **Finance**. * In the **Store Listing contact details** section, enter the email address, phone number, and website that will be visible to users on Google Play. * (Optional) In the **External marketing** section, you can select the checkbox for **Advertise my app outside Google Play**. Store settings ### Set up your store listing [#set-up-your-store-listing] * In the **Listing assets** section, fill in the following: * **App name** * **Short description** * **Full description** Listing assets * In the **Graphics** section, attach graphic assets provided by the B2CORE team. Click **Add assets** and upload each graphic asset one by one, and select the appropriate category for each asset. * After you’ve added all provided assets, click **Save**. ### Send app information for review [#send-app-information-for-review] All the information that you've provided about your app must be sent for Google review. Click **Publishing overview** in the main menu and then click **Send X changes for review**. ## Step 7. Upload the app bundle (.aab) for a production release [#step-7-upload-the-app-bundle-aab-for-a-production-release] To upload your app bundle and configure a production release in the Google Play Console: In the Play Console, select your app. Navigate to **Test and release** > **Production**. Open to the **Countries/regions** tab and select the countries where you want your app to be available, according to the licenses that allow you to distribute the app and provide services. Click **Create new release** in the upper-right corner. Create new release Click **Change signing key**. Google Play uses app signing based on cryptographic keys to verify the authenticity and security of your app. Proper configuration of **Google Play App Signing** is critical to ensure a secure deployment and, where applicable, a smooth transition for existing `.apk` users to the Google Play version. Change signing key Download the encryption public key. * Select the option **Upload a new app signing key from Java keystore**. * Click **Download encryption public key** (Option 1). Download encryption public key Send the downloaded key in the `.pem` file format to the B2CORE team either by emailing [android-support@b2broker.com](mailto:android-support@b2broker.com) or through your account manager. The B2CORE team will generate an app signing key, encrypt it using the provided public encryption key, and return it to you together with your application in `.aab` format, signed with the same key. This process may take some time. After receiving the **signed app bundle** (`.aab`) and the **app signing key archive** (`.zip`), return to **Test and release** > **Production** > **Releases** > **Untitled release**. On the **Releases** page, click **Edit release**. Upload the received **app signing key** (`.zip`). * Select the option **Upload the app signing key (.zip)**. * Click **Upload generated ZIP** (Option 4). Upload app signing key Upload the received **app bundle** (`.aab`). * Drag and drop the provided `.aab` file. Don't modify it. * After uploading, make sure no errors are shown. You may see the following warning message. This is expected and can be safely ignored. **Warning** `This App Bundle contains native code, and you've not uploaded debug symbols. We recommend that you upload a symbol file to make your crashes and ANRs easier to analyze and debug.` Fill in the **Release details**. * The **Release name** field is filled in automatically after uploading the `.aab` file. * In the **Release notes** field, paste the release notes provided by the B2CORE team or leave the field empty. Release details Click **Next**. Review the release information and make sure there are no errors highlighted in red. You may see the following warning message. This is expected and can be safely ignored. **Warning** `This App Bundle contains native code, and you've not uploaded debug symbols. We recommend that you upload a symbol file to make your crashes and ANRs easier to analyze and debug.` Start the rollout. * Click **Save** to submit the app for Google review. * You will be redirected to **Publishing overview**, where you must click **Send X changes for review**. App review and rollout may take several days. The review will result either in successful publication on Google Play or in a rejection with the reason provided. If you experience issues resolving a rejection, contact the B2CORE team at [android-support@b2broker.com](mailto:android-support@b2broker.com). ## Step 8. After approval: app monitoring [#step-8-after-approval-app-monitoring] After your app is approved, regularly check its availability and policy compliance to avoid enforcement actions. Failure to perform these checks may result in policy violations, app removal, suspension, or permanent termination of your developer account in the Play Console, often without prior notice. ### Check app availability [#check-app-availability] Confirm that the app is visible on Google Play in all allowed countries and that installation and basic functionality work as expected. ### Check compliance [#check-compliance] Keep your app listing, privacy policy, and country distribution aligned with your current licenses and legal permissions. ### Monitor policy status [#monitor-policy-status] Periodically check if any actions required in **Monitor and improve** > **Policy and programmes** > **Policy status**. ### Review app content [#review-app-content] Periodically check if any actions required in **Monitor and improve** > **Policy and programmes** > **App content**. Ensure that all app information is up to date. ### Monitor Google Play communications [#monitor-google-play-communications] Regularly check the contact email linked to your Google Play Console and respond promptly to any notifications. Google Play policies and deployment processes change regularly. If you notice any missing or outdated information in this instruction, contact us at [android-support@b2broker.com](mailto:android-support@b2broker.com) for assistance or clarification. In addition to creating standalone desktop solutions, B2CORE offers you assistance with publishing branded mobile applications for iOS and Android. To publish your app on the App Store, you need to consider a variety of policy issues to ensure strict compliance with all of the guidelines and regulations, which may be a non-trivial task. In this document, you can find detailed instructions on how to properly prepare your iOS app to speed up its approval and successful publication on the App Store. All trademarks, logos, and brand names referenced in this document are the property of their respective owners. All company, product, and service names used in this document are for identification purposes only. The use of these names, trademarks, and brands does not imply endorsement. ## Step 1. Prepare the licenses for trading crypto [#step-1-prepare-the-licenses-for-trading-crypto] First of all, before proceeding with building and submitting your iOS app for review, you need to determine in which countries this app will be available and take special care to obtain all the licenses required to provide your services in these countries. This procedure might be time-consuming, and you must obtain all the required licenses in advance to make sure that you are allowed to trade all the instruments that are configured in your B2CORE solution, and then hand over these licenses to the App Store review team. App Store Connect — Country and Region Availability The license requirements are mandatory, and the permissions to servicing trading operations must be granted by Apple. To learn more about the licensing requirements which apply specifically to cryptocurrencies, refer to [App Store Review Guidelines - 3.1.5 Cryptocurrencies](https://developer.apple.com/app-store/review/guidelines/#cryptocurrencies). ## Step 2. Create and configure a demo account in the B2CORE UI [#step-2-create-and-configure-a-demo-account-in-the-b2core-ui] To be able to review all of your app’s functionality, the App Store review team needs access to a demo account. For this reason, you need to configure a demo account as follows: * Verify your demo account by going through all the steps of your KYC procedure. * In the Back Office, examine and enable all the B2CORE UI modules that will be featured in your mobile app. Each module must be properly configured to ensure that your mobile app will not be rejected by the App Store during review. * If your app enables its users to transfer or exchange assets, you also need to make sure that there are enough funds on your demo account, so that the App Store review team is able to check the transfer and exchange functionality as well. ## Step 3. Enroll in the Apple Developer Program as an Organization [#step-3-enroll-in-the-apple-developer-program-as-an-organization] To be able to open an Apple Developer account, you must provide the following information: * your D-U-N-S number * your Legal Entity Status * your Legal Binding Authority * your website address To publish your iOS app, you need to enroll in the Apple Developer Program as an organization, and then share access to your developer account with the B2CORE team by sending your access credentials to our company email: [ios-admin@b2broker.com](mailto:ios-admin@b2broker.com). Further on, with each iOS release, the B2CORE team will upload a new app build for you, and you will be responsible for managing the regular maintenance of the app (for details, refer to [Step 8. Update your app with new releases](deploying-your-ios-app#step-8.-update-your-app-with-new-releases)). For general information, refer to [Before You Enroll — Apple Developer Program](https://developer.apple.com/programs/enroll/). For step-by-step instructions, refer to [Enrolling in the Apple Developer Program as an organization](https://developer.apple.com/support/app-account/). ## Step 4. Grant access and admin permissions to the B2CORE team [#step-4-grant-access-and-admin-permissions-to-the-b2core-team] For the B2CORE team to be able to configure your app at App Store Connect, you need to grant the following admin permissions to our team. To do this, proceed as follows: 1. At App Store Connect, switch to **Users and Access**. 2. On the **People** tab, add a new person with the B2BROKER company email: [ios-admin@b2broker.com](mailto:ios-admin@b2broker.com). 3. In the **Roles** section, enable the **Admin** role. 4. In the **Additional Resources** section, make sure that all the permissions are enabled as follows: * **Access to Reports** * **Access to Certificates, Identifiers & Profiles**, which includes: * **Access to Cloud Managed Distribution Certificate** * **Access to Cloud Managed Developer ID Certificate** * **Create Apps** App Store Connect — Users and Access ## Step 5. Provide all necessary information to your account manager [#step-5-provide-all-necessary-information-to-your-account-manager] Contact your account manager at B2BROKER to inform the development team that they must prepare your app for publishing. You need to provide the following information to your account manager, which will be passed over to the development team: * The information about licenses, along with the credentials to your B2CORE Demo Account. * The URL of your B2CORE UI instance. * The legal name of your company, as well as your Apple Developer account name (typically, it coincides with the company name specified when creating a Developer Account as an Organization). Your Apple Developer account must be registered under your organization as an LLC; personal accounts aren't permitted. * The email of the Developer Account’s owner. In addition, you need to provide the following information: * The name of your iOS app (it must not exceed 16 characters). * The primary language of the app (English is set by default) and a list of supported languages for localization purposes. * Your preferences regarding the app icon (such as the required color scheme). * Your preferences regarding the app screenshots displayed on the product page on the App Store. After your account manager contacts the B2CORE development team, they prepare your app and upload the build to the App Store. The app then appears at the App Store Connect, with its version indicated and its status set to **Prepare for Submission**. App Store Connect — Prepare for Submission ## Step 6. Specify the pricing, availability and privacy options [#step-6-specify-the-pricing-availability-and-privacy-options] At App Store Connect, configure the following app settings: * **Pricing and Availability** In this section, you need to specify the following options: * We recommend that you offer your mobile app for free and set the **Price Schedule** field to `US$0.00 (Free)`. * Set the **Tax Category** field to `App Store software`. * In the **Availability** section, select the countries in which your app will be available, according to the licenses obtained by you. * For the other options in this section, you can leave the default settings. App Store Connect — Pricing and Availability * **App Privacy** In this section, specify the **Privacy Policy URL**, which must be the same one that you specified for your B2CORE UI instance. App Store Connect — App Privacy Next, click **Get Started** and complete the quiz to specify your app’s data collection policy: * **Contact Info** Your app will collect the user’s email address by default. Depending on your app’s configuration, it may also collect other data, such as the username, phone number, user address and other contact information. Please make sure that you indicate the collected data according to the options that are specified in your B2CORE Back Office. * **Identifiers** The **User ID** data is collected by default. The **Device ID** data is not collected. * **User Content** The user photos and videos are collected. * **Other User Content** On this page, select `App Functionality` and `Other Purposes`. The following example illustrates the data collection settings that must be specified by a client publishing a standard iOS app: * **Data Linked to You**: * **Contact Info** * **User Content** * **Identifiers** * **Data Not Linked to You**: * **Diagnostics** * **Contact Info**: * **Name** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Email Address** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` For the question **Do you or your third-party partners use email addresses for tracking purposes?**, select the answer `No, we do not use email addresses for tracking purposes.` * **Phone Number** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Physical Address** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Other User Contact info** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **User Content**: * **Photos or Videos** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Other User Content** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Identifiers**: * **User ID** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Diagnostics**: * **Crash Data** * `App Functionality` To learn more, refer to [App privacy details on the App Store](https://developer.apple.com/app-store/app-privacy-details/). ## Step 7. Specify a demo account from which the Apple Review team will log in [#step-7-specify-a-demo-account-from-which-the-apple-review-team-will-log-in] Once your app is uploaded to App Store Connect, you need to specify a demo account that you have created at [Step 2](deploying-your-ios-app#step-2.-create-and-configure-a-demo-account-in-the-b2core-ui). The App Store review team will use this account to log in and review your app. To specify a demo account, proceed as follows: 1. At App Store Connect, switch to **App Review** > **Prepare for Submission**. In the **App Review Information** section, enable the **Sign-in Required** checkbox, and then specify the login and password for your demo account. 2. In the **Contact Information** section, specify the contact information of a person responsible for configuring App Store Connect. The App Store review team will contact this person to inform them whether the app is accepted or rejected, or whether any additional information is needed. 3. In the **Notes** field, add the links to your licenses and attach their scans (if available). The licenses must be provided for each country that you selected in the **Availability** section at [Step 6](deploying-your-ios-app#step-6.-specify-the-pricing-availability-and-privacy-options). The links must be added below the information on how to locate the delete account button. 4. In the **Notes** field, add the following text: > The app doesn't rely on any third-party API, including any API that might put our users' data at risk. The app uses only a custom REST API to communicate with the backend with the purpose of providing financial services. This API is developed and owned by our company. Therefore, we guarantee correct functioning of the API. App Store Connect — App Review Information 5. Specify the following fields: * **Promotional Text** * **Description** * **What’s New in This Version** * **Keywords** * **Support URL** * **Marketing URL** * **Version** * **Copyright** App Store Connect — Additional Information To learn more about these fields, refer to [Platform version information](https://developer.apple.com/help/app-store-connect/reference/platform-version-information). 6. Click **Add for Review** to submit your app for review to the App Store team. When your app is reviewed and approved, its status will be changed to `Ready for Distribution`. ## Step 8. Update your app with new releases [#step-8-update-your-app-with-new-releases] With each iOS release, the B2CORE team will upload a new app build for you in App Store Connect. You need to create a new app version, add the new build to the version, and submit it for review to the App Store team. ### Create a new app version [#create-a-new-app-version] When the B2CORE team notifies you of a new iOS release, create a new app version in Apple Store Connect, add a new build to it, and submit it for review to the App Store team. You can create a new version only if the current app version has the `Ready for Distribution` status. If for some reason, your current app version wasn’t submitted for review and has an editable status, [update the current version with a new build](deploying-your-ios-app#update-the-current-app-version-with-a-new-build) instead of creating a new version. For a full list of possible statuses, refer to [App and submission statuses](https://developer.apple.com/help/app-store-connect/reference/app-and-submission-statuses). 1. From Apps, select your app. 2. On the **Distribution** tab, click the **add** button (+) displayed in the **iOS App** section of the sidebar. 3. In the **New Version** popup, the new version number (for example, `1.24.0`) and click **Create**. You can view a complete list of app versions and builds uploaded for them on the **TestFlight** tab. 4. Review the new version metadata. When you create a new version, the metadata from the current version is transferred to the new version automatically. For a description of the version properties, refer to [Platform version information](https://developer.apple.com/help/app-store-connect/reference/platform-version-information). 5. Click **Save** in the upper-right page corner. 6. Add the latest app build to the newly created version: * Scroll down to the **Build** section, and then click the **add** button (+) displayed next to the section. * In the **Add Build** popup, select the build with the *highest* version number and click **Done**. App Store Connect — Add a build App Store Connect — Select the latest build 7. Add the release notes to the **What’s new in this version** field. The RNs for each iOS release can be found [here](../release-notes/release-notes-mobile). The RNs may not be fully applicable to your app, so you may need to edit them to include only the updates relevant to your app’s functionality. For example, if the RNs mention updates for a trading platform that your app doesn’t support, omit that item from the **What’s new in this version** field. 8. Click **Save** in the upper-right page corner. 9. Click **Add for Review** to submit the new app version for review to the App Store team. When your new app version is reviewed and approved, its status will be changed to `Ready for Distribution`. ### Update the current app version with a new build [#update-the-current-app-version-with-a-new-build] If your current app version doesn’t have the `Ready for Distribution` status in App Store Connect, you can’t create a new app version when a new iOS release is available. Instead, select a new build for the current version and submit it for review to the App Store team. 1. From Apps, select your app. 2. In the sidebar, select the app version for which you want to upload a new build. You can do it only for the version that has one of the editable statuses. For a full list of possible statuses, refer to [App and submission statuses](https://developer.apple.com/help/app-store-connect/reference/app-and-submission-statuses). 3. Scroll down to the **Build** section. 4. To remove the previous build, hover over the build and click the **delete** button (-) that appears on the right side of the build row. App Store Connect — Remove a build 5. Add the latest build: * Click the **add** button (+) displayed next to the **Build** section. * In the **Add Build** popup, select the build with the *highest* version number and click **Done**. App Store Connect — Add a build 6. In the **Version** field, update the version number to match the new iOS release. For example, change `1.23.0` to `1.24.0`. 7. Add the release notes to the **What’s new in this version** field. The RNs for each iOS release can be found [here](../release-notes/release-notes-mobile). The RNs may not be fully applicable to your app, so you may need to edit them to include only the updates relevant to your app’s functionality. For example, if the RNs mention updates for a trading platform that your app doesn’t support, omit that item from the **What’s new in this version** field. 8. Click **Save** in the upper-right page corner. 9. Click **Add for Review** to submit the new app version for review to the App Store team. When your new app version is reviewed and approved, its status will be changed to `Ready for Distribution`. The **Dashboard** page provides a quick overview of key financial metrics over the selected period, helping you analyze the overall performance and financial activity. ## Access to the Dashboard [#access-to-the-dashboard] The **Dashboard** is available to users who are assigned the permission `Access to Finance Dashboard` under the **Statistics** category and opens after signing in to the Back Office. For other Back Office users, the **Dashboard** is hidden, and they are redirected to the **Clients** > **General** page after signing in. For more details about user groups and permissions, refer to [How to add a user group and grant permissions](../how-to-articles/manage-system-settings/how-to-add-a-user-group-and-grant-permissions). By default, the financial metrics are displayed for the current day. You can select one of the following periods: * Today * Yesterday * Last 7 days * Last 30 days * Last 90 days * This month * Last month * Custom range You can also filter the displayed metrics by using the following filters located above the metric blocks: * **Client Type** * **Jurisdiction** * **Country** * **Manager** * **Client Tags** To reset the selected filters and period, click the **Reset** button. Dashboard The following information is displayed on the Dashboard: ## Deposits [#deposits] * **Total deposit** — the total amount of deposits, in USD, for the selected period. The metric is calculated against the **Final amount (USD)** column in [Finance > Deposits](finance/deposits). Only the completed deposits in the final status are included. * **Average deposit** — the average deposit amount for the selected period, which is calculated as: `Total deposit / Number of deposits` ## Withdrawals [#withdrawals] * **Total withdrawal** — the total amount of withdrawal, in USD, over the selected period. The metric is calculated against the **Final amount (USD)** column in [Finance > Payouts](finance/payouts). Only the completed withdrawals in the final status are included. * **Average withdrawal** — the average deposit amount for the selected period, which is calculated as: `Total withdrawal / Number of withdrawals` ## Summary [#summary] * **Net deposit** — the net amount of deposits, in USD, for the selected period, calculated as: `Total deposit − Total withdrawal` B2CORE is a fully-featured CRM providing a complete set of customization and access control options. ## Authorization and permissions [#authorization-and-permissions] B2CORE provides a full set of personalization and access control options. User access is controlled by applying different user group permissions. After your B2CORE profile is activated, you can sign in to the Back Office using the credentials provided by your administrator. Upon encountering an error when trying to sign in, check the login and password, along with the input language and Caps Lock state. If everything appears to be correct, contact your administrator to clarify the status of your profile. ## General interface options [#general-interface-options] The Back Office user interface is uniform across all pages, ensuring consistent look and feel and featuring a common set of basic options. This document describes how to shape the data displayed on a page, how to filter and sort this data, and then export it to a file. ### The top bar options [#the-top-bar-options] At the top of a typical Back Office page, you can find a top bar with the following elements: * the **☰ main menu** button Click it to expand or collapse the main menu. * **Backend version** The currently deployed version of your Back Office. * **Server time** The fixed system time in GMT+0. It can't be changed and ensures accuracy and consistency across all transactions, logs, and activities within B2CORE. * the **Open personal area** link Click the link to access the **Sign In** page of the B2CORE UI associated with your Back Office. * the **Bell** icon Click it to see pending client requests. The number of new requests is displayed on a counter badge. * the **Warning** icon Click it to view platform connectivity alerts, such as notifications about trading platforms that are currently unreachable. The number of active alerts is displayed on a counter badge. * the panel displaying the email address from your user profile In the upper-right page corner, click the profile button displaying your email address to access the **Log out** button and **Enable 2FA** option (or **Disable 2FA**, if two-factor authentication is already enabled). Two-factor authentication (2FA) is obligatory and must be enabled for all user profiles in the Back Office. To enable 2FA through time-based one-time passwords (TOTP) for your user profile, click **Enable 2FA**, and then click **OK** in the popup. Next, follow the displayed instructions to set up 2FA with Google Authenticator. After enabling 2FA, sign in to the Back Office by entering your login and password, followed by a code from the Google Authenticator app. ### Common options [#common-options] The following buttons can be found on most Back Office pages. * Above a table: * create button — the **Create** button used to add a new entry * export button — the **Export** button used to export table data to a CSV file * the **Select** and **Select All** buttons used to select multiple table entries and perform bulk actions on them (where available) * In a table header: * search button — the **Search** button used to apply custom filters * reset button — the **Reset** button used to reset custom filters * In a table row: * edit button — the **Edit** button used to drill down the data and access details * delete button — the **Delete** button used to delete an entry Page elements may serve as hyperlinks that can be clicked to drill down to details. Access to this data is maintained based on the permissions assigned to a particular user group. ### Filtering and sorting [#filtering-and-sorting] Throughout the Back Office, the data is typically organized in tables. Table data can be sorted and filtered. The columns by which you can sort data are marked with up and down arrows displayed in column headers (no arrows are displayed when sorting isn't available). You can click these arrows to sort data in ascending or descending order, by a single column at a time Along with a sorting order, you can specify multiple criteria for filtering column data. When filtering is available, the appropriate input fields are displayed in column headers. The inputs vary depending on a data format, such as text, number, date, time, or list. To facilitate filtering by date, two fields for the start and end dates may be displayed so that you can define a time period. To enable or disable filters, click the **Search** and **Reset** buttons. ### Pagination [#pagination] You can display table data across multiple pages and specify how many records to display on a page (the total number of records found is displayed next to the page size selector). To navigate between pages, click **Prev** or **Next**, or click a specific page number. ### Visibility [#visibility] To choose the data fields to include in a table, click **Column Visibility** and mark or unmark the columns you want to display or hide. Once applied, the new visibility settings become effective for all Back Office users (visibility of specific fields depends on the access permissions granted to particular users). ### Data export [#data-export] The data on most of the Back Office pages can be exported to a CSV or XLSX file. To do this, click the **Export** button, choose a file format, and then select whether to download the data to your computer or deliver it to an email address from your profile. The data in a resulting file matches both the current visibility settings and the applied sorting and filtering criteria. Use this menu to access to the functionalities of the **Introducing brokers (IB)** product, designed to support referral programs that help expand your client base. Through these programs, you can encourage your existing clients to become partners and attract new traders to your brokerage. In return, partners earn a percentage of the revenue generated from the trading activity of their referrals, fostering a mutually beneficial partnership. If you don't have this menu in your Back Office, contact your account manager to learn more about obtaining and implementing the IB program. For more information about IB, refer to the [product documentation](https://docs.ib.b2core.b2broker.com/). On this page, you can view feedback left by clients after tickets that they reported to HelpDesk in the B2CORE UI are marked as resolved. The following information is provided about each ticket for which feedback is submitted: **Id** The identifier of a ticket that was reported by a client to HelpDesk. Click a ticket identifier to view ticket details in SupportPal or Zendesk. *** **Email** The client email address. *** **Comment** The feedback text. *** **Date** The data and time when feedback was submitted. *** **Status** The client satisfaction rating. Possible values: * Extra Positive * Positive * Neutral * Negative * Extra Negative *** **Subject** The subject of a ticket. If a ticket is reopened and then resolved again, a client can submit updated feedback that is added as a new record to the **Ticket feedback** page. The following is a list of communication platforms supported in B2CORE: **See also** [How to manage communication platforms](../how-to-articles/manage-communication-platforms) The following is a list of KYC providers integrated with B2CORE. When configuring [verification levels](../back-office-guide/verification/levels), you can use the built-in KYC provider or rely on the supported third-party KYC providers to verify the identity of your clients. Listed below are the names of document groups that can be verified by each KYC provider, along with details explaining how the verification procedure is conducted with each provider in the B2CORE UI. **See also** [How to manage verification options](../how-to-articles/manage-verification-options) ## CRM & automation systems [#crm--automation-systems] The following CRM platforms can be connected to B2CORE to streamline sales processes and automate client management workflows: ## Customer support platforms [#customer-support-platforms] The following are platforms integrated with B2CORE, offering solutions for managing client tickets and enhancing support interactions: ## Data analytics tools [#data-analytics-tools] The following are platforms integrated with B2CORE for collecting and analyzing client action data in the B2CORE UI and mobile apps, providing insights into user behavior, engagement, and business results: The following is a list of payment systems integrated in B2CORE. These systems can be used to configure [deposit](../back-office-guide/system/deposit-system#deposit-methods) and [withdrawal methods](../back-office-guide/system/payout-system#payout-methods) that will be available to your clients in the B2CORE UI. For each payment system, it is indicated whether it supports deposits, withdrawals, or both. Additionally, you can find icons that can be displayed as icons of deposit and withdrawal methods in the B2CORE UI. The icons are used to easily identify a method that uses a specific payment system among the other methods. ## Payment System Service (PSS) [#payment-system-service-pss] For each payment system, it's also specified whether it supports connection to B2CORE through the new **Payment System Service (PSS)**. This service enhances integration by offering a single connection to support a range of deposit and withdrawal options offered by the system. This is especially effective when the system operates as a cashier system, consolidating and processing payments from multiple sources into one unified system (for details, refer to [How to add deposit and withdrawal methods through PSS](../how-to-articles/manage-payment-methods/how-to-add-deposit-and-withdrawal-methods-through-pss)). If you intend to connect payment systems through PSS, please contact your account manager first to confirm the availability of PSS-supported connections on your B2CORE instance. ## Support for PSS methods in mobile apps [#support-for-pss-methods-in-mobile-apps] PSS payment methods, including both deposits and withdrawals, are now supported in the iOS and Android mobile apps starting from version 1.30.0 (iOS) and 2.8.0 (Android). **See also** [How to manage payment methods](../how-to-articles/manage-payment-methods) The following are the trading platforms and hubs supported in B2CORE, with details on their specific features and functionalities. ## Trading platforms [#trading-platforms] ## Trading hubs [#trading-hubs] ### December, 2025 [#december-2025] **v1.31 (iOS)** This version includes: * **Savings now available in the app** Clients can now access **Savings** directly in the app. They can view and subscribe to savings programs, create wallets in the required currencies, monitor active programs, add funds, track interest payments, and, if needed, withdraw funds before the plan's end date.
Savings hub Subscribe to a savings program Installments
* **Streamlined Total balance calculation** The total balance shown on the app **Dashboard** now reflects the combined balances of all wallets and trading accounts and fully matches the total displayed in the B2CORE UI. * **New Activity section** A new **Activity** section has been added to the app, providing a complete history of all transactions in one place. Clients can now easily track their deposits, withdrawals, transfers, and exchanges, as well as search for transactions in specific currencies. The **Activity** section is accessible from the tab bar, as well as from the **Home** and **Wallets** screens. Use **pull to refresh** to quickly update the section and view the most up-to-date information.
Activity Currency search
* **Support for copy trading, PAMM, and MAM** Copy trading, PAMM, and MAM functionality from **B2COPY** is now supported in the app via a web view. This enables clients to access these services directly from the app, through the **Services** section. * **Blockchain explorer link for withdrawal tracking** Clients can now track withdrawal transactions on the blockchain directly from the app. For crypto wallets, a link to `https://www.blockchain.com/explorer` is available for withdrawals in Bitcoin, Ethereum, and Bitcoin Cash, making transaction monitoring easier and improving transparency. * **Static payment details for deposits via B2BINPAY V3 and Coinsbuy V3** The app now supports **static payment details** for deposits via **B2BINPAY** and **Coinsbuy** when connected through **API V3**. With static payment details, clients can generate one or more blockchain-specific deposit addresses directly in the app. These addresses are saved for future use and can be reused for subsequent deposits. In addition, the crypto deposit flow via **B2BINPAY V3** and **Coinsbuy V3** has been improved with clear **fee breakdowns** and **indicative amount** displays, providing better transparency and a smoother deposit experience. * **Full B2TRANSLATE integration for payment forms** Payment forms in the app are now fully integrated with [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly Weblate). Labels for all components of dynamic forms for PSS-connected deposit and withdrawal methods, as well as validation error messages, can now be customized and translated into multiple languages via B2TRANSLATE. * Bug fixes and improvements to ensure a smoother and more efficient user experience. *** ### November, 2025 [#november-2025] **v1.30.2 (iOS)** * This version is a bug-fixing release that improves the app experience. *** ### September, 2025 [#september-2025] **v1.30.0 (iOS)** This version includes: * **Extended multi-lingual support** With [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly WEBLATE) integration, the app now supports localization in up to **35 languages**. The key benefits include: * Offering the same language options on the app as in the B2CORE UI. * Customizing translations for each of the 35 supported languages via B2TRANSLATE. * Maintain translations for both the app and the B2CORE UI using a single tool: B2TRANSLATE. * Improving scalability and client satisfaction by removing language barriers. The integration is already in place, but translations for the supported languages need to be added to B2TRANSLATE. Full localization will become available once this process is completed.
Ar Ch
* **PSS deposit & withdrawal methods now in the app** Withdrawal methods configured via the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) in the Back Office are now available in the app. This completes support for both **deposit methods**, which were previously integrated, and **withdrawal methods** connected through PSS. * **Bonuses now available in the app** Clients can now access and manage bonuses directly in the app, including deposit bonuses. Bonuses are supported on **MT4/5** and **cTrader**. Bonuses are added as **credit funds** to clients’ trading accounts, increasing trading capital and margin. Once the bonus requirements are met, the bonus amount is converted into real funds and becomes withdrawable; otherwise, it expires.
Bonus programs Subscribe to a bonus program Active bonus programs
* **Refreshed UI for trading accounts** The **Trading** section has been updated for a more intuitive and seamless experience, enabling clients to: * Open trading accounts effortlessly. * Top up accounts in fewer steps. * Navigate to trading smoothly.
Trading accounts Trading account details
* **Feedback form** Clients can now quickly rate their experience as positive or negative within the app, with the option to provide a more detailed comment. The feedback form appears automatically after several app launches or financial operations and can also be accessed anytime from the **Profile** menu. The feedback data can be tracked via analytics tools.
Feedback form Share feedback from Profile
* Fixes and improvements to ensure stable performance and reliability. *** ### July, 2025 [#july-2025] **v1.29.1 (iOS)** This version includes bug fixes and performance improvements for a better app experience. *** ### June, 2025 [#june-2025] **v1.29 (iOS)** This version includes: * **Deposits methods configured via PSS now supported in the app** Deposit methods configured in the Back Office through the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) are now accessible to users directly within the app. Please note, withdrawal methods via PSS aren’t yet supported in the app. * **Multi-language support** (Beta) The app now supports 16 new interface languages, including **Arabic**, **Polish**, **German**, **Russian**, **Persian**, **Chinese**, **French**, **Thai**, **Italian**, **Indonesian**, **Hindi**, **Vietnamese**, **Portuguese**, **Czech**, **Japanese**, and **Korean**. Languages can be switched directly in the app in **Profile** > **Languages**. All languages are currently in Beta, and translation improvements will continue in future updates.
Profile > Languages Language list
* **Redesigned Wallets** The **Wallets** interface has been updated with a cleaner, more modern design, featuring: * Refreshed wallet card design * Display of the portfolio’s **Estimated Total** * Quick access to depositing funds and other financial operations * Enhanced wallet details, including total and available balances, recent transactions, and clearly highlighted action buttons.
Wallet list Hide balances Wallet details
* **Enhanced deposit experience** A redesigned flow makes it easier and faster for users to complete deposits.
Enhanced deposits Deposit form
* **Support for favorite cTrader accounts** Users can now mark cTrader accounts as favorites. Once marked, these accounts appear in the **Favorite Trading Accounts** widget, providing quick and easy access to trading directly from the **Home** screen. Favorite cTrader accounts * **Support for custom tiles in Services** Custom tiles can now be added to the **Services** section to link users to third-party services or external resources that support your brokerage business. Configuration must be set in the **Back Office**, where the tile name and redirect URL must be specified. Once configured, custom tiles will appear in the app under **Services**. In the Back Office, the option to configure custom menu links will become available with the [June 2025 release](release-notes#june-2025). * **Streamlined account creation with the Go to Deposit option** The account creation process has been streamlined to clearly indicate when a minimum deposit is required. If funds are insufficient for opening a new trading account, users will see the required amount along with the **Go to Deposit** button, encouraging quick funding and faster trading. Go to Deposit * Optimized overall app performance to provide a faster, more stable, and responsive user experience. *** ### March, 2025 [#march-2025] **v1.28 (iOS)** This version includes: **Improved sign-up and onboarding experience** The sign-up and onboarding processes in the app for new clients have been improved: * **Quick app overview**: before accessing the **Sign Up** and **Sign In** forms, clients now see a brief app overview showcasing key features through several screens. This enhancement aims to increase registration conversion and attract more potential clients.
Make flexible deposits All wallets in one place All account operations Track every wallet easily
* **Revamped design**: the **Sign Up** and **Sign In** forms have been redesigned for a better user experience.
Sign In Sign Un
* **Enhanced security**: during sign-up, setting a passcode is now required. Once set, it can’t be disabled. Enabling Face ID remains optional. If a client hasn’t previously set up a passcode or enabled Face ID, these steps will now be included during sign-in.
Set a passcode Enable Face ID
* **Verification**: a prompt to complete verification has been added to the onboarding process, encouraging clients to verify their identity, make their first deposit, and start trading faster. Complete verification **One-click access to trading** Clients can now access the MT4, MT5, and cTrader trading terminals by tapping **Trade** from their accounts in the app, making trading more convenient. To enable this feature, specify the **Web Terminal URL** in the platform details upon navigating to **Products** > **Platforms** in the B2CORE Back Office (for details, refer to [How to enable one-click trading access from the B2CORE UI and mobile app](../how-to-articles/manage-platforms/how-to-enable-one-click-access-to-web-trading-terminals)). Trade button on account cards *** ### December, 2024 [#december-2024] **v1.27 (iOS)** This version includes: * **Enhanced security with passcodes** Setting a passcode is now available during sign-up or sign-in to ensure improved app security. * **Optional biometric authentication** Biometric options, such as Face ID or Touch ID, have been introduced as an additional layer of security for quick and secure access. * **Support for analytics in Amplitude** The Amplitude platform is now supported for the app, enabling you to get analytics about your clients’ actions within the app. Please contact your account manager for assistance in setting up and getting Amplitude analytics. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. *** ### v1.26 (iOS) [#v126-ios] * This version brings internal enhancements and behind-the-scenes fixes to boost app performance and improve the user experience. *** ### v1.25 (iOS) [#v125-ios] This version includes: * **Redesigned Deposit section** The **Deposit** section, accessible via **Services** > **Finance**, has been redesigned for a smoother deposit experience. You can now easily select a wallet and deposit currency, and then choose one of the supported payment methods. Once selected, you’ll receive the deposit address or have the option to enter bank details to finalize your transaction. Additionally, before making a deposit, you can check current rates and calculate estimated amounts based on those rates in the **Indicative amounts** section. * The app performance has been enhanced for a faster and more seamless experience. *** ### v1.24 (iOS) [#v124-ios] This version includes: * **App Services** We are pleased to introduce the new app services feature, making it easier for you to locate supported services, such as Trading, Finances, HelpDesk, IB, and others, and see what will be available soon. The feature enables you to: * access services directly from the Home screen * search for the service you need * tap a service tile to quickly navigate to the desired service. * **Integration with Zendesk** The Zendesk customer support platform has been integrated, offering ticketing, live chat, and AI tools. Tap the HelpDesk button to navigate to the Zendesk interface from the app, without any additional authorization. * **Enhanced IB Room** The enhancements to the IB Room include detailed information about clients and rewards, enabling you to: * view a list of Direct IB and Sub-IB clients registered using your referral links. For each client, you can view the details about their total traded volumes and reward amounts you received. * view a list of rewards paid to your wallet and navigate to reward details. * **Password validation** When setting new passwords, they are now validated to comply with security standards, ensuring they meet the required length and include the necessary character requirements. * Bug fixes and improvements for a more refined and user-friendly interaction. *** ### v1.23 (iOS) [#v123-ios] This version includes: * **Integration with B2TRADER Brokerage Platform** With this release, we are thrilled to announce integration with B2TRADER Brokerage Platform, offering you a comprehensive trading experience: * Single sign-on: sign in to the app and navigate to the BBP platform without additional authorization. * Account list with detailed balances: keep your funds under control with a comprehensive view of account balances. Create and rename accounts to keep your funds well organized. * Asset balances screen: view asset details, including the amounts of free and frozen funds, with the option to hide assets with zero balances. * Order book and Price chart: monitor trading data and make buy and sell decisions, with quick access to the order placing screen. * Candlestick and Line charts: switch between chart types and scroll through historical values. * Limit & Market orders: place Limit and Market orders using all the supported time in force settings (Market: IOC, FOK; Limit: IOC, FOK, GTC, GTD, Day). * Order lists: access open and historical order lists, providing easy navigation to order parameters and details, and options for quick canceling or repeating an order. * **Redesigned Dashboard** The redesigned Dashboard offers the following enhancements: * **New widgets**: use new widgets, such as Total Balance, Last Transactions, Favorite Trading Accounts (now displaying only MT4 and MT5 accounts added to favorites), and IB Program. * **Organize the Dashboard**: easily organize your Dashboard by dragging and dropping widgets according to your preferences. * **Support for banners**: banners can now be displayed on the Dashboard. * **Profile info**: you can now view your profile name and picture at the top of the Dashboard. * **Quick navigation to HelpDesk**: tap the button in the topbar for quick access to the HelpDesk, if supported. * **Apple store info**: you can now review what’s new in the latest app version before downloading it. * Bug fixes and improvements to offer a smoother and more streamlined user experience. *** ### v1.22 (iOS) [#v122-ios] This version includes: * **Integration with CentroID** Support for CentroID has been added, providing connectivity to various trading platforms and liquidity sources. Now you can add your CentroID margin accounts, and make transactions on the accounts. * **Introducing Brokers (IB)** The IB Room option has become available in the Profile menu. Use it to register as a partner in referral programs and create your unique referral links. Attract new traders, earn rewards based on the trading activities of your newly referred clients, and track program performance using the IB Room Dashboard. * Bug fixes and improvements to ensure a more seamless and efficient user experience.
### December, 2025 [#december-2025-1] **v2.9.0 (Android)** This version includes: * **Multi-lingual support for the app via B2TRANSLATE** The app now supports localization in **14 languages** via [B2TRANSLATE](https://docs.b2translate.b2broker.com/). The key benefits include: * Offering the same language options on the app as in the B2CORE UI. * Customizing translations for each of the supported languages via B2TRANSLATE. * Maintain translations for both the app and the B2CORE UI using a single tool: B2TRANSLATE. * Improving scalability and client satisfaction by removing language barriers. The integration is already in place, but translations for the supported languages need to be added to B2TRANSLATE. Full localization will become available once this process is completed. * **Streamlined Total balance calculation** The total balance shown on the app **Dashboard** now reflects the combined balances of all wallets and trading accounts and fully matches the total displayed in the B2CORE Web. * **Rejection reasons in transaction details** For transactions rejected by admins, the rejection reason is now clearly displayed in the transaction details. Rejection reason * **Support for copy trading, PAMM, and MAM** Copy trading, PAMM, and MAM functionality from **B2COPY** is now supported in the app via a web view. This enables clients to access these services directly from the app, through the **Services** section. * **Static payment details for deposits via B2BINPAY V3 and Coinsbuy V3** The app now supports **static payment details** for deposits via **B2BINPAY** and **Coinsbuy** when connected through **API V3**. With static payment details, clients can generate one or more blockchain-specific deposit addresses directly in the app. These addresses are saved for future use and can be reused for subsequent deposits. In addition, the crypto deposit flow via **B2BINPAY V3** and **Coinsbuy V3** has been improved with clear **fee breakdowns** and **indicative amount** displays, providing better transparency and a smoother deposit experience. * **Full B2TRANSLATE integration for payment forms** Payment forms in the app are now fully integrated with [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly Weblate). Labels for all components of dynamic forms for PSS-connected deposit and withdrawal methods, as well as validation error messages, can now be customized and translated into multiple languages via B2TRANSLATE. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ### September, 2025 [#september-2025-1] **v2.8.0 (Android)** This version includes: * **Google Play app deployment** It’s now possible to deploy and publish your app on **Google Play**, making it easy for clients to download, install, and receive future updates directly from the store. * **PSS deposit & withdrawal methods now in the app** Withdrawal methods configured via the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) in the Back Office are now available in the app. This completes support for both **deposit methods**, which were previously integrated, and **withdrawal methods** connected through PSS.
Ar Ch
* **Full Profile information** The **Profile** > **Profile** info section in the app now fully aligns with the B2CORE UI, with added fields for **Name**, **Email**, **Date of Birth**, **Country**, **Phone**, **Client ID**, and **Nickname**. Sensitive data is masked by default with reveal-on-click, while **Nickname** can be updated directly in the app. Profile Info * **Device management for enhanced security** In **Profile** > **Security**, a new **Device management** section has been added. It displays log data about devices, IP addresses, and locations used to sign in to their profiles, and allows clients to terminate their current active session directly from the app. This gives clients better control over sessions and helps protect against unauthorized access.
Device management Device details Terminate session
* **Streamlined 2FA setup with Google Authenticator** The process of enabling 2FA via the **Google Authenticator** app has been simplified, with fewer steps and a more intuitive flow. 2FA setup * Fixes and improvements to ensure stable performance and reliability. *** ### August, 2025 [#august-2025] **v2.7.0 (Android)** This version includes: * **Feedback form** Users can now share their experience directly in the app. The feedback form automatically appears after several app launches or whenever a financial operation is performed, allowing a quick positive or negative rating with an optional comment. Feedback can also be submitted anytime from the **Profile** menu.
Feedback form Feedback after a withdrawal
* **UI improvements** The app’s appearance has been enhanced for a visually cleaner and more polished experience, with refreshed sections and improved widget layouts: * More rounded design of UI elements * Refreshed **Total Balance** and **IB** sections * Improved layouts for **Last Transactions** and **Wallets** widgets. Dashboard * Improved performance and stability for a faster, more reliable experience. *** ### June, 2025 [#june-2025-1] **v2.6.0 (Android)** This version includes: * **Deposits methods configured via PSS now supported in the app** Deposit methods configured in the Back Office through the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) are now accessible to users directly within the app. Please note, withdrawal methods via PSS aren’t yet supported in the app. * **Bonuses now available in the app** Users can now view and subscribe to bonus programs on **MT4/5** and **cTrader** directly in the app. If a user doesn’t have a suitable trading account, the required account can be created during the subscription process. Once the program requirements are met, the bonus amount is credited to the user’s balance and becomes available for withdrawal.
Bonus programs Active bonus programs Subscribe to a bonus program
* **Services: All key features in one place** A new **Services** section has been added to the app, providing users with centralized access to all available services and features. Each service is represented as a tile that redirects to its respective menu. Tiles can be easily rearranged using drag and drop. Services * **Support for custom tiles in Services** Custom tiles can be added to the **Services** section to link users to third-party services or external resources that support your business. Configuration must be done in the **Back Office**, where the tile name and redirect URL must be specified. Once configured, custom tiles will appear in the app under **Services**. In the Back Office, the option to configure custom menu links will become available with the [June 2025 release](release-notes#june-2025). * **In-app verification via SumSub** The full verification process via **SumSub** is now supported directly within the app, no external redirections are required. This streamlined experience makes the KYC journey faster, and more intuitive during onboarding. * **Blockchain explorer link for withdrawal tracking** Users can now easily track **withdrawal transactions** on the blockchain directly from the app. Crypto wallets include a link to `https://www.blockchain.com/explorer`, available only for withdrawals in Bitcoin, Ethereum, and Bitcoin Cash. This simplifies transaction monitoring and enhances transparency. Blockchain explorer link * Optimized overall app performance to provide a faster, more stable, and responsive user experience. *** ### May, 2025 [#may-2025] **v2.5.0 (Android)** This version includes: Performance improvements and bug fixes to enhance the overall user experience. *** ### April, 2025 [#april-2025] **v2.4.0 (Android)** This version includes: **Revamped sign-up and onboarding process** * **App preview**: before going to the **Sign Up** or **Sign In** forms, clients are now presented with a brief walkthrough highlighting the app’s main features across several screens. It enhances the user journey from the start, encouraging quicker sign-ups.
Make flexible deposits All wallets in one place All account operations Track every wallet easily
* **Improved design**: the **Sign Up** and **Sign In** forms have been redesigned to offer a smoother and more intuitive user experience.
Sign In Sign Up
* **Enhanced security**: for quicker and more secure access to the app, clients are now prompted to enable biometric authentication using their fingerprint during onboarding. If a client hasn’t previously set up fingerprint authentication, this step will be included during sign-in. Once enabled, fingerprints can also be used to confirm payments within the app. Clients can manage this feature anytime in **Profile** > **Settings**.
Enable fingerprint authentication Use fingerprint to confirm payments
* **Verification**: an additional **verification step** is now included in the onboarding process, encouraging clients to complete KYC immediately after sign-up. This enhancement streamlines the process, enabling clients to access full functionality, make their first deposit, and start trading faster. Complete verification * The app has been optimized to deliver a faster, more stable, and responsive experience. *** ### March, 2025 [#march-2025-1] **v2.3.0 (Android)** This version includes: * **Internal transfers** The app now supports internal transfers, enabling clients to transfer funds to other clients within the same brokerage by specifying the **Client ID** and **Account ID** of the recipient. The funds are transferred instantly and without commission. Internal transfers in the app * **Enhanced security with withdrawal address whitelisting** Secure your withdrawals by enabling the **Withdraw Whitelist** option in the **Security** section and adding trusted withdrawal addresses. Once enabled, funds can only be withdrawn to the specified addresses, preventing unauthorized transactions. Withdrawal whitelists in the app * **One-click access to trading** Clients can now access the MT4, MT5, and cTrader trading terminals by tapping **Trade** from their accounts in the app, making trading more convenient. To enable this feature, specify the **Web Terminal URL** in the platform details upon navigating to **Products** > **Platforms** in the B2CORE Back Office (for details, refer to [How to enable one-click trading access from the B2CORE UI and mobile app](../how-to-articles/manage-platforms/how-to-enable-one-click-access-to-web-trading-terminals)). Trade button on account cards *** ### December, 2024 [#december-2024-1] **v2.2.0 (Android)** This version includes: * **Introducing Brokers (IB)** The IB functionality is now supported in the app, making it easier to manage your referral activities. With this update, you can: * **Explore and join IB programs**: view all available IB programs and join new ones using the **IB Program** widget on the **Home** screen. * **IB clients**: view a list of your referred clients, organized across different levels. * **Track IB rewards**: monitor your earned rewards and view payment details. Additionally, you can track your IB wallet balance and make withdrawals directly from the app. * **Customize IB referral links**: configure referral link parameters for each program in the **Advanced Link** section to optimize your referral strategy. * **Enhancements to trading accounts** More options for MT4/5 and cTrader accounts are now available in the app, including: * **Essential account parameters**: view such parameters as Balance, Equity, Free Funds, Credit, and Leverage directly in the account details. * **Equity chart**: analyze account performance with the Equity chart, now available for daily, weekly, and monthly periods. * **Expanded trading data**: access more detailed trading data with the **Pending orders**, **Open positions**, and **Trading history** tabs. * The ability to archive trading accounts. * The ability to rename accounts for better organization. * Bug fixes and interface improvements to deliver a more seamless and user-friendly experience. *** ### November, 2024 [#november-2024] **v2.1.0 (Android)** This version includes: * **Support for exchanges** Exchanges are now accessible in the **Finance** section, enabling you to convert between different currencies, including fiat to crypto, and vice versa. When making exchanges, you can view real-time rates and refresh them as needed to stay up-to-date with the latest rates for your transactions. * **Integration with Zendesk** With the integration of Zendesk customer support, you can now easily create, submit, and track your support tickets directly from the **Profile menu** in the app. To use Zendesk in the app, the Zendesk configuration must be set up in the Back Office. This includes establishing an external connection to Zendesk and following the steps to [switch from SupportPal](../how-to-articles/manage-system-settings/how-to-switch-from-supportpal-to-zendesk) if it was previously used. * **Favourite wallets** You can now add wallets to your favorites in the app, making it easier to organize and access them quickly. * **More options for trading accounts** The options to rename your trading accounts and archive them are now available in the account details, giving you more flexibility in managing your accounts. * Bug fixes and performance enhancements have been implemented to deliver a smoother and more responsive user experience. *** ### October, 2024 [#october-2024] **v2.0.0 (Android)** This version includes: * **Support for MT4/5 and cTrader accounts** You can now open demo and live MT4/5 and cTrader accounts in the app, deposit and withdraw funds to/from your accounts, and monitor account trading parameters, such as balance, equity, credit, and free margin in real time. * **Transaction History section added** View your full deposit, withdrawal, and transfer history, along with detailed information for each transaction, in the new Transaction History section. * **Password change for profile security** Providing a convenient way to keep your profile secure, the Security section now includes an option to change your profile password. * **Sign in to the B2CORE UI with QR codes** You can now use the app where you’re already signed in to scan QR codes on the B2CORE UI **Sign In** page, allowing access without the need to enter your credentials. *** ### September, 2024 [#september-2024] **v1.0.0 (Android)** We're excited to announce the release of the B2CORE app for Android, which you can launch as your own branded app. This allows you to offer your clients an additional platform to access the B2CORE functionality. **App download** Currently, Android apps are available for download and installation via APK files. To make the APK available for download from your B2CORE UI, refer to [How to configure settings for mobile app downloads](../how-to-articles/manage-system-settings/how-to-configure-settings-for-mobile-app-downloads). This version includes: * **Registration** Registration through the app is available by clicking the Sign Up option on the Start screen. * **Dashboard** The Dashboard appears after signing in to the app, displaying the Total Balance, Last Transactions, and Wallets widgets, with banners at the top. * **Profile menu** Accessible by tapping the top left corner of the screen, the Profile menu enables you to: * upload profile photos * view your current verification levels and complete KYC verification to reach higher levels * access security settings, such as 2FA via Google Authenticator or SMS, anti-phishing codes, and more * displays the app version and a list of custom links to additional resources. * **Wallets** Displays a list of your wallets, grouped into crypto and fiat categories. At the top, the estimated total across all wallets, converted to USD, is shown. From this section, you can deposit, withdraw, and transfer funds. By tapping a wallet, you can view detailed information, including the available balance, amount on hold, and transaction history. * **Finance** This section is intended for deposits, withdrawals, and transfers. Recent transactions are displayed under each transaction type, allowing you to quickly initiate new ones with pre-filled fields based on previous transactions. * **Trading** This section supports the B2TRADER Spot Brokerage Platform, providing access to its extensive trading features and functionalities.
## June 30, 2026 [#june-30-2026] ### New features [#new-features] #### Per-blockchain crypto deposit and withdrawal commissions [#per-blockchain-crypto-deposit-and-withdrawal-commissions] For **B2BINPAY** and **Coinsbuy**, brokers can now configure limits and commissions separately for each blockchain network (for example, ERC-20 vs. TRC-20 for USDT) instead of one flat rate per currency. Clients choose their network and see the exact fee and the expected credited or payout amount before confirming, giving brokers accurate pricing of network costs and clients full fee transparency up front. #### CPA programs for Introducing Brokers [#cpa-programs-for-introducing-brokers] B2CORE now supports **CPA (Cost-Per-Acquisition)** programs and payment plans for Introducing Brokers, letting brokers set up flexible, rules-based partner compensation instead of a one-size-fits-all model. A CPA program is now bound directly to a partner program, so partners are rewarded automatically the moment they join a program with CPA attached – removing manual per-referral-link setup and reducing configuration errors. New API endpoints power the CPA widget and reports for partners. #### B2TRADER web terminal access [#b2trader-web-terminal-access] Brokers can now configure a **web terminal URL** for the B2TRADER platform, just as they already can for other platforms, giving clients one-click access to the trading terminal directly from the client portal. #### IB Trades reconcile process [#ib-trades-reconcile-process] A lighter-weight **reconcile** option has been added to the trade-sync process. It re-sends only the trades that failed to deliver instead of resyncing everything, giving brokers a faster, safer way to close data gaps after an outage without the impact of a full resync. ### B2CORE UI updates [#b2core-ui-updates] * During sign-up, the **country** field is now pre-filled automatically based on the visitor's detected location, reducing manual entry for new clients. * The client portal now detects the interface **language from the browser**, so new visitors see the portal in a familiar language from the start. * The simplified registration form is now split into **multiple pages**, making longer sign-up flows easier to complete. * A **"Coming soon"** screen can now be shown for features that are not yet available in a broker's setup. ### Payment system updates [#payment-system-updates] * **Volet** is now available to all brokers by default. * For **B2BINPAY** and **Coinsbuy**, deposit address destinations are now supported and a custom **blockchain label** can be shown in the payment details, making crypto deposits clearer for clients. * For **Flutterwave**, brokers can now choose whether the settled amount or the charged amount is used for a transaction via a new configuration option. * A **test connection** action has been added for the CoinsBuy V3 rate provider, so brokers can verify the integration directly from the Back Office. ### Improvements [#improvements] * **IB restrictions** are now applied to deposit and payout methods, so partners and their clients only see the payment options available to them. * The **Back Office dashboard** now supports filtering, including by client type, jurisdiction, and country, making it easier to focus on a specific segment. * Navigation between methods and operations grids in the payment configuration has been improved for faster back-office work. * Payment system configuration now shows a **fingerprint and masked preview** of secret fields, so operators can confirm which credential is stored without exposing it. * A client's **jurisdiction** set manually is now locked from automatic country-based mapping, with a clear indicator and an easy way to release it. * The precision of **FIAT currencies** can no longer be edited, preventing accidental misconfiguration. * Changing a client's **email** now propagates the update to B2TRADER, keeping platform records in sync. * For **cTrader**, product currencies are now filtered by the cBroker's deposit assets, so only relevant currencies are offered. * New Back Office API endpoints let integrators write client **marketing data**, and a new `/api/v2/countries` endpoint returns the country list. * Performance has been improved across data exports, the deposits and payouts lists, the clients API, IB payment tables, and large CSV imports, making these operations faster and more reliable at scale. ### Deprecated functionality [#deprecated-functionality] * The legacy **Volet** and **BFT365** payment provider integrations have been removed. They are superseded by the new PSS-based connections. ### Resolved issues [#resolved-issues] * Saving a corporate client's profile no longer overwrites a manually set jurisdiction via automatic country mapping, preventing clients from being placed under the wrong regulatory entity. * Decimal commission values are now accepted on the transaction update endpoint. * For Introducing Brokers, B2TRADER transactions now fall back to the account currency when needed, and per-account trading volume and rewards are correctly scoped to the viewing partner. * IB report and account filters now accept alphanumeric IDs. * The IB payment export preview table is now horizontally scrollable, so wide exports are easier to review. ## May 31, 2026 [#may-31-2026] ### New features [#new-features-1] #### Built-in brand-new identity provider [#built-in-brand-new-identity-provider] B2CORE now ships with its own built-in identity provider. Brokers can let clients sign up and log in with **Apple**, **Google**, or any other **OIDC-compliant** provider, offering a faster, more familiar sign-in experience. **Passkeys** are now supported as well, giving clients a secure, passwordless way to sign in. B2CORE can also act as a trusted identity provider itself, so third-party and in-house apps can offer a "Log in with B2CORE" option and authenticate clients via OIDC without managing separate credentials. The migration to the new identity provider has already started and will be completed for all brokers by the end of June 2026. #### B2CONNECT integration [#b2connect-integration] B2CORE now integrates with **B2CONNECT**, B2Broker's multi-asset liquidity and trading connectivity hub. Brokers can connect B2CORE directly to B2CONNECT as a trading platform, letting their clients access B2CONNECT-powered instruments and liquidity from within B2CORE. ### B2CORE UI updates [#b2core-ui-updates-1] * Embedded custom pages (iframe menu entries) now follow the client's selected interface language, so third-party tools open in the same language as the rest of the portal. * The trading platform password is now shown to the client once after an account is created, making it easier to save credentials for platforms that require them. Available for MT4/MT5. * A new immediate verification flow can be enabled to prompt clients to complete KYC right after a call to action, helping move new sign-ups through verification faster. ### Payment system updates [#payment-system-updates-1] * A **system precheck** has been added to the payout approval flow. Withdrawals are now validated against the PSS payment layer before they are processed, reducing the risk of approving payouts that would later be rejected downstream in PSP. * For **B2BINPAY** and **Coinsbuy**, the reverse exchange rate is now calculated for conversions, and the redundant **Label** field has been removed from the withdrawal form. * For **PayRetailers**, deposit and withdrawal status changes are now received via webhook notifications, keeping transaction states up to date automatically. * For **BridgerPay** card withdrawals, the email field is now always mandatory and the first and last name are pre-filled, reducing failed payout attempts. * For **Volet** bank-card withdrawals, additional form validation and the cardholder address have been added. ### Improvements [#improvements-1] * **Idempotency keys** are now supported on the `makeDeposit` and `makeWithdrawal` API endpoints as well as the Back Office manual deposit and withdrawal forms. Retried requests safely return the original transaction instead of creating a duplicate, giving integrators reliable retry behavior. * Account **auto-creation rules** have been reworked into a dedicated section with explicit per-trigger options, giving brokers clearer, more granular control over when trading accounts are opened automatically for clients. * For crypto payouts via **PSS**, the destination wallet address is now verified through SumSub and validated against the client's whitelist, adding protection against withdrawals to unauthorized addresses. * On the create-exchange form, operators with the appropriate permission can now enter the exchange rate manually, giving full control over admin-initiated conversions. * For **TradeLocker**, hedging is now enabled for all products and currencies. * The **Transactions** table now includes source and destination account number columns, and account numbers are now shown in the transfer account selectors, making it easier to identify the accounts involved. * Manual deposit creation now supports **invoice** and **transaction ID** fields for better reconciliation. * Contact synchronization with **ActiveCampaign** and **SendGrid** is now scheduled automatically, keeping marketing audiences up to date. * For KYC via **iDenfy**, a verification started on desktop and continued on mobile is now finalized automatically via webhook, smoothing the mobile hand-off. * Phone numbers received from **SumSub** are now marked as confirmed, so clients don't have to re-verify a number that has already been validated during KYC. * The **Back Office** now shows a clear "Access denied" message when a user without the required permission tries to change a client's verification level or rights. * Via the API, platform credentials can now be supplied when creating an account, and `api/v2/accounts` now returns and can be sorted by `updateTime`. * The registration date-of-birth field now restricts entries to a reasonable date range, reducing invalid sign-up data. ### Deprecated functionality [#deprecated-functionality-1] * The **Clients** > **Services** feature has been removed from the Back Office. * The **System** > **Localizations** section has been removed, along with the legacy language management it relied on. Languages are now managed entirely through B2TRANSLATE. ### Resolved issues [#resolved-issues-1] * Admin-initiated exchanges are no longer silently saved at a rate of 1.0 when the rate provider is unavailable; the operation now uses the correct rate. * For **cTrader**, a local copy of the country list is now used, avoiding errors when the external list is unavailable. * The **Centroid** free-funds calculation has been corrected. * The audit journal widget now shows all changed fields for an action. * Deleted clients are now excluded from the phone-number uniqueness check, so a new client can reuse a number freed up by a removed account. * Several incorrect language and locale codes and names have been fixed. * The granularity of the equity graph across time periods has been corrected. ## April 30, 2026 [#april-30-2026] ### New features [#new-features-2] #### New PS integrations [#new-ps-integrations] Support for the following new payment systems has been added: * **Columis** – with support for deposits * **Volet** – with support for deposits and withdrawals #### Intercom helpdesk integration [#intercom-helpdesk-integration] B2CORE now integrates with **Intercom**, allowing brokers to offer in-app live chat and support to their clients across the web, iOS, and Android apps. The Intercom authentication is handled securely on the server side, so credentials are never exposed to the client. #### New email template system [#new-email-template-system] A redesigned email template system has been introduced. Brokers can now customize the default transactional emails – such as welcome messages and notifications – directly from the Back Office, making it faster to match emails to their brand without developer involvement. All the email templates will be migrated there soon. #### Embeddable custom pages in the client portal [#embeddable-custom-pages-in-the-client-portal] Brokers can now embed their own or third-party pages directly in the B2CORE client portal as custom menu entries, choosing whether each entry opens in the same tab, a new tab, or an embedded iframe. A new authentication endpoint lets those embedded services securely identify the signed-in client without requiring a separate login. For details, refer to [How to integrate your app as iframe in B2CORE](../how-to-articles/manage-system-settings/how-to-integrate-your-app-as-iframe-in-b2core). ### B2CORE UI updates [#b2core-ui-updates-2] * B2TRADER Trading accounts now expose a dedicated, human-readable **display number**, shown consistently across the client portal, the Back Office, and data exports. * A **login button** has been added to the sign-up page, making it easier for returning clients to switch to the login screen. ### Payment system updates [#payment-system-updates-2] * For **B2BINPAY** and **Coinsbuy**, the EUROC stablecoin is now recognized under its updated **EURC** ticker, ensuring the currency is displayed and processed correctly. * For **BridgerPay**, the last four digits of the card are now stored and shown in the withdrawal payment snapshot, making it easier to identify the card used for a payout. ### Improvements [#improvements-2] * **Hint support** has been added to form fields and payment system configuration fields, so brokers can show inline guidance to clients on deposit and withdrawal forms and reduce support requests. * A **jurisdiction** filter has been added to the **Finance** section, helping brokers that operate across multiple legal entities narrow down financial records by jurisdiction. * For KYC via **SumSub**, the questionnaire answers submitted by a client are now visible in the Back Office. * The permission to update a client's **verification level and rights** is now separate from the general client-info read permission, so brokers can grant or restrict this capability to back-office users independently. * **Active Campaign** connections can now be tested directly in the Back Office with a check-connection action. * An **Apple touch icon** can now be configured under visual customization, so the B2CORE UI shows a branded icon when clients add it to their home screen. ### Deprecated functionality [#deprecated-functionality-2] * Several legacy payment provider integrations that are no longer supported have been removed, having been superseded by PSS-based connections. These include **SticPay**, **Sqala**, **Help2Pay**, and **KoraPay**. ### Resolved issues [#resolved-issues-2] * For **MT4/MT5**, the client's country is now mapped using each platform's own country dictionary, ensuring the correct country is sent to the trading platform. * Login push notifications now display human-readable text instead of raw codes. * Newly created accounts now appear in the account list immediately after creation. * Currency icon spacing has been fixed in right-to-left (RTL) layouts. * Withdrawal amount validation has been corrected. * The **Transfers** export now correctly populates the internal client type and includes client tags. * In **Savings**, the "hide unavailable programs" filter now also hides programs the client doesn't have enough balance to join. ## March 31, 2026 [#march-31-2026] ### New features [#new-features-3] #### Simplified registration flow [#simplified-registration-flow] A new, streamlined registration flow is now available, designed to reduce friction during onboarding and help new clients sign up faster. Brokers can enable and configure the simplified flow through the corresponding settings in the Back Office. ### B2CORE UI updates [#b2core-ui-updates-3] #### Calculator for crypto deposits [#calculator-for-crypto-deposits] A calculator has been added to the static deposits flow in the B2CORE UI. Before completing a deposit, clients can now estimate the amount and review conversion details, making deposits via static payment methods clearer and more predictable. ### Payment system updates [#payment-system-updates-3] * For crypto deposits via **B2BINPAY** and **Coinsbuy**, the network protocol is now displayed alongside the blockchain name (for example, Ethereum (ERC-20), BSC (BEP-20), or TRON (TRC-20)). This helps clients select the correct network and reduces deposit errors. * For **KoraPay** bank account withdrawals, the destination country can now be configured, so the correct list of banks is shown per country. This enables local bank withdrawals across additional African markets such as Nigeria and South Africa. * For **BridgerPay**, a deposit method can now be configured to open the checkout directly to a single payment option – such as credit card, wire transfer, or crypto – giving brokers tighter control over the deposit experience. * For **Sqala**, a human-readable **Code to pay via PIX** field has been added to PIX deposits, making it easier for clients in Brazil to identify and copy the correct payment code. In addition, the platform-side minimum and maximum amount limits for BRL transactions via Sqala have been removed. ### Improvements [#improvements-3] * A new **color scheme generator** has been added to visual customization, making it easier to produce a consistent, branded set of theme colors for the B2CORE UI. * A new option has been added to external connections to control whether an integration's key is shared with the B2CORE UI for client-generated events. For analytics connections such as **RudderStack**, disabling it keeps the key out of the public system-info endpoint, preventing misuse. * The client **jurisdiction** is now included in key financial reports (such as the Client Finance, Transaction, and Balances reports) as well as in the **Deposits**, **Payouts**, **Transfers**, and **Exchanges** export files, helping brokers that operate across multiple legal entities identify each client and transaction at a glance. * In **Bonuses** > **Bonus distribution**, the bonus name filter has been replaced with a text search, allowing operators to quickly find specific bonus programs by name. * The temporary bonuses list can now be filtered to show only unclaimed programs, so clients always see the offers still available to them. * The **Transactions** export now includes all records rather than only the currently visible page, bringing it in line with the other **Finance** sections. * The KYC upload form now validates the minimum required number of files before submission, showing clients an immediate, localized message if they haven't uploaded enough documents. * Clients can no longer submit more than one account deletion request at a time; if a request is already pending, a new one can't be created. ### Deprecated functionality [#deprecated-functionality-3] * The **Mailing** > **Marketing** feature has been removed from the Back Office, following the deprecation notice introduced in the previous release. ### Resolved issues [#resolved-issues-3] * The default cryptocurrencies list now uses the correct precision values. * In **Savings**, the preset name is now validated when a preset is updated. * The language dropdown in the B2CORE UI now preserves the order defined on the server instead of re-sorting the languages alphabetically. ## February 28, 2026 [#february-28-2026] ### New features [#new-features-4] #### New PS integrations [#new-ps-integrations-1] Support for the following new payment system has been added via **PSS**: * **We Payment** – with support for deposits and withdrawals #### Acuity Trading integration [#acuity-trading-integration] B2CORE now integrates with **Acuity Trading**, a provider of market analysis tools and trading signals. Once configured, brokers can offer their clients access to Acuity Trading research and analytics directly within B2CORE, enriching the trading experience and expanding the product offering. #### Adjust analytics integration [#adjust-analytics-integration] B2CORE now supports integration with **Adjust**, a mobile measurement and marketing analytics platform. When configured, B2CORE sends attribution and event data from the B2CORE UI, iOS, and Android apps to Adjust, helping brokers track user acquisition and measure the performance of their marketing campaigns. #### Journal log in the Back Office [#journal-log-in-the-back-office] A new **Journal log** is now available in the Back Office, starting with the client details. It provides a full audit trail showing who created, updated, or deleted a record and what exactly was changed, along with the actor and timestamp for each event. The journal is available to Back Office users assigned the corresponding permission. #### Redesigned Restrictions management [#redesigned-restrictions-management] The interface for managing restrictions has been reworked. A dedicated **Restrictions** tab is now available on the product editing page in the Back Office, listing all active restrictions – such as allowed countries and required verification levels – so admins can quickly see who is eligible for a product without leaving the page. #### Access restrictions for savings presets [#access-restrictions-for-savings-presets] Savings presets can now be configured with access restrictions by **client type**, **jurisdiction**, **country**, and **verification level**, similar to the restrictions already available for products and bonuses. Clients who don't meet the criteria won't see the preset, helping brokers comply with regulatory requirements across different jurisdictions. ### B2CORE UI updates [#b2core-ui-updates-4] * The deposit and withdrawal flows in the B2CORE UI have been further streamlined for a smoother and more intuitive experience. * Clients can now select a **preferred currency** for demo accounts. * The display density of tables has been improved for better readability, and the adaptive layout of the **Profile info** section has been refined for smaller screens. ### Payment system updates [#payment-system-updates-4] * The blockchain **transaction ID (hash)** is now saved and displayed in the deposit and withdrawal details in the Back Office, and is also available via the Back-Office API. This makes it easy to look up crypto transactions directly on the blockchain. * New Back-Office API v2 endpoints allow payment assistance applications – for deposits, withdrawals, and static deposits – to be moved between the **In Progress**, **Success**, and **Failed** statuses programmatically, enabling more automated payment operations. ### Improvements [#improvements-4] * Back Office users with the appropriate permission can now **delete incorrectly uploaded client documents** directly from the **Clients** > **Documents** table, removing the need to contact the support team for document cleanup. * The **Documents** table now includes **Uploaded by** and **Uploaded at** columns, with sorting and filtering, so admins can easily see who submitted each document and when. * For KYC via **SumSub**, clients who receive a final rejection now retain the ability to attempt verification again. A new option, **Allow new verification tries on reject**, controls this behavior in the SumSub connection settings. * The **Mobile description** field for verification levels now accepts **HTML** content, allowing brokers to craft richer descriptions shown to clients in the mobile apps. * Client tags linked to a jurisdiction are now automatically assigned or updated when a client's country changes, when they complete KYC, or when an admin applies jurisdiction changes to all clients. Tags set manually and unrelated to jurisdictions are preserved. * Data exports have been made more reliable with improved error handling and logging, and large high-precision numbers are now correctly handled in deposit and payout exports. * The Back-Office API endpoint for clients (`/api/v2/clients`) now supports sorting by **update time** in addition to creation time, enabling better synchronization workflows. * Overall platform performance has been improved: backend applications have been moved to a new, modern application server for faster API responses, and rate caching for the account total-balance endpoint has been optimized. ### Deprecated functionality [#deprecated-functionality-4] * A number of legacy payment provider integrations that are no longer supported have been removed. These have been superseded by PSS-based connections and include: AlgoGateway, ExLink, ChipPay (payout), PayRetailers, BitWallet, Payelata, NicePay, ISmartPay, EeziePay, NinePay, Chillpay, Epay, POLiPay, PayTrust88, SolidPayments, RpnPay, Axcess, LionPay, and Ozow. * As part of the ongoing move away from SMS-based authentication, the phone confirmation step has been removed from the registration wizards. New clients are no longer asked to confirm their phone number via SMS during registration. * A deprecation notice has been added to the **Mailing** > **Marketing** section in the Back Office. ### Resolved issues [#resolved-issues-4] * Quiz and test details are now returned with the correct translations in all enabled languages. * The translations of SumSub KYC field names in the Back Office have been improved. * On the **Transfers** page, the swap option is now disabled for clients who don't have the corresponding permission. * Savings plans without a matching preset are now handled correctly. * Validation on the PSS withdrawal form has been fixed for cases involving different currencies. * For **PayRetailers**, the deposit status is now recognized correctly (CANCELED is treated as CANCELLED). ## January 31, 2026 [#january-31-2026] ### New features [#new-features-5] #### Rate providers management via the Back-Office API [#rate-providers-management-via-the-back-office-api] New Back-Office API v2 endpoints have been added to list rate providers and update custom rate values. This enables brokers to programmatically manage and override the exchange rates used in B2CORE, simplifying integration with external rate sources and automated workflows. #### Backend analytics events for RudderStack [#backend-analytics-events-for-rudderstack] When **RudderStack** is configured as an external connection, B2CORE now automatically sends key backend events – such as deposits, withdrawals, sign-ups, and verification decisions – to the platform. This complements the existing front-end analytics and provides a more complete view of client behavior for brokers relying on RudderStack. ### B2CORE UI updates [#b2core-ui-updates-5] #### Cookie consent [#cookie-consent] A cookie consent modal window has been added to the B2CORE UI, allowing clients to review and accept the use of cookies in line with privacy requirements. ### Payment system updates [#payment-system-updates-5] * Payment forms for PSS methods now automatically pre-fill known client data, such as name, email, and address, from the client profile. Clients no longer need to re-enter information they have already provided when making deposits or withdrawals. * For **KoraPay**, withdrawals to bank accounts have been improved for more reliable processing. * **PaymentAsia** now supports the **MXN** (Mexican peso) currency code. ### Improvements [#improvements-5] * Backend images, including logos for the **Sign In** page and the menu header, are now managed from the **System** > **Visual customization** menu in the Back Office instead of a separate section. Logos for the login background and the platform logo can now also be uploaded in **SVG** format. * Login security notifications have been improved to reduce spam. Clients are now alerted only when a sign-in occurs from a **new device** or **new IP address**, rather than on every login, making security alerts more meaningful. * Disabling a client's TOTP (authenticator app) two-factor authentication from the Back Office is now correctly synchronized, ensuring the change is reliably applied and the client is no longer prompted for 2FA. * When using **Zendesk** with the B2CORE mobile apps, support requests are now routed through the correct messaging channel, ensuring mobile clients reach the right support queue. * It's now possible to add comments to external connection form groups in **System** > **External connections**, making configurations easier to document and maintain. * The performance of filtering transactions by **client** and **type** on the **Finance** pages has been optimized, and retrieving ignored symbol groups for bonuses now works faster. * A clear error message is now displayed when an operation can't be completed because the account lacks deposit or withdrawal rights. ### Resolved issues [#resolved-issues-5] * Custom menu items for the B2CORE UI can now be edited correctly, and creating a child menu item no longer fails in **Promotion** > **Menu**. * Multi-select controls in **System** > **External connections** now work as expected. * Exporting data from the **Bonuses** section now completes successfully. * The position of banners in the B2CORE UI has been corrected. * Default values for the text and button text are now set when creating announcements. ## December 18, 2025 [#december-18-2025] ### New features [#new-features-6] #### New PS integrations [#new-ps-integrations-2] With this release, support for the following new payment systems has been added via **PSS**: * **LuqaPay** – with support for withdrawals only * **Visionpay (HILZI)** – with support for deposits and withdrawals * **Ozow** – with support for deposits only * **B2BINPAY** (via API v3) – with support for static deposits and withdrawals * **Coinsbuy** (via API v3) – with support for static deposits and withdrawals #### Salesforce integration [#salesforce-integration] B2CORE now supports **Salesforce** integration, enabling seamless syncing of client data from the B2CORE Back Office to Salesforce. This allows you to centralize client information and leverage Salesforce tools for your business processes. For details, refer to [How to integrate Salesforce](../how-to-articles/manage-system-settings/how-to-integarte-salesforce). #### Twilio SendGrid integration [#twilio-sendgrid-integration] B2CORE now integrates with **Twilio SendGrid**, enabling automatic syncing of client data from the B2CORE Back Office to SendGrid contacts. This integration allows you to manage email delivery, marketing campaigns, contact segmentation, and related communication tasks directly through SendGrid. For details, refer to [How to integrate Twilio SendGrid](../how-to-articles/manage-communication-platforms/how-to-integarte-sendgrid). #### Address updates via the Profile in the B2CORE UI [#address-updates-via-the-profile-in-the-b2core-ui] Address updating can now be enabled for `individual` clients in the **Profile** menu of the B2CORE UI. To allow clients to change their country and residential address, configure the new **Address updating** option in **System** > **Settings** in the Back Office. This option enables you to choose how address changes are processed: * **Admin approval required**: an admin must approve the change via a client request in the Back Office. This option applies only when your KYC procedure *doesn’t include* address verification. * **Repeated verification required**: the client’s verification level is reset, and they must complete KYC again with the new address. This option applies only when your KYC procedure *includes* address verification. For more details, refer to the [Client profile](../back-office-guide/system/settings#client-profile) section in the **System** > **Settings** documentation. #### New notifications in the bell icon in the B2CORE UI [#new-notifications-in-the-bell-icon-in-the-b2core-ui] The **bell** icon in the top bar of the B2CORE UI and mobile app now displays a counter of new notifications and opens the **Notifications** panel when clicked. With this release, the panel shows alerts about **new login attempts**, **new login devices**, and **changes to passwords** or **2FA methods**, all grouped under the **Security** category. From the panel, clients can open the **Notifications** page, where they can review all notifications, see full details, and quickly navigate to the **Security** section of their profiles. More notification types will be supported in future updates. Notifications in the bell icon ### B2CORE UI updates [#b2core-ui-updates-6] #### New All tab in Transaction History [#new-all-tab-in-transaction-history] In **Transaction History**, a new **All** tab has been added, allowing clients to view transactions of all types in one place and filter them by status. Transaction History #### Support for the Zendesk chatbot [#support-for-the-zendesk-chatbot] When using **Zendesk** as your HelpDesk system with B2CORE, you can now enable the Zendesk chatbot in the B2CORE UI. This enhancement offers a more streamlined HelpDesk experience, allowing clients to ask questions, quickly find the information that they need, and seamlessly switch to a live operator, all without requiring additional authorization. For details, refer to [How to add Zendesk chatbot](../how-to-articles/manage-system-settings/how-to-configure-a-connection-to-zendesk#how-to-configure-the-zendesk-chatbot). #### Enhanced static Dashboard [#enhanced-static-dashboard] The static **Dashboard** with fixed widgets introduced in the previous release has been further enhanced to improve usability and clarity. **Last Transactions** * The widget is now displayed on the **Dashboard** only if the related **Transaction History** menu is enabled. If the menu is hidden, the widget won’t appear on the **Dashboard**. * Fiat currencies in the widget always use a precision of two decimals. All other currencies follow the decimal settings configured for each currency in the Back Office. * If a client has no transaction history, the **All** button is hidden from the widget. It becomes visible once transactions appear, allowing clients to view their full history directly from the widget. Dashboard with Transaction History **Portfolio** The tabs displayed in the widget now depend on whether the related **Wallets** and **Platforms** menus are enabled: * If both menus are enabled, the widget shows the **Wallets**, **Trading Platforms**, and **All** tabs, allowing clients to view their total portfolio value across all wallets and trading accounts. * If either menu is disabled, the corresponding tab is hidden from the widget. **Trading Accounts** The widget is displayed on the **Dashboard** only if the related **Platforms** menu is enabled. If the menu is hidden, the widget won’t appear on the **Dashboard**. Dashboard with Wallets and Trading accounts * **Automatic submission of verification code forms** In forms where verification codes are required to confirm actions, for example, signing in, changing a password, or others, the form is now automatically submitted once the code is entered, removing the need for clients to click the **Continue** button and making the process more seamless. ### Payment system updates [#payment-system-updates-6] #### Payment input snapshots [#payment-input-snapshots] In the B2CORE Back Office, it’s now possible to view the information that clients enter on the deposit and withdrawal forms when using **PSS** methods. This data helps admins to make informed decisions when approving or rejecting withdrawal requests and speeds up the investigation of potential payment-related issues. The information is available in the new **Payment input snapshot** section, which is added to: * Deposit details in **Finance** > **Deposits**. * Withdrawal details in **Finance > Payouts**. * Client requests in **Clients** > **Requests**, including: **Payout** requests, **PS Deposit Assistance** requests, and **PS Withdrawal Assistance** requests. #### Streamlined handling of PS Deposit Assistance requests [#streamlined-handling-of-ps-deposit-assistance-requests] When a **PS Deposit Assistance** request is triggered due to reaching a sync deadline with the respective payment system, a separate request is no longer created in **Clients** > **Requests**. Instead, such cases now must be handled directly in the deposit details, reducing the number of unnecessary assistance requests. #### Full B2TRANSLATE integration for payment forms [#full-b2translate-integration-for-payment-forms] Payment forms in the B2CORE UI and mobile apps are now fully integrated with [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly WEBLATE). Labels for all components of dynamic forms for PSS-connected deposit and withdrawal methods, as well as validation error messages, can now be customized and translated into multiple languages via B2TRANSLATE. This ensures consistent localization across all financial workflows. ### Improvements [#improvements-6] * The balance of source accounts is now checked when approving client requests for **transfers** and **internal transfers** to ensure sufficient funds are available. If the balance is insufficient for a transfer, the request can’t be approved, and the error message is displayed: `Application approve failed. Insufficient funds on source account`. * In **Bonuses** > **Bonus distribution**, a new **Created by** column has been added, displaying the emails and IDs of the Back Office users who added bonuses to clients. Clicking an ID opens the profile of the respective Back Office user. * The loading speed of the **Finance** > **Exchange** page in the Back Office has been significantly improved, especially for large data volumes. Exporting exchange data from the same page has also been accelerated. * Visibility of items in the main menu of the B2CORE UI can now be restricted based on a client’s **jurisdiction** and **country**, allowing more granular control over which features clients can access. ## October 1, 2025 [#october-1-2025] ### New features [#new-features-7] #### New PS integrations [#new-ps-integrations-3] Support for the following new payment systems has been added via **PSS**: * **Payrock** – with support for deposits and withdrawals * **Proxpay** – with support for deposits and withdrawals * **KoraPay** – the option for withdrawals to bank accounts has been added. #### Introducing static payment details for deposits [#introducing-static-payment-details-for-deposits] Starting with this release, deposit methods via integrated payment systems will gradually support **static payment details**. Previously issued payment information, such as crypto addresses or bank details, is saved for clients, allowing them to reuse it for deposits of different amounts at any time. In this release, **B2BINPAY** and **Coinsbuy** methods feature static deposit details. Clients can generate deposit addresses in the B2CORE UI, which are saved for future use, or create new blockchain-specific addresses, all stored for subsequent deposits. #### The Dashboard with key financial metrics [#the-dashboard-with-key-financial-metrics] The **Dashboard** now opens after signing in to the Back Office for users who are assigned the permission `Access to Finance Dashboard` under the **Statistics** category. The **Dashboard** displays key financial metrics, including **total deposits**, **total withdrawals**, and **net deposits**, helping users quickly review financial results and activity over the selected period (refer to [Dashboard](../back-office-guide/dashboard)). ### B2CORE UI updates [#b2core-ui-updates-7] #### Redesigned static Dashboard [#redesigned-static-dashboard] The B2CORE UI **Dashboard** has been redesigned to provide a clear, intuitive overview of a client’s portfolio and financial state. The **Dashboard** is now a fixed, non-customizable page with the following widgets: * **Portfolio**: shows the total balance with the ability to view allocation across wallets and trading accounts. The prominent **Deposit** button allows clients to add funds quickly. In addition, access to other financial transactions such as **Transfers**, **Exchanges**, and **Withdrawals** is available from the widget. * **Last Transactions**: shows a list of recent financial transactions along with their statuses for quick review and provides access to the full **Transaction History**. * **Trading Accounts**: displays active accounts, marked as favorites or accounts with non-zero balances, for easy access, and provides options to create a new account or go to trading with a single click. #### Clear display of verification request statuses [#clear-display-of-verification-request-statuses] For clients, it’s now easier to track the status of their verification requests. A new banner on the **Dashboard** and **Verification** page displays the pending status after a request is submitted and provides a direct link to the **Document verification** section, where clients can monitor their document statuses. #### More accurate indicative amounts for deposits and withdrawals [#more-accurate-indicative-amounts-for-deposits-and-withdrawals] The calculation of indicative amounts displayed to clients when initiating deposits and withdrawals in the B2CORE UI has been reworked. These amounts now more accurately reflect the final results that clients will receive after execution, taking into account commissions and exchange rates. ### Improvements [#improvements-7] * For **DXtrade**, it's become possible to add the **Account number prefix** when configuring a product in the Back Office. The prefix is added to the beginning of DXtrade account numbers to help distinguish, for example, live and demo accounts or accounts belonging to different brands within a single DXtrade infrastructure (refer to [How to integrate DXtrade](../how-to-articles/manage-platforms/how-to-integrate-dxtrade)). * For **ShuftiPro**, the document type `any` is now supported for address verification. It allows clients to submit any document containing their name and address, rather than a specific document type, making the KYC process more flexible and convenient (refer to [How to use ShuftiPro](../how-to-articles/manage-verification-options/how-to-use-shuftipro)). * Jurisdictions are now assigned to clients based on the combination of their **country** and **client type** as defined in the jurisdiction settings (refer to [Jurisdictions](../back-office-guide/clients/jurisdictions)). * PSS payment methods, including both deposits and withdrawals, are now supported in the mobile apps starting from version 1.30.0 (iOS) and 2.8.0 (Android). * Table loading in the Back Office has been optimized. In particular, the **Clients** > **Accounts** list now loads much faster, even when handling a large number of accounts. * For **Twilio** calls to clients from the B2CORE Back Office, you can now choose which phone number to use if you have several active Twilio numbers in your account. This enables you to select the most suitable local number, increasing the chances of successful contact and enhancing client trust. Outgoing calls made from the B2CORE Back Office via Twilio can now be recorded, with the recordings saved in your Twilio account for later playback. * The **Export** option has been enhanced to provide more reliable data export from the pages where this option is available in the Back Office. * In **Bonuses** > **Bonus distribution**, the **Ignored symbol groups** field is now optional and can be left empty when manually crediting bonuses to clients. If left empty, all symbols from available groups traded by a client are counted toward their traded volume for meeting bonus requirements. * Banner targeting in the B2CORE UI and mobile apps has been improved. In addition to **country** and **verification level**, restrictions can now be applied by **client type** and **jurisdiction** for more precise control over visibility. * In saved withdrawal presets in the B2CORE UI, the payment method now matches the selected withdrawal method, and the currency is clearly displayed. Previously, the technical method name used in the Back Office appeared, causing inconsistencies. ## July 2, 2025 [#july-2-2025] ### New features [#new-features-8] #### New PS integrations [#new-ps-integrations-4] Support for the following new payment systems has been added via **PSS**, with both deposits and withdrawals available: * **FundPay** * **Jetapay** * **PayRetailers** * **TopChange Pay** In addition, withdrawals are now supported for **AlfredPay**. #### Integration with SumSub Fraud Prevention [#integration-with-sumsub-fraud-prevention] Transaction monitoring via **SumSub Fraud Prevention** is now supported for fiat and crypto **deposits** and **withdrawals**. When such transactions are initiated, they're automatically checked by **SumSub**, with results returned to B2CORE. The results are displayed in the **Transaction monitoring** section of deposit and withdrawal details, as well as in the respective client requests before they can be approved or rejected. Additionally, a new **KYT status** column in **Finance** > **Deposits/Payouts** displays the transaction monitoring results. This also improves **auto-withdrawals** in B2CORE, allowing faster processing without compromising compliance. To use this feature, you must have **SumSub Fraud Prevention** enabled and properly configured in your SumSub account and the enabled **SumSub** external connection in the B2CORE Back Office (refer to [How to configure a connection to SumSub](../how-to-articles/manage-verification-options/how-to-use-sumsubstance#how-to-configure-a-connection-to-sumsub)). #### Integration with ActiveCampaign [#integration-with-activecampaign] It’s now possible to run targeted email campaigns using client data from B2CORE, seamlessly synced with the **ActiveCampaign** platform. This integration enables more efficient, data-driven email marketing and notifications by: * Configuring an external connection to **ActiveCampaign** in the B2CORE Back Office. * Automatically syncing client data from B2CORE to **ActiveCampaign**. * Creating email lists to improve client retention and provide more personalized interactions via **ActiveCampaign**. For details, refer to [How to integrate ActiveCampaign](../how-to-articles/manage-communication-platforms/how-to-integrate-activecampaign). #### Support for custom menu items in the B2CORE web and mobile apps [#support-for-custom-menu-items-in-the-b2core-web-and-mobile-apps] It’s now possible to add custom items to the menu displayed in both the B2CORE UI and mobile apps. In mobile apps, this functionality is supported starting from **iOS** v1.29 and **Android** v2.6.0. Custom items can be configured in **Promotion** > **Menu** by specifying their names, URLs to which clients will be redirected, and icons. When clicked, clients are redirected to third-party external resources or web pages that support your business (refer to [How to add custom menu items](../how-to-articles/manage-advertising-options/how-to-add-custom-menu-items)). ### B2CORE UI updates [#b2core-ui-updates-8] #### Improved Total Balance widget [#improved-total-balance-widget] The widget has been improved to show balances from both wallets and trading accounts, as well as the overall portfolio value for a comprehensive financial overview. #### Enhancements related to B2TRADER accounts [#enhancements-related-to-b2trader-accounts] The following improvements to B2TRADER accounts handling have been introduced: * **New B2TRADER Accounts widget**: accounts created on the B2TRADER platform can now be conveniently viewed and accessed via a dedicated widget on the **Dashboard** in the B2CORE UI. With a single click, traders can sign in to the trading interface and start trading instantly. * **Support for Netting accounts**: in addition to **Hedging**, B2TRADER accounts with the **Netting** execution type are now supported. This allows traders to choose the appropriate type to plan and adjust their trading strategies. To enable Netting accounts, a separate product must be configured in the B2CORE Back Office under the **Products** menu. * **Support for demo accounts**: demo B2TRADER accounts with a predefined balance can now be created via the B2CORE UI, allowing traders to safely practice using the trading interface.To enable demo accounts, a separate product must be configured in the B2CORE Back Office under the **Products** menu. #### Revised Sign Up and Sign In pages [#revised-sign-up-and-sign-in-pages] The **Sign Up** and **Sign In** forms have been redesigned for a cleaner layout, improved visual appearance, and a better overall user experience, including: * Displaying the client’s email or phone during confirmation to clarify where a verification code was sent. * The **Back** button now returns clients to the previous step without resetting the form. ### Improvements [#improvements-8] * PSS payment methods are now partially supported in the mobile apps. *Deposit* methods are available in the **iOS** app starting from v1.29 and **Android** starting from v2.6.0. *Withdrawal* methods via PSS aren't yet supported. * The use of bonus presets and temporary bonuses can now be restricted for clients based on a client's **country**, **client type**, **verification level**, **jurisdiction**, or **introducing broker (IB)**. These restrictions can be applied individually or in combination, allowing for more granular access control. If the restrictions are applied to the bonus preset used for crediting automatic deposit bonuses, these bonuses will only be credited to clients who meet the specified criteria (refer to [Bonus presets](../back-office-guide/bonuses/bonus-presets#details) and [Temporary bonuses](../back-office-guide/bonuses/temporary-bonuses#details)). * On the **Bonus** > **Bonus distribution** page, a new **Expired at** column has been added to display the date and time when a credited bonus is scheduled to expire or has already expired. This improvement makes it easier to monitor bonus timelines on client accounts and encourage clients to meet the bonus requirements before expiration. * Jurisdiction handling has been enhanced. You can now manually assign or change a client's jurisdiction in the client details in the Back Office. The list of countries for a jurisdiction can be edited, with the option to apply changes to existing clients or only to those who register after the update (refer to [Jurisdictions](../back-office-guide/clients/jurisdictions)). * For KYC via **ShuftiPro**, the **Show OCR form** – where clients can review, confirm, or if necessary, edit the information extracted from their submitted documents – can now be enabled or disabled in the ShuftiPro connection settings in **System** > **External connections**. * Confirmed phone numbers can now be removed from the **Contacts** tab in client profiles in the Back Office. To do this, a Back Office user must be assigned the `Update clients` permission. Once removed, the phone number becomes available for registering a new client profile. * The **Clients** > **Requests** page has been improved to include a **Country** column with filter options, making it easier to identify requests by client location. Additionally, the **Processing date** column now shows when a request was approved or rejected, helping you assess its processing time. * In **System** > **Visual customization**, images uploaded as logos can now only be in `SVG` format. ### Resolved issues [#resolved-issues-6] * Resolved an internal server error that occurred when uploading supporting documents for deposits via the **WireDocument** provider. Deposit requests now proceed without errors. ## April 18, 2025 [#april-18-2025] ### New features [#new-features-9] #### New PS integrations [#new-ps-integrations-5] With this release, we’ve integrated a new payment system, **AlfredPay**. It supports deposits and is fully integrated via PSS connections. #### Ongoing migration of payment systems to PSS [#ongoing-migration-of-payment-systems-to-pss] More systems have been successfully migrated to the **Payment System Service (PSS)**. You can view the complete list of PSS-supported payment systems in [Integrations > Payment systems](../integrations/payment-systems). They are marked with Yes in the **PSS-supported** column. Payment methods previously configured via non-PSS connections remain available and fully functional — except for **PayPal**, which is now only supported through PSS. Payment methods connected through PSS aren’t yet supported on the **iOS** and **Android** apps, meaning they are currently available to clients only via the B2CORE UI. #### Visual customization for the B2CORE UI [#visual-customization-for-the-b2core-ui] You can now personalize the appearance and style of your B2CORE UI to better reflect your brand using the new **System** > **Visual customization** menu in the Back Office. The available options enable you to: * Upload custom logos for the light and dark themes of your B2CORE UI. * Adjust light and dark theme colors. * Set and update background images for the **Sign In** and **Sign Up** pages of the B2CORE UI. * Add custom scripts, for example, for chatbot integration or analytics tracking. For more details, refer to [Visual customization](../back-office-guide/system/visual-customization). ### B2CORE UI updates [#b2core-ui-updates-9] #### Enhanced deposits and withdrawals [#enhanced-deposits-and-withdrawals] The deposit and withdrawal workflows in the B2CORE UI have been streamlined, making the processes faster and more intuitive for clients. The key enhancements include: * **Easier payment method selection**: based on the selected wallet currency and the currency used for deposit or withdrawal, only the available payment methods are displayed to a client, helping to quickly select the most suitable option without confusion. * **Clear commissions**: once a payment method is selected and a deposit or withdrawal amount is entered, the commission formula applied to the method is displayed, and the fee is automatically calculated. This helps clients make informed decisions when choosing their preferred method. * **Real-time rate updates**: when deposits or withdrawals involve currency conversion, clients can now manually refresh the rates to view the most current value. The rate refresh is optional and is intended for clarity. The rate applied at the moment of transaction is always up to date, ensuring accurate conversions even without manual refresh. * **Transaction summary**: after selecting a payment method and entering a deposit or withdrawal amount, clients can now view a detailed transaction summary before proceeding. The summary includes the amount to be deposited or withdrawn, the amount to be received, the current conversion rate, and any applicable commissions. * **Transaction statuses and notifications**: clients now receive real-time updates on the status of their transactions, helping reduce uncertainty and minimize the need for support requests. * **Redesigned icons**: the refreshed icons for payment methods are now better aligned with the overall design. #### Simplified B2BINPAY deposit form [#simplified-b2binpay-deposit-form] In the B2CORE UI, the B2BINPAY deposit form no longer displays fields for the amount, indicative amount, or conversion rate, as the funds are deposited when the transaction is processed on the blockchain after submitting the request in the B2CORE UI and receiving the deposit address, making these fields unnecessary. #### Preview of key B2CORE UI features [#preview-of-key-b2core-ui-features] Clients can now see a brief preview of B2CORE UI features before they access the **Sign Up** and **Sign In** forms through a new gallery showcasing main UI pages. This enhancement is designed to boost registration conversions and engage potential clients by providing them with an informative preview of the UI. #### Automatic sign-in after registration [#automatic-sign-in-after-registration] After successfully completing registration, new clients are now instantly signed in to the B2CORE UI without needing to enter their credentials on the **Sign In** page. #### Verification in the onboarding process [#verification-in-the-onboarding-process] New clients are now prompted to complete identity verification immediately after registration, streamlining the onboarding process to encourage faster verification, first deposits, and a quicker start to trading. Clients can still choose to skip this step and complete it later. If skipped, a friendly banner encouraging to complete KYC will appear on the **Dashboard**. #### Interactive UI hints for new clients [#interactive-ui-hints-for-new-clients] New clients signing in to the B2CORE UI for the first time are now provided with guided hints on key elements across various pages, helping them quickly understand the basic functionality and get started with B2CORE efficiently. #### Personal info update [#personal-info-update] Clients can now update their personal information directly in the B2CORE UI via the **Profile Info** menu. Any changes to personal data will reset the client’s verification level, requiring them to complete the KYC process again. #### Streamlined fund management in the Savings menu [#streamlined-fund-management-in-the-savings-menu] Clients are now prompted to deposit funds into savings programs or top up their wallets directly from the **Savings** menu when subscribing to a program and lacking sufficient funds to join it. Additionally, if a client subscribes to a savings program without having the required wallet, they will be offered the option to create a new wallet in the required currency. #### Enhanced widget management in the Dashboard [#enhanced-widget-management-in-the-dashboard] The **Dashboard** has become even more intuitive with a set of new widget management options designed to improve layout clarity and usability: * When multiple widgets are added, they now automatically align for a cleaner and more organized view. * Widgets can no longer be resized below the minimum size, ensuring all content remains clear and readable. * Widgets now snap into place, making it easier to arrange and maintain a structured dashboard layout. #### Seamless authorization to Zendesk [#seamless-authorization-to-zendesk] When signing in to **Zendesk**, clients are redirected to the B2CORE UI **Sign In** page. After signing in, they are automatically taken back to the Zendesk page specified in the connection details under **System** > **External connections**, ensuring a faster and smoother support experience. ### Improvements [#improvements-9] * In **Bonuses** > **Bonus distribution**, you can now view the history of transactions related to crediting or deducting specific bonuses on client trading accounts. This information is available on the **Bonus transactions** tab in the bonus details. Additionally, Back Office users with the appropriate permission can retry failed bonus transactions (refer to [Bonus transactions](../back-office-guide/bonuses/bonus-distribution#bonus-transactions). * For savings programs, the **Cancellation penalty** can now be set as a percentage of the invested amount, offering greater flexibility in penalty calculations. The higher the amount invested by a client, the greater the penalty will be in the case of early withdrawal. The penalty percentage can be applied to programs of both the Fixed and Flexible strategies (refer to [How to create a savings program](../how-to-articles/manage-savings-programs/how-to-create-a-savings-program)). * By the end of May 2025, the leverage parameter will no longer be applied directly to accounts on the **TradeLocker** platform. Instead, leverage will be configured per instrument within the platform. As a result, the leverage parameter for TradeLocker accounts is no longer supported in B2CORE. * Verification levels can now be restricted by country and jurisdiction, enabling you to create distinct KYC flows for clients based on their location and client type (refer to [How to restrict the use of verification levels by jurisdiction or country](../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor#how-to-restrict-the-use-of-verification-levels-by-jurisdiction-or-country)). * Filtering options have been added to **Systems** > **External connections**. You can now quickly find the required connection by applying the filter for **ID**, **Caption**, **Name**, **Provider**, or **Status**. ### Deprecated functionality [#deprecated-functionality-5] Integration with **Google reCaptcha** has been deprecated and is no longer supported. The reCaptcha step has been removed from the **Registration** and **Authorization** wizards and will no longer appear on the **Sign Up** and **Sign In** pages in the B2CORE UI. *** ## Past releases [#past-releases] ### December, 2024 🎄 [#december-2024-] #### New features [#new-features-10] ##### Introducing the Payment System Service (PSS) [#introducing-the-payment-system-service-pss] We’re happy to announce the launch of the B2CORE **Payment System Service (PSS)**, a powerful feature designed to streamline connections to external payment providers and cashier systems that aggregate multiple payment solutions. By configuring a single connection to a payment provider through PSS, you can give your clients access to a variety of deposit and withdrawal options offered by the provider and fully leverage its benefits. Payment systems that can be connected to B2CORE through PSS are indicated in [Integrations > Payment systems](../integrations/payment-systems). Previous integration methods remain available for these systems, ensuring that existing connections can continue to be used. If you intend to connect payment systems through PSS, please contact your account manager first to confirm the availability of PSS-supported connections on your B2CORE instance. ##### New PS integrations [#new-ps-integrations-6] The following new payment systems have been integrated: * **Paymid** – with support for deposits * **PayRetailers** — with support for deposits * **Ozow** – with support for deposits and withdrawals * **iSmartPay** – with support for deposits and withdrawals in THB. ##### Enhanced DXtrade integration [#enhanced-dxtrade-integration] Integration with the DXtrade platform has been revamped and is now fully functional, providing the capability to open and manage client training accounts, along with deposits, withdrawals, and transfers via the Back Office and B2CORE UI (refer to [How to integrate DXtrade](../how-to-articles/manage-platforms/how-to-integrate-dxtrade)). ##### Client segmentation by jurisdiction\*\* [#client-segmentation-by-jurisdiction] Client segmentation by jurisdiction is now available. In the Back Office, you can assign countries to specific jurisdictions in **Clients** > **Jurisdictions**. Once configured, clients will automatically be assigned to the correct jurisdiction based on the country they select during registration. This feature enables you to effectively manage clients from different jurisdictions, assign managers to specific countries, and restrict their access to clients based on jurisdiction (refer to [Clients > Jurisdictions](../back-office-guide/clients/jurisdictions)). #### New B2CORE UI [#new-b2core-ui] The redesigned B2CORE UI, first introduced about a year ago, is now fully implemented, powered, and optimized for seamless use. With this release, it officially replaces the previous interface, which has been discontinued and is no longer available. #### Improvements [#improvements-10] * The **Import Data** module has been updated to offer a more user-friendly experience when importing client, account, and IB-related data into B2CORE. This feature enables you to quickly start using B2CORE with your existing client base, eliminating the need for complex migration processes (refer to [Import data](../back-office-guide/system/import-data)). * When manually crediting bonuses to clients on the **Bonuses** > **Bonus distribution** page in the Back Office, you can now assign captions to these bonuses. These captions will be displayed to clients in the B2CORE UI, enabling them to distinguish credited bonuses (refer to [How to manually credit bonuses to clients](../how-to-articles/manage-bonuses/how-to-manually-credit-bonuses-to-clients)). * A new setting, **Enabled Two-factor auth providers**, has been added to **System** > **Settings**, enabling you to control which 2FA methods are visible and available for clients in the B2CORE UI. You can select both Google Authenticator and SMS confirmation, or only one of them. * It’s now possible to show or hide the **Nickname** field in client profiles in the B2CORE UI by adjusting the corresponding setting in the **Information showing** section under **System** > **Settings** in the Back Office. * For platforms that support web trading terminals, such as **cTrader** and **DXtrade**, you can now enable one-click access to these terminals directly from the B2CORE UI. To set this up, specify the **Web Terminal URL** in the platform details upon navigating to **Products** > **Platforms**. When specified, the **Trade** button will appear on account cards in the B2CORE UI, enabling clients to open the web terminal with a single click (refer to [How to enable one-click trading access from the B2CORE UI](../how-to-articles/manage-platforms/how-to-enable-one-click-access-to-web-trading-terminals)). For **cTrader**, the terminal will directly open the account from which the **Trade** button was clicked in the B2CORE UI, eliminating the need for clients to search for the desired account. * For **cTrader**, when creating accounts in B2CORE, the client's first and last names are now automatically transferred to the corresponding **First name** and **Last name** fields on the cTrader platform. * For MetaTrader 4/5 accounts created via B2CORE, you can now control the **Send reports** option applied to accounts on those platforms for reporting purposes. A new setting, **Use reporting on the platform**, has been added to **Products** > **Platforms** in the Back Office. Enabled by default, it ensures accounts are created with the **Send reports** option active. * You can now add localizations for the captions of custom fields added to your **Constructor** method. When switching languages in the B2CORE UI, the field names will be displayed according to the selected language (refer to [How to add custom fields for the Constructor deposit or withdrawal method](../how-to-articles/manage-payment-methods/how-to-add-the-constructor-deposit-or-withdrawal-method#how-to-add-custom-fields-for-the-constructor-deposit-or-withdrawal-method)). * The list of permissions that can be assigned to Back Office user groups in **Users** > **Groups** has been expanded to include new read-only permissions. These permissions allow Back Office users to view details in specified sections without the ability to make updates: * `View banners` – allows to view banner configurations in **Promotion** > **Banners**. * `View menu` – allows to view the configuration of the menu for the B2CORE UI in **Promotion** > **Menu**. * `View client rights` – allows to view permissions assigned to each verification level in **System** > **Client rights**. * `View rates` – allows to view rates in **Currencies** > **Rates**. * `View groups` – allows to view permissions assigned to Back Office user groups in **Users** > **Groups**. * `View mailing` – allows to view configurations of email sending services and SMTP providers in **Mailing** > **Marketing** and **Mailing > System**. * The **Rates** field in transaction details, such as those in **Finance** > **Deposits** or **Finance** > **Payouts**, is now displayed as read-only. This ensures the rate used for converting deposit or payout amounts into the final currency can’t be modified. * Clients in the B2CORE UI can now archive demo accounts without requests that require admin approval in the Back Office. * The country and country flag displayed in the phone number field of the registration form in the B2CORE UI are now automatically identified based on the client’s IP address. This streamlines the registration process by eliminating the need for clients to manually search for their country in the dropdown. * The **Switch** option has been added to account details in the B2CORE UI, enabling clients to quickly switch between their trading accounts on the selected platform without the need to go back to the accounts list and search for the desired account. #### Deprecated functionality [#deprecated-functionality-6] * Integration with **Acrobat Adobe Sign** has been deprecated and is no longer supported. * The **Event calendar** has been discontinued and isn’t available anymore. *** ### October, 2024 [#october-2024] #### New features [#new-features-11] ##### New PS integrations [#new-ps-integrations-7] With this release, a new payment system, **paypay89**, has been integrated, with support for deposits and withdrawals. Supported currencies include THB, IDR, and VND, with settlements conducted in USDT. ##### Introducing bonuses on cTrader [#introducing-bonuses-on-ctrader] We’re excited to announce the support for bonuses on **cTrader**. With this update, you can now automatically credit bonuses to clients upon deposits, configure bonus presets, and create temporary bonus programs for **cTrader**, similar to the functionality available for **MT4/5**. ##### Integration of RudderStack to enhance analytics [#integration-of-rudderstack-to-enhance-analytics] A new integration with the **RudderStack** platform has been introduced to enhance analytics capabilities. You can configure the connection to **RudderStack** in the **External connections** section of the Back Office. The platform collects data on new client registrations and helps evaluate marketing companies aimed at client acquisition. The collected data can then be sent to one of the [data analysis tools](https://www.rudderstack.com/integration/?type=Destination) like Amplitude, Google Analytics, or others. ##### Mobile app download settings [#mobile-app-download-settings] In **System** > **Settings**, the **Mobile** section now includes options to configure buttons for downloading your branded mobile apps for both iOS and Android. These buttons will be displayed in the B2CORE UI along with the download instructions (for details, refer to [System > Settings](../back-office-guide/system/settings#mobile)). #### Improvements [#improvements-11] * For deposit and withdrawal methods that use **KoraPay** as a payment provider, a new configuration option, **Merchant bears costs**, has been added. This option can be set to **Yes** or **No** and determines whether the commissions charged by the provider are added to the deposit or withdrawal amount specified by the client, or deducted from it. * The process of assigning new clients to managers has been significantly updated. New clients are now assigned to the default manager first, considering country restrictions. If the default manager can’t be assigned due to these restrictions or if no default manager is set, clients will be distributed sequentially among existing managers, without relying on their priority indexes (for details, refer to [Clients > Managers](../back-office-guide/clients/managers)). * You can now easily open the B2CORE UI **Sign In** page from the Back Office. The **Open personal area** link has been added to the top bar, giving you fast access to the B2CORE UI linked to your Back Office. * It’s now prohibited to configure **cTrader** products for the creation of cent accounts, as cent accounts aren’t supported on the cTrader platform. If attempted, an error message will be displayed. * In **cTrader** products the **Mail** option is now always set to **Don’t send** and can’t be changed, indicating that credentials won’t be sent to clients when creating cTrader accounts through B2CORE. This is due to all cTrader accounts being tied to a single cTrader ID, with one password for that ID. * Banners are now customizable for display to clients in selected countries and with designated verification levels (for details, refer to [How to restrict banner display by country and verification level](../how-to-articles/manage-advertising-options/how-to-create-a-banner#how-to-restrict-banner-display-by-country-and-verification-level)). * In bonus presets, the **Ignored symbol groups** field can now be left empty if needed. * The bonus option previously named **Burn if balance \< 0** has been renamed to **Burn if Equity \< Credit** to more accurately reflect its functionality. * When creating **MetaTrader 5** accounts through B2CORE, clients' first and last names are now correctly saved in separate fields on the MT5 platform, rather than being combined into a single field. * In the Back Office, you can now open and reject pending client requests related to trading accounts that are no longer accessible due to being archived or deleted. * Verification levels created on the **Verification > Levels** page can no longer be removed if they are assigned to active clients. Attempting to remove these levels will trigger an error message. * Verification level descriptions, if specified in the Back Office, are now displayed in the new B2CORE UI, allowing users to easily understand the actions and benefits associated with each level. * The status of verification requests approved in **SumSub** is now accurately displayed in the Back Office. Previously, statuses were updated only after opening these requests. #### Deprecated functionality [#deprecated-functionality-7] * The **B2BINPAY** section where you could view client wallets and withdrawals has been deprecated in the Back Office. However, deposit and withdrawal methods via **B2BINPAY** can still be configured and used. *** ### July, 2024 [#july-2024] #### New features [#new-features-12] ##### New WEBAPI 2.0 connections for MT4 and MT5 platforms [#new-webapi-20-connections-for-mt4-and-mt5-platforms] Connections to MT4 and MT5 are now established using WEBAPI 2.0. When your existing connections are migrated to WEBAPI, platform connection settings for MT4 and MT5 will be found in the details of the respective platforms under **Products** > **Platforms**, instead of **System** > **External connections** (for details, refer to **MetaTrader 4/5** in [Platforms](../back-office-guide/products/platforms)). As before, live and demo accounts require separate platforms. Therefore, two distinct platforms (for each MT4 and MT5) must be configured for live and demo accounts in **Product** > **Platforms**. ##### Enhanced exchanges [#enhanced-exchanges] Exchanges in specific currency pairs initiated by clients in the B2CORE UI can now be configured to require admin approval. To enable requests of the **Exchange** type for specific pairs, navigate to **Currencies** > **Currency pairs** in the Back Office and set the **Exchange request creation** option to **Yes** for the relevant pairs. After the admin approval, such exchanges are executed using the rates specified in the approved requests. For details, refer to [How to enable requests for exchanges in specific currency pairs](../how-to-articles/manage-currencies/how-to-enable-requests-for-exchanges-in-specific-currency-pairs) and [How to update rates in exchange requests](../how-to-articles/manage-currencies/how-to-update-rates-in-exchange-requests). ##### PS integrations [#ps-integrations] After rebranding, the **Volet** payment provider, formerly known as **Advcash**, remains available for deposits and withdrawals in B2CORE. #### Improvements [#improvements-12] * For enhanced security when signing in to the Back Office, the only supported method for 2FA is through time-based one-time passwords (TOTP), such as those generated by Google Authenticator. 2FA using email codes has been discontinued. Enable TOTP 2FA by clicking your email address in the top bar and selecting the TOTP option. * For address verification through ShuftiPro, you can now use the **Standard Address** or **Enhanced Address** verification plan. Both ShuftiPro plans are now supported for comprehensive address verification. * When exporting data from the **Clients** > **General** page, you can now include the **Tags** and **Nickname** columns in the export if they are selected in the **Column visibility** option and displayed on the page. * When configuring a connection to **CentroID** on the **System** > **External connections** page, the connection is now checked for both connectivity and credentials upon clicking the **Test connection** button. * When creating cTrader accounts via B2CORE, the country specified in the client’s profile is now automatically added to the account settings on the cTrader platform. * For **Sticpay** payments, transaction IDs are now included in the **Invoice** column in **Finance** > **Deposits** and **Finance** > **Withdrawals**. This enhancement enables you to easily match Sticpay transactions listed in the Back Office with those on the payment provider’s side. * The icon for **Praxis** is now visible in the B2CORE UI, provided that the icon name is specified in the respective deposit method configuration in the Back Office. *** ### June, 2024 [#june-2024] #### New features [#new-features-13] ##### Support for a new trading platform [#support-for-a-new-trading-platform] With this release, the suite of integrated platforms in B2CORE has expanded to include **TradeLocker**. It’s now possible to open demo and live TradeLocker accounts via the Back Office and the B2CORE UI, make transfers, including transfers between accounts opened on other trading platforms, and view TradeLocker account statistics such as Balance, Equity, Credit, Leverage, and Free funds. ##### Zendesk integration [#zendesk-integration] The **Zendesk** customer support platform has been integrated with B2CORE, offering ticketing, live chat, and AI tools for better customer engagement. For submitting and managing tickets, clients will be redirected from the B2CORE UI to the Zendesk interface. ##### Standard address verification with ShuftiPro [#standard-address-verification-with-shuftipro] Address verification is now available via the **ShuftiPro** KYC provider. You can now request clients to verify their addresses and any other locations such as cities or countries using the following document types: `rent_agreement`, `bank_letter_receipt`, `employer_letter`, and `utility_bill`. ##### Enhanced Savings module [#enhanced-savings-module] The **Savings** module has been enhanced to support more settings in your savings programs, including the use of `Fixed` and `Flexible` strategies. Savings programs enable clients to invest their funds to earn interest, allowing them to passively grow their crypto assets, similar to traditional bank savings accounts. ##### Integration with Notabene [#integration-with-notabene] Integration with **Notabene**, a significant addition to the **B2BINPAY** payment provider, has been implemented. This integration empowers the provider with compliance capabilities for the crypto **Travel Rule**, ensuring enhanced security and regulatory adherence (refer to [How to integrate B2BINPAY](../how-to-articles/manage-payment-methods/how-to-integrate-b2binpay)). #### New B2CORE UI updates [#new-b2core-ui-updates] * The **Bonuses** page has become available in the new B2CORE UI. Clients can now view all bonus programs on the same page and filter them to display only the programs in which they can participate. The cards showing bonus program details have been redesigned to clearly indicate the conditions that must be met to receive bonuses, such as the required volume of traded lots or the number of days until the end of each program. * Enhanced trading account details now offer clients more comprehensive information and statistics. For example, clients can now scale the **Equity** chart by different time periods and view the overall account equity for all time. Additionally, on the **Deals History** tab, clients can switch between pending orders and open positions, and filter them by date and side. * A new widget, **Favourite trading accounts**, has become available. This widget displays MT4 and MT5 trading accounts marked as favorites by clients, enabling quick switching between platforms and account types (live and demo) to view the necessary accounts and their balances. * The deposit and withdrawal processes have been streamlined to offer a more intuitive experience. Among the enhancements are auto-suggestions in dropdowns for selecting options, elimination of unnecessary grouping, and improved display of QR codes. * It has become possible to display banners on any page of the B2CORE UI, such as Dashboard, Wallets, Deposit, Withdrawals, or others by configuring banner settings on the **Promotion** > **Banners** page in the Back Office. #### Improvements [#improvements-13] * It has become possible to select the **Margin calculation type** such as **Net**, **Sum**, or **Max** for cTrader accounts. This option has been added to the settings of cTrader products on the **Products** > **Products** page. * It has become possible to set the default manager on the **Clients** > **Managers** page. When meeting the country restrictions, the default manager is automatically assigned to all new clients, eliminating the need for manual assignments. * The **Administrators** group on the **System** > **Users** > **Groups** page can no longer be removed and its permissions can’t be modified. Users included in this group are now granted full permissions. If you need to restrict permissions for specific Back Office users, create a separate user group and assign to it only necessary permissions. * On the **System** > **Users** > **Users** page, it’s now possible to view the date and time when a Back Office user was added and who added the user in the new **Created At** and **Creator** columns. * Two-factor authentication is now obligatory for all Back Office sign-ins. If 2FA isn’t enabled for your user profile yet, you’ll be requested to activate it before proceeding. Click your email address in the top bar, click **Enable 2FA** in the dropdown, and then select the method for delivering 2FA codes. * English is now set as the default fallback language for all the languages enabled on the **System** > **Localizations** page. This ensures a seamless user experience across different languages by using the English version when no translation or template in a specific language is available. * On the **Finance** > **Deposits** and **Finance** > **Payouts** pages, it has become possible to filter transactions by the **Account type** column. * The transactions listed on the **Finance** > **Transactions** page can now be filtered by custom periods. To apply filtering, specify the start and end dates in the filter fields under the **Date** column. * Updates to the integration of the **ChipPay** payment provider: * The **Name** field has been added. This field is pre-filled with the client’s first and last names for making deposits and withdrawals in the B2CORE UI. * The format of area codes has been updated to meet the payment provider requirements. * It has become possible to set up exchange rate adjustments in the deposit method settings for the **ChipPay** payment provider. * It has become possible to select a bank code in the deposit method settings for the **Help2Pay** payment provider. If selected, the code is used for deposits by default. If no bank code is selected, clients can choose one when making deposits in the B2CORE UI. #### Resolved issues [#resolved-issues-7] * The email notification sent to Back Office users now includes complete information without any missing details regarding the **Internal transfer request** event. * The bulk action to zero out balances has been fixed to reset the balances to zero for all wallets in a specific currency belonging to the same client. * The **Update Balances** option on the **Clients** > **Accounts** page has been fixed to accurately update balances, regardless of the upper or lower case used in client email addresses included in CSV files (for details, refer to [How to update balances](../how-to-articles/manage-finances/how-to-update-balances)). * Filtering by the **Status** column on the **Verification** > **Documents** page now functions correctly, showing only documents of the selected status. * Clicking the client ID link on the **Security** > **Blocked clients** page now accurately redirects you to the details page of the clocked client associated with that ID. *** ### March, 2024 [#march-2024] #### New features [#new-features-14] ##### New PS integrations [#new-ps-integrations-8] A new payment system, **Sqala**, has been integrated, with support for deposits and withdrawals in Brazilian reals (BRL). ##### Savings programs [#savings-programs] It has become possible to create savings programs. Your clients can subscribe to such programs and invest their idle funds to earn interest for holding the funds during a period set for each program. In this release, fixed interest rates are supported (for details, refer to [Savings](../back-office-guide/savings/)). #### Improvements [#improvements-14] * For the **BridgerPay** payment provider, the deposit process via B2CORE UI has been streamlined. Now, the required fields for depositing funds are filled in automatically with client-related data. * The configuration of the **Praxis** payment provider has been enhanced to ensure secure transaction processing. Additionally, in order to meet the diverse regulatory standards, you can now enable clients from various countries to submit different sets of required documents for making deposits via this provider in the B2CORE UI. * It’s now possible to configure the **Constructor** payment method so that clients can attach necessary documents when making deposits or withdrawals using this method in the B2CORE UI (for details, refer to [How to add the Constructor deposit or withdrawal method](../how-to-articles/manage-payment-methods/how-to-add-the-constructor-deposit-or-withdrawal-method)). * The following payment providers have been restored and can now be used: * **WireCustom** — for deposits and withdrawals * **1-2-Pay** — for deposits and withdrawals * It’s now forbidden to remove connections to email service providers on the **Mailing** > **Marketing** > **Configurations** page if these connections are used in email templates created on the **Mailing** > **Marketing** > **Email templates** page. * For convenient filtering, all possible [transaction statuses](../back-office-guide/references/transaction-statuses) have been added to the **Status** dropdown on the pages within the **Finance** menu in the Back Office. #### New B2CORE UI updates [#new-b2core-ui-updates-1] * In the new B2CORE UI, the **Summary** section has been added for withdrawals. This section provides detailed information about a withdrawal, including the amount of applied commissions, exchange rates, and the final amount that will be withdrawn from the system. * If in the Back Office, a product is configured with the **Minimum deposit** option, the option is no longer ignored when creating accounts based on that product in the new B2CORE UI. * On the **Deposit**, **Withdraw**, and **Transfer** pages in the new B2CORE UI, when selecting accounts in dropdowns, the available accounts are now grouped based on their types, such as Fiat, Coins, MT4, MT5, and others. * The **Last updated** fields in the new B2CORE UI now use the full date format: `YYYY.MM.DD HH:MM`. #### Resolved issues [#resolved-issues-8] * The **Update balances** option on the **Clients** > **Accounts** page has been fixed to process a large number of email addresses listed in a CSV file used for updating client balances. * The issue causing slow loading of popup forms for creating deposits and bonuses in the Back Office has been resolved, and they now load faster. * On the **Deposit** page in the old and new B2CORE UIs, the indicative deposit amount is now correctly calculated in the case when the amount was initially entered in the **Payment amount** field. * The ability to attach TXT files to HelpDesk tickets has been restored. #### Deprecated functionality [#deprecated-functionality-8] * Integration with **Google Analytics** has been deprecated in B2CORE. * The **Back Office API** has been deprecated. For any inquiries or assistance, please contact your account manager. ### December, 2023 [#december-2023] #### New features [#new-features-15] ##### New B2CORE UI [#new-b2core-ui-1] We are happy to introduce a new redesigned look of B2CORE UI. It has been created to streamline complex user scenarios, as well as keep the UI relevant and up-to-date with modern design trends. Onboarding instructions are displayed on the new UI pages to help you get familiar with the main changes and enhanced scenarios. #### Switch to the new UI [#switch-to-the-new-ui] You can switch to the new UI on the **Sign In** page or after you have signed in to the B2CORE UI by clicking **Go to New Interface**. To switch to the previous user interface version, click your profile icon in the top right and select **Switch to Previous Version** in the profile menu. #### Main UI changes [#main-ui-changes] **User profile** You can now navigate to your user profile by clicking your profile icon in the top right. In the expanded profile menu, select options to view and update your personal information, verification level, the security status of your profile, and saved withdrawal presets. **Dashboard** Widgets that you can add to your **Dashboard** are now listed in a new left bar that is opened after clicking the **Add Widget** button. Click widgets to immediately add them to the **Dashboard**. You can add several widgets at once. **Wallets** Wallet details are now displayed in a new right bar that is opened after clicking a selected wallet. From the bar, you can make balance operations, view the recent wallet transactions, or navigate to your full transaction history. **Deposits and withdrawals** The procedures for making deposits and withdrawals have been streamlined, enabling you to select a wallet, then select if you want to make a deposit or withdrawal in a crypto- or fiat currency, and finally select one of the payment methods supported for a selected currency. After that, you get a deposit or withdrawal address or fill in the required fields to complete your transaction. **Internal withdrawals** On the **Funds** > **Withdraw** page, you can now select the **Internal User** option to withdraw funds from your wallet to the wallet of another user registered in the same B2CORE system. **Withdrawal presets** When making withdrawals on the **Funds** > **Withdraw** page, you can save withdrawal details as presets. A list of saved presets is now available upon clicking your profile icon and selecting **Withdrawal Presets** in the profile menu. Use saved presets to make quick withdrawals and eliminate the need to fill in the same information every time. **Transaction history** View the history of all your transactions on the same page by switching between the **Deposits**, **Withdrawals**, **Exchanges**, **Transfers**, and **Internal Withdraw** tabs. Details of a specific transaction can now be viewed by expanding the transaction row. **Platforms** The cards showing the essential information about your accounts opened on various platforms have a new look and provide all the familiar functionality. The enhanced form for adding new accounts makes it convenient to switch between demo and live options, select the account currency, and apply other settings. **HelpDesk** The **HelpDesk** interface has been updated. It has become more convenient to use the support chart, as well as work with tickets and track their statuses. Working hours of support teams in specific languages are now displayed in a popup. **Mobile app download** If the mobile app is supported, it can now be downloaded to your mobile device by clicking the **Download app** button in the top bar and scanning the displayed QR code. #### Improvements [#improvements-15] * A new **Temporary bonus name** column has been added to the **Bonus distribution** page in the Back Office, enabling you to indicate temporary bonus programs that are the most popular among clients. * Kyrgyz language is now supported for localization. If needed, the language can be enabled on the **System** > **Localizations** page in the Back Office. #### Resolved issues [#resolved-issues-9] * Information displayed on the **Advanced** tab in client details is now prevented from being accidentally reset to the same values for all registered clients. * The list of banks supported by **PaymentAsia** has been updated so that withdrawals made via the provider are processed correctly. *** ### November, 2023 [#november-2023] #### New features [#new-features-16] ##### Centroid integration [#centroid-integration] The **Centroid** platform providing connectivity to various trading platforms and liquidity sources has been integrated. With this release, it has become possible to create accounts in B2CORE by adding the accounts that have already been opened on Centroid, view information about the added accounts in the Back Office and B2CORE UI, and make balance operations, such as deposits, withdrawals, and transfers. ##### New document types for Shufti Pro [#new-document-types-for-shufti-pro] Along with `passport` and `selfie`, the `id_card` and `driving_license` document types supported by **ShuftiPro** can now be used for configuring KYC procedures in the Back Office. #### Improvements [#improvements-16] * When making deposits and withdrawals using **ChipPay** in the B2CORE UI, the **Phone Number**, **Name**, and **Region Country** fields are now automatically filled in with information from a client profile. * The possibility to initiate several identical deposit transactions in a row in the B2CORE UI has been eliminated. * It has become possible to archive trading accounts with non-zero balances in the Back Office, eliminating the need to transfer funds from the accounts before archiving them. In this case, the existing balance is kept on an archived account. If the account is unarchived, its balance will become available again to the account owner. * Back Office user groups displayed on the **System** > **Users** > **Groups** page can now be removed only if no users are included in those groups. * It’s no longer possible to disable the default localization option on the **System** > **Localizations** page in the Back Office. * The client type identifier is now sent in requests to deposit funds using **Praxis** to ensure that such transactions are properly processed by the payment provider. #### Deprecated functionality [#deprecated-functionality-9] * The option to **Allow users to share the same accounts** has been deprecated from a list of platform settings that can be configured on the **Products** > **Platforms** page. * Support for the KYC provider **Sapuma** has been deprecated in B2CORE. #### Resolved issues [#resolved-issues-10] * When enabling 2FA for Back Office users, the **Enable 2FA** popup can no longer be closed by an accidental click outside the popup. * The **Max Demo Trading Accounts** and **Max Live Trading Accounts** options are no longer set to 0 (zeros) after updating a list of rights for newly registered clients on the **Settings** tab in the Back Office. * Clients can now complete their deposits via **PayPal** by confirming deposit information on the payment provider page instead of receiving an error message and being redirected back to the B2CORE UI. * When making withdrawals in MYR using **PaymentAsi** in the B2CORE UI, instead of the empty **Bank Name** dropdown, a list of available bank names for making withdrawals is now displayed. * The issue due to which the “Receiver Repeat Bank Account” error occurred when approving client requests to withdraw funds using **ChillPay** has been eliminated. * Withdrawals made in the Back Office using the **manual** provider are no longer stuck in the **Pending** status. *** ### October, 2023 [#october-2023] #### New features [#new-features-17] ##### 2FA for Back Office users [#2fa-for-back-office-users] For Back Office users, it has become possible to enable 2FA by using time-based one-time passwords (TOTP) from 2FA apps, such as Google Authenticator, or by using verification codes sent to their email addresses. ##### HTML templates are now rendered before saving [#html-templates-are-now-rendered-before-saving] HTML email templates marked as enabled can now be saved in the Back Office only after they are successfully rendered and displayed in the preview. #### Improvements [#improvements-17] * The **Platform Group** field located in the details of MetaTrader products can no longer be edited after client accounts have already been created based on those products. * If the only email service provider is configured for sending marketing emails (**Mailing** > **Marketing** > **Configuration**) or system emails (**Mailing** > **System** > **Providers**), the provider can’t be disabled or removed. * It has been shorten the period during which a new withdrawal or transfer request can’t be created by a client in the B2CORE UI if the previous one is still pending. * The email template for sending codes required to confirm withdrawals made via B2BINPAY has been added to the Back Office, enabling users to receive confirmation codes for withdrawal transactions created on the **B2BINPAY** > **Withdrawals** page. * It’s now possible to attach large files when adding comments to the **Events log** in the Back Office. * In the list of sent marketing emails, **Instant** is now displayed in the **Sent At** column for emails that were immediately sent after they were set up and saved in the Back Office. #### Deprecated functionality [#deprecated-functionality-10] * The **B2BInPay v1** rates provider and **Anfitraud** module have been deprecated. #### Resolved issues [#resolved-issues-11] * The correct bank codes are now passed when clients make deposits in the B2CORE UI using **ChillPay**. In addition, all transaction statuses returned by **ChillPay** are now processed, ensuring that appropriate deposit statuses are displayed in the Back Office. * When making deposits in the B2CORE UI using **Mercuryo**, clients are now redirected to the correct payment provider page to complete their deposits. * The correct list of banks that can be selected to deposit funds in IDR using the **Help2Pay QR Payment** method is now displayed to clients in the B2CORE UI. * Successful deposits made using **NicePay** and **Perfect Money** are now correctly processed and no longer remain in the **Pending** status in the Back Office. * The invalid signature error that occurred after clients were redirected from the B2CORE UI to the **EeziePay** payment page has been fixed, enabling clients to complete their deposits. * Deposits in VND and CNY that were previously unavailable using **ChipPay** are now supported. * Transaction IDs (TxID ) generated for withdrawals made using B2BINPAY that were previously missing in withdrawal details in the Back Office are now displayed there. * Verification via **Shufti Pro** is now properly processed and causes no errors in the Back Office. * The **Create from TR denied** permission now works properly when enabled for eWallets and B2TRADER products in the Back Office. The permission forbids clients to add currencies and open B2TRADER accounts in the B2CORE UI. * The enabled reCapture no longer prevents clients from proceeding with the registration procedure in the B2CORE UI. * **MatchTrader** demo accounts are now opened with the start balance specified in the corresponding product configured in the Back Office. * The issue that made it impossible to load data on the **MT Accounts** tab in the client details has been eliminated. * The load of data on client accounts and balances in the Back Office has been accelerated. * The bulk action to make deposits to client accounts in the Back Office has been fixed to accept a product and a specific product currency in which deposits must be made. * Email notifications sent when the **TransferSuccessfulOperation** event occurs now include transfer details instead of displaying empty data. * The countries specified by clients during registration in the B2CORE UI are no longer removed from client profiles in the Back Office after any other profile data is edited by admins. * The clients are no longer prohibited from passing a verification procedure in the B2CORE UI if their current verification levels enable them to do this. * The free margin previously missed in the details of PrimeXM accounts in the Back Office is now displayed there. * In the Back Office, it’s now prohibited to disable product groups if they are connected to any product in order to forbid creating accounts without groups. * The **Country restrictions** option displayed in the dropdown upon clicking the **Actions** button on the **Edit product** page is no longer duplicated. * The **Export** option now exports data about all products created on the **Products** > **Products** page instead of exporting only the data about products listed on the current page. * The comments added to operations of allocating bonuses to client MetaTrader accounts in the Back Office are now added to MetaTrader as well. * If more than 50 currencies are added to a product, the list of added currencies isn’t now truncated when viewing product details and displays all the added currencies. *** ### August 9, 2023 [#august-9-2023] #### New features [#new-features-18] ##### PS integrations [#ps-integrations-1] * It has become possible to make withdrawals using the **FairPay** payment provider. Deposits with **FairPay** are available only in USD. * It has become possible to make withdrawals in THB using the **ChillPay** payment provider. * When making deposits using **ChillPay**, it has become possible to select one of the supported deposit methods: **Internet banking**, **Credit card**, **QR payment**, or **Bill payment**. ##### Validation of payment provider connections [#validation-of-payment-provider-connections] For the following methods, it has become possible to check payment provider settings by clicking the **Check connection** button added to the **Deposit method** and **Payout method** pages: * the **BridgerPay** deposit method * the **CHIP** deposit method * the **B2BINPAY** deposit and payout methods #### Improvements [#improvements-18] * It is now prohibited to make a withdrawal, transfer, internal transfer, or exchange operation if there is another such operation that hasn’t been completed yet. * When users change passwords for signing in to the Back Office, new passwords are now validated to meet the specified complexity requirements. * When changing the date of birth in client profiles in the B2CORE UI, the birth date for clients under the age of 18 can’t be entered. #### Resolved issues [#resolved-issues-12] * For the **Praxis** payment provider, redirection from the B2CORE UI to the payment page and back now works properly when making deposits. * The error that made it impossible to approve client requests to withdraw funds using the **Help2Pay** payment provider has been eliminated. * Enabling the **Skrill** payout method in the Back Office no longer causes errors on the **Funds** > **Withdraw** page of the B2CORE UI. * If the auto-withdrawal option is enabled in the Back Office, a withdrawal request created by a client in the B2CORE UI is now approved automatically after the requested amount is put on hold and the withdrawal request status is changed from **New** to **Pending**. *** ### May 29, 2023 [#may-29-2023] #### New features [#new-features-19] ##### Cashback rewards [#cashback-rewards] It has become possible to set up cashback reward programs for clients who trade on MT4 and MT5 upon navigating to **Cashback** > **MetaTrader Volume** in the Back Office. For each traded lot, clients can earn cashback rewards that are calculated based on the settings configured for each platform. #### Improvements [#improvements-19] * It is now possible to make deposits in GBP using **BridgerPay**. #### Resolved issues [#resolved-issues-13] * The HTML template used to notify Back Office users by email about successful deposits now includes all the essential information that was previously missing. * MT account balances can no longer become negative in the case when clients attempt to make repeated transfers from their accounts while the platform connection is being restored after it was lost. * Alphanumeric values are now supported for the **Zip code** field that must be specified when making deposits using **BridgerPay**. * In the B2CORE UI, the withdrawal amounts that are automatically calculated after clicking the **25%**, **50%**, **75%**, or **100%** button are now displayed with decimal separators properly placed. The decimal separators were missing if the Russian language was selected in the B2CORE UI. *** ### April 18, 2023 [#april-18-2023] #### Resolved issues [#resolved-issues-14] * Fixed an issue due to which event notifications failed to be delivered through Slack and email if the recipients list included the Back Office users whose profiles were removed. * Fixed an issue due to which the Back Office could hang when attempting to view the **Events Log** details. * Fixed an issue that prevented loading of the data on the **Finance** > **Payout** page. * Fixed issues due to which the successful deposits made using the **PerfectMoney** and **FairPay** payment providers could be assigned the **Pending** status in the Back Office. * Fixed an issue due to which the credentials of the payment provider assigned to the **WireDocument** method were displayed to clients when making deposits in the B2CORE UI. ### April 4, 2023 [#april-4-2023] #### New features [#new-features-20] ##### Detailed cTrader data available [#detailed-ctrader-data-available] The balance and equity values are now displayed for clients’ cTrader accounts in the Back Office and B2CORE UI, as well as the data about deals, orders and open positions. ##### Bulk deposits to client accounts [#bulk-deposits-to-client-accounts] It has become possible to update account balances for multiple clients at once by using the **Update balances** button on the **Client** > **Accounts** page. After clicking the button, upload a CSV file containing a list of client emails, account IDs and amounts that you want to deposit to each account. #### Improvements [#improvements-20] * The **email**, **password** and **password\_confirm** fields are now displayed on the **Custom fields** tab when configuring the Registration wizard in the Back Office. You can change the order in which they are displayed in the registration form in the B2CORE UI. * To eliminate B2TRADER connection issues caused by the incorrectly specified value in the **Callback URL** field, this field has been removed from the configuration settings of the B2TRADER platform. The URL for sending callback messages is now set during B2CORE setups. * Tooltips are now displayed when positioning a cursor over the **Process**, **Cancel** and **Change status** buttons that can be used to manually process the transactions with the **Partial** status on the **Finance** > **Transactions** page. #### Resolved issues [#resolved-issues-15] * Fixed an issue due to which, after editing the data on the Back Office user details page, an email notification based on the **AdminUserCreated** template was sent. * Fixed an issue due to which newly registered clients couldn’t pass a verification procedure after clicking the **Next step** button on the **Verification** page in the B2CORE UI. * Fixed an issue due to which an error occurred when uploading the documents required for verification in the B2CORE UI. * Fixed an issue due to which the status of a closed help desk ticket could be updated in the B2CORE UI only after reloading the page. *** ### March 21, 2023 [#march-21-2023] #### Improvements [#improvements-21] * The **OTC 365** payment provider has changed its name to **ChipPay**; B2CORE continues to support deposits and withdrawals made with the provider. * The options for managing event notifications have been updated as follows: * The list of events about which Back Office users can be notified has been expanded by adding new [event types](../back-office-guide/references/event-types-for-triggering-event-notifications-for-back-office-users). To set up event notifications, navigate to **System** > **Event notifications**. * It has become possible to send event notifications to multiple Back Office users. * The available channels for sending event notifications now include Slack, Telegram, email and SMS. For Slack and Telegram, it has become possible to choose whether to send notifications to public channels and groups or as personal messages. * For each Back Office user, it has become possible to specify the identifiers of their personal Slack and Telegram chats for receiving event notifications. The identifiers are specified on the user details page upon navigating to **System** > **Users**. * On the **System** > **Logs** page, you can now track actions made by Back Office users. * The **Internal comment** column has been added to the **Finance** > **Deposits** and **Finance** > **Payout** pages. #### Resolved issues [#resolved-issues-16] * Fixed an issue due to which country restrictions didn’t apply to the document types defined for a verification procedure. * Fixed an issue due to which no data could be displayed in the **TradingView** widget after switching between workspaces in the Trading UI. * Fixed an issue due to which the **Resolved** status assigned to a ticket in an external help desk system appeared as **Duplicate** in the B2CORE UI. * Fixed an issue due to which the error “Signature is invalid” occurred when depositing funds using the **Mercuryo** payment provider. *** ### February 28, 2023 [#february-28-2023] #### New features [#new-features-21] ##### New PS integrations [#new-ps-integrations-9] A new payment system, **Nicepay**, has been integrated, with support for deposit operations. #### Improvements [#improvements-22] * It has become possible to configure separate verification flows for different types of clients. * It has become possible to configure the settings of the **Simple Exchange** widget by navigating to **Promotion** > **Dashboard** in the Back Office. * The following fields for configuring mobile banners are now optional: **Title**, **Subtitle**, **Button Title** and **Preview Text**. * The invalid data contained in a CSV or TSV file is now ignored when importing client-related data on the **System** > **Import data** page. Such import operations are assigned the **Success with errors** status. * Fixed table headers and filter fields are now used for tables displayed on various pages of the Back Office. * The internal Back Office library has been updated and now includes updated form fields, pagination components and others. #### Resolved issues [#resolved-issues-17] * Fixed an issue due to which it was impossible to automatically upload predefined options for custom fields added for the **Constructor** method by retrieving them from a specified API resource if the API response was not linear. * Fixed an issue due to which temporary bonuses didn’t expire after reaching the specified lifetime value. * Fixed an issue due to which it could have been impossible to close the documents opened for preview in the **Verified documents** section in the B2CORE UI. *** ### February 14, 2023 [#february-14-2023] #### Improvements [#improvements-23] * When adding custom fields for deposit and withdrawal methods using the **Constructor** payment provider, it has become possible to upload a list of field options by connecting to a client’s API and retrieving the required values instead of specifying them manually. * It has become possible to make internal transfers from the wallets of the **partner** type to the wallets of the **personal** type and trading accounts. * When creating client accreditation tests, it has become possible to specify test descriptions in the **Details** field. The test descriptions are displayed under test titles in the B2CORE UI. * It has become possible to filter client requests by the **Dealing approved** and **Compliance approved** columns on the **Clients** > **Requests** page in the Back Office. * On the **Services** > **Clients** page, it has become possible to filter data by the dynamic columns. * For exchange transactions made by the admin user in the Back Office, the Exchanged By column now displays the name or email address of the admin who made a transaction. #### Resolved issues [#resolved-issues-18] * Fixed an issue due to which the **Hold Amount** column wasn’t exported to an XLSX or CSV file from the **Clients** > **Accounts** page of the Back Office. *** ### January 31, 2023 [#january-31-2023] #### New features [#new-features-22] ##### Export and import options for Back Office user groups [#export-and-import-options-for-back-office-user-groups] It has become possible to export and import the data about Back Office user groups on the **System** > **Users** > **Groups** page. #### Improvements [#improvements-24] * The total deposit, total net deposit and total withdrawal amounts in USD are now displayed for each client on the **Accounts** tab in client details. Additionally, the total deposits and total withdrawals by all clients are displayed on the **Finance** > **Deposits** and **Finance** > **Payouts** pages. * The **Select**, **Select All** and **Edit selected clients** buttons have been added to the **Clients** > **General** page. Use them to collectively assign client tags and change client profile statuses. * When assigning tags to clients, it has become possible to replace the existing tags with the new ones by enabling the **Overwrite current values** option. * The email template used for notifications about new comments in the Event Log now includes the name of an admin user who has been tagged in a comment along with the admin email address. * When configuring deposit and withdrawal methods in the Back Office, a list of available currencies is now sorted alphabetically. #### Resolved issues [#resolved-issues-19] * Fixed an issue due to which an incorrect localization option could have been applied to emails notifying clients about newly created trading accounts. *** ### January 19, 2023 [#january-19-2023] #### New features [#new-features-23] ##### New PS integrations [#new-ps-integrations-10] * The **FairPay** payment provider has been integrated, with support for deposit operations. * The option to make withdrawals in fiat currencies using the **Mercuryo** payment provider has become available. ##### Match-Trader integration [#match-trader-integration] A new all-in-one FX trading platform **Match-Trader** has been integrated, providing the capability for managing client trading accounts and finances via the Back Office and B2CORE UI. ##### cTrader integration with IB [#ctrader-integration-with-ib] cTrader has been integrated with Introducing Brokers (IB), allowing you to configure and enable IB programs on this platform. ##### Feedback for HelpDesk services [#feedback-for-helpdesk-services] The system for collecting feedback has been integrated, enabling your clients to assess the quality of your HelpDesk service and leave their comments about resolved tickets. #### Improvements [#improvements-25] * It has become possible to import data related to IB programs (such as IB Email, Client Email and IB Type ID) by using a new import option named `import-ibs`, available upon navigating to **System** > **Import Data** in the Back Office. * When configuring verification levels in the Back Office, it has become possible to specify level descriptions separately for the B2CORE UI (in the HTML format) and for the mobile app (in the JSON format). * Specifying banner titles for desktop and mobile app versions has become optional. * When manually processing transactions with the **Partial** status, listed on the **Finance** > **Transactions** page, the modal windows containing explanations of further user actions are now displayed after clicking the **Push**, **Cancel** or **Change status** buttons. * To allow various departments to add specific parameters for configuring paid services, it has become possible to set up access to service parameters for different groups of Back Office users by navigating to a new **Services** > **Categories** page. * For temporary bonus programs, the **Traded lots** field is now displayed in the B2CORE UI, showing the volume traded by a client and matching the requirements of a bonus program. * It has become possible to set up delivery of email notifications to clients each time they sign in to the B2CORE UI. Such notifications contain the following sign-in details: date and time, IP address, device type, browser and location. #### Resolved issues [#resolved-issues-20] * Fixed an issue due to which it was impossible to upload a profile picture via the B2CORE UI if the uploaded image needed to be cropped to match the required size of 200x200 pixels. * Fixed an issue due to which admins who were permitted to view only the clients with certain tags couldn’t view the data on the **Bonuses** > **Bonus Distribution** page and create bonuses. * Fixed an issue due to which an error occurred after passing a client accreditation test if it included a close-ended question for which no correct answer options were specified. ### December 20, 2022 [#december-20-2022] #### Improvements [#improvements-26] * It has become possible to limit session time for Back Office users by specifying the session duration using the **User-admin Session** option added to the **System** > **Settings** page. After reaching a specified time limit, users are automatically signed out of the Back Office. * The **Device Management** section available on the **Profile** > **Security** page has been updated to log data about devices, IP addresses and locations from which clients sign in the B2CORE UI. * A new **IB** > **Reports** > **Trades** page has been added to IB programs in the B2CORE UI. #### Resolved issues [#resolved-issues-21] * Fixed an issue due to which it was sometimes impossible to import to the Back Office the data about client dates of birth. * Fixed an issue due to which an error occurred when uploading client profile pictures via the Back Office. *** ### December 6, 2022 [#december-6-2022] #### Improvements [#improvements-27] * The option to specify ranges of MT account numbers that can be assigned to newly created client accounts is now available to MT platforms switched to the Frontman v4 connection. * To help you identify MT groups, the name and identifier of a product to which a selected MT group belongs are now displayed when moving MT accounts between the groups. * To prevent incorrect interpretation of decimal amounts, it is no longer possible to change a character specified as a decimal separator on the **System** > **Localizations** page. *** ### November 24, 2022 [#november-24-2022] #### New features [#new-features-24] ##### Data import to the Back Office [#data-import-to-the-back-office] It has become possible to import data about clients and their accounts that was previously exported from other third-party systems to a CSV or TSV file. For this purpose, a new **System** > **Import Data** menu item has been added to the Back Office. #### Improvements [#improvements-28] * On the **Clients** > **General** page, it has become possible to assign tags to multiple clients or change their profile statuses at once. * **Profile pictures for Back Office users**: it has become possible to upload avatars to Back Office user profiles. Avatars can help you quickly identify users that add comments to the Event log. * It has become possible to confirm withdrawals that clients make in the B2CORE UI by entering 2FA codes from the **Google Authenticator** app. * A new **Exchanged By** column has been added to the **Finance** > **Exchange** page and the **Transactions** tab in the client details. The column indicates if an exchange operation was made by a client in the B2CORE UI or by an admin in the Back Office. * On the **Finance** > **Deposit wallets** page, it has become possible to select filtering values for the **Method** and **Currencies** columns. * The template used for Slack notifications about withdrawal requests has been updated to include the following fields and links to the corresponding Back Office pages: **Project**, **Client name**, **Client email** and **Task** (containing a link to a withdrawal request that must be approved or rejected). * A new set of permissions for managing parameter presets (which can be configured on the **Clients** > **Services** > **Saved presets** page) has been added to the **Client’s services** permission category: * View presets * Create presets * Update presets * Delete presets * For deposit and payout methods using the payment provider titled **Constructor**, it has become possible to select a field type (**text** or **Select with autocomplete**) when adding custom fields to a method. Depending on a selected field type, the added fields are displayed in the B2CORE UI as simple text fields or text fields with suggested values. ### November 8, 2022 [#november-8-2022] #### New features [#new-features-25] ##### Commission Cashback [#commission-cashback] A new **Commission Cashback** menu item has been added to the Back Office, making it possible to distribute rewards between the users who have contributed to the promotion of a specified token. The rewards are distributed as portions of commissions earned from trading the token on an exchange for a given period. #### Improvements [#improvements-29] * When configuring banners on the **Promotion** > **Banners** page, it has become possible to select an appropriate banner type: **Desktop** or **Mobile**. * On the **Event log** page, when attaching an image to a message, a user can now expand this image without opening it on a new tab. * For client requests of the **Transfer** type, the **From free funds** field has been added, displaying the amount of available funds on a client’s account. * For balance change operations, the **Operation type** names have been changed as follows: * from **Credit** to **Deposit** * from **Debit** to **Withdraw** * For the **Advanced** step of the **Registration** wizard, it has become possible to apply the `unique_id_card_number` rule to ensure that clients specify unique ID card numbers during registration. * It has become possible to check whether transactions with the **Partial** status have been executed on the MetaTrader platform by clicking the magnifying glass icon: * If a transaction was executed on a trading platform, its status in the Back Office changes to **Done**. * If a transaction is not found on a trading platform or the platform doesn’t support transaction check, you can process this transaction in the Back Office by clicking the **push**, **cancel** or **confirm** button. * The **cancel** button can now be used to cancel a transaction in the Back Office and attempt to cancel it on a trading platform if this transaction is found there. * The order in which deposit and withdrawal methods are displayed to clients in the B2CORE UI is now determined by the priority assigned to these methods in the Back Office. * When configuring menu options on the **Promotion** > **Menu** page, it has become possible to select the types of clients for which a particular menu option is available in the B2CORE UI. * The **Export** button has been added to the **Security** > **Search by IP** page, providing the capability to export filtered data to a CSV or XLSX file. * The data displayed on the **Services** tab in the client details can now be filtered by all columns. #### Resolved issues [#resolved-issues-22] * Fixed an issue due to which some clients couldn’t receive Slack notifications related to the Event log and withdrawal operations. * Fixed an issue that caused incorrect calculation of bonuses for trading accounts having the **Factory** value set to 100. *** ### October 25, 2022 [#october-25-2022] #### Improvements [#improvements-30] * It has become possible to allocate temporary bonuses only to trading accounts included in the selected MT platform groups. * It has become possible to upload 7-Zip and RAR archives to client folders using the **Upload multiple files** option on the **Files** tab in the client details. * After changing a client’s email address, the email used for the HelpDesk service now changes automatically. This enables clients to view the history of reported tickets, their statuses and message threads. * When entering a value in the **Withdrawal amount** field in the B2CORE UI, the **Source amount** field is now filled in automatically and displays a withdrawal amount in conversion to a required currency. * The answers to open-ended questions used in client tests are now saved after clicking the **Next** button and are not discarded if a client goes back to previous questions. * The banners configured for the **Referral Programs** section of the B2CORE UI are now displayed on a dashboard instead of being placed on top of the page. *** ### October 11, 2022 [#october-11-2022] #### New features [#new-features-26] ##### BitWallet supports withdrawal operations [#bitwallet-supports-withdrawal-operations] In addition to deposit operations, the **BitWallet** payment provider now supports withdrawal operations. ##### A White Label solution for cTrader [#a-white-label-solution-for-ctrader] It has become possible to configure a connection to the cTrader platform as a White Label solution by specifying the required company name in the **White label** field. #### Improvements [#improvements-31] * It has become possible to specify a lifetime for announcements to be displayed to clients in the B2CORE UI. The announcements expire on the **Due Date** specified in the announcement details and are no longer displayed to clients. * When exporting data from the Back Office to a file, it has become possible to choose the file format: XLSX or CSV. * The **Burn if balance \< 0** option has been revised to burn bonuses once equity on an MT account becomes less than the account credit (Equity \< Credit). *** ### September 27, 2022 [#september-27-2022] #### New features [#new-features-27] ##### New PS integrations [#new-ps-integrations-11] A new payment provider, **Advanced Payment Systems (APS)**, has been integrated, with support for deposit operations. ##### Password reset for master and investment accounts [#password-reset-for-master-and-investment-accounts] When clients reset passwords for their MetaTrader 4/5 accounts in the B2CORE UI, they are now required to select whether they want to reset a password for their master or investment account. #### Improvements [#improvements-32] * In order to control which images clients upload as their profile pictures in the B2CORE UI, a new request type named `Avatar` has been added. * The maximum allowed amount for internal transfer operations per day can now be set in the **Daily internal transfer** field in the verification level details. If a client wants to make an internal transfer after reaching a specified limit, a request for the internal transfer must be approved by an admin. * The **Total Balance** widget now supports conversion of the total balance on all client’s wallets to any of the currencies available in your B2CORE system. * The buttons to process, confirm or cancel transactions with the **Partial** status have been added to the **Finance** > **Transactions** page. * For demo-type products, it is now required to fill in the **Starting Amount** field. This field indicates the initial amount that is credited to demo accounts created for this product. #### Resolved issues [#resolved-issues-23] * Fixed an issue due to which it was impossible to directly navigate to a comment added on the **Even log** tab in the client details after clicking a notification displayed in the top bar. * Fixed an issue due to which the client name wasn’t displayed in the email sent after successful registration. *** ### September 13, 2022 [#september-13-2022] #### New features [#new-features-28] ##### Support for hedged and netted account types for cTrader [#support-for-hedged-and-netted-account-types-for-ctrader] A new option to specify a hedged or netted account type is now available when creating products for the cTrader platform. Based on the product settings, clients can select an account type when creating cTrader accounts in the B2CORE UI. ##### A new event type to trigger event notifications [#a-new-event-type-to-trigger-event-notifications] It has become possible to receive event notifications via Slack and email about accreditation tests passed by clients. ##### The capability to select a fixed percentage to transfer or withdraw [#the-capability-to-select-a-fixed-percentage-to-transfer-or-withdraw] In the B2CORE UI, clients can now select a fixed percentage of their account balance that they want to transfer or withdraw (the available options: 25%, 50%, 75% and 100%). #### Improvements [#improvements-33] * The process of configuring a workflow for the Registration wizard has been enhanced to allow you to quickly add the Basic Information fields and specify their settings on the **Custom fields** tab. * For close-ended questions included in client accreditation tests, it is now possible to choose if you want to add a single or multiple correct answers. * The **Internal transfer** type has been separated from the rest of the transfer operations. You can filter a list of transfer operations by the **Type** column. * On the **Finance** > **Deposit Wallets** page, the **Method** column now displays a link to the details of a deposit method used to generate a wallet address. * The **Test connection** option for the B2TRADER platform now validates the credentials specified in the **Front Office Client ID** and **Front Office Client Secret** fields in addition to the other connection settings. * The tabs displayed on the client details page have been reorganized for easier navigation. * It has become possible to select specific folders and files that you want to download from the **Files** tab displayed on the client details page. * A client phone number is now displayed in the **Personal information** section of a client profile in the B2CORE UI. * The language specified in the **Communication Language** field in a client profile is now automatically applied to the **Language Department** field when creating a ticket on the **HelpDesk** page in the B2CORE UI. * It has become possible to search submitted tickets by their **Ticket ID** on the **HelpDesk** page in the B2CORE UI. #### Resolved issues [#resolved-issues-24] * Fixed an issue due to which the description of the first selected deposit method was displayed for the other deposit methods available to a client in the B2CORE UI. * Fixed an issue due to which the default B2TRADER workspace wasn’t restored after clicking the **Reset** button if the workspace had previously been closed. *** ### August 30, 2022 [#august-30-2022] ##### Exchange and transfer operations between various platforms [#exchange-and-transfer-operations-between-various-platforms] It has become possible to exchange and transfer funds between wallets and accounts created on the B2TRADER, cTrader and MetaTrade platforms. ##### Support for Google Pay [#support-for-google-pay] You can enable Google Pay for specific payment systems to add one more option for your clients to deposit funds. ##### A new bonus expiration mechanism [#a-new-bonus-expiration-mechanism] It has become possible to configure partial bonus expiration for clients upon withdrawing funds. The new options have been added to the **Bonuses** section, which is available in **System** > **Settings** in the Back Office. #### Improvements [#improvements-34] * A new **Client Tags** menu item has been added to the **System** > **Users** section. Use this option to view a list of existing client tags and create new ones. * The following improvements related to the **Event log** have been introduced: * The **Events log** > **List** page now shows a list of comments added in the Back Office that you can view based on the assigned client tags. * It has become possible to add descriptions to the Event log categories in order to indicate the purpose of each category. * Slack notifications about new comments added on the **Event log** tab now contain the text of these comments. * In the top bar, the red counter badges are now only displayed when the number of unread notifications is not zero. * The links to download cTrader for supported operating systems have been added to the **cTrader** page in the B2CORE UI. * The **Equity** charts displayed on MT account cards and in the account details in the B2CORE UI have been synchronized to show the same data. * The **Next step** button is no longer displayed on the **Verification** page in the B2CORE UI if no KYC wizard is specified for a verification level in the Back Office. * On the **Exchange** page in the B2CORE UI, more accurate exchange results are now displayed in the **Amount To** field. #### Resolved issues [#resolved-issues-25] * Fixed an issue due to which the country allocation rules were ignored when allocating newly registered clients among managers. * Fixed an issue due to which it was impossible to withdraw funds using the manual and constructor methods unless a PS currency (in which funds are debited) was specified, which is not a requirement for these methods. * Fixed an issue due to which it was impossible to search through a list of tickets reported by a client on the **HelpDesk** page in the B2CORE UI. *** ### August 16, 2022 [#august-16-2022] #### New features [#new-features-29] ##### New KYC provider integrations [#new-kyc-provider-integrations] A new KYC provider, **Sapuma**, has been integrated, adding one more option for running an automatic KYC verification process. When using **Sapuma**, in addition to required fields, you can define a list of custom fields (such as NIK, Place of Birth, Email, First Name, Date of Birth, Phone Number, Address, City, State, Country and ZIP Code) that your clients must fill in to get verified unless these fields have been already specified in a client profile. ##### Deposit method constructor [#deposit-method-constructor] It has become possible to configure a new deposit method using the payment provider titled **Constructor**, which allows you to create a custom deposit form by adding to it a required number of text fields that your clients must fill in when creating requests for deposit operations. #### Improvements [#improvements-35] * For bank transfer operations made using the **Midtrans** payment provider, clients now should specify only a transfer amount and select a bank. The other required fields are filled in with the data specified in a client profile. * The Backend images menu item has been added to the System section, allowing users to change logos and other images related to the Back Office. * It has become possible to add questions of three types to client accreditation tests: * open — indicates an open-ended question that can be answered by clients in free form. * close — indicates a close-ended question that can be answered by clients by choosing only one correct answer from a given list of options. * questionnaire — indicates a multiple choice question that can be answered by clients by choosing one or more answers from a given list of options. * A new status **Test results pending** has been added to specify that a client passed an accreditation test and the admin should check test results and either approve or reject them. * When MT4 and MT5 accounts are added to another account group, the account details (such as **Product ID**, **Caption** and **Currency**) are now updated automatically according to the group configuration. If the previous group was associated with a product that supports multiple currencies, the **Product ID** doesn’t change. * The **Events log** has been enhanced as follows: * The buttons **View comments** and **Reply** have been added to the **Events log** tab, enabling you to expand comment threads and add new comments to them. * Slack notifications about new comments for which you are marked as a recipient now contain links to particular comments added in the Back Office. * The currencies enabled for the **B2TRADER** product in the Back Office are now automatically added as assets to the exchange. * The bulk action to zero out client B2TRADER accounts has been enhanced to support the following options: * Enable or disable email distribution informing clients about an executed bulk action. * Execute a bulk action for all enabled currencies. * Specify the identifier of a withdrawal operation in the System log. * Support additional statuses identifying whether a bulk action was completed. * The date and time displayed for *transfer*, *deposit* and *withdrawal* transactions on the **Transactions** page of the B2CORE UI now indicate when transactions were processed. #### Resolved issues [#resolved-issues-26] * Fixed an issue due to which on the **System** > **Countries** page, the name of a national currency was displayed in the **Citizenship** column instead of the **Currency** column. *** ### August 2, 2022 [#august-2-2022] #### New features [#new-features-30] ##### A new mechanism for configuring automatic withdrawals [#a-new-mechanism-for-configuring-automatic-withdrawals] The options for enabling automatic withdrawals have been detached from verification levels and become associated with the **payout** operation type (available upon navigating to **System** > **Operation types**). The following new settings have been added to the **payout** operation type details: * **Auto withdrawal** — this setting enables or disables the auto-withdrawal feature. * **Auto processing rules** — this setting specifies for which payout groups the auto withdrawal feature is enabled. All payout methods included in the specified payout groups will support auto-withdrawals. For each verification level, the maximum amounts allowed for automatic withdrawals can be set in the **Auto withdraw** field located in the verification level details. ##### Client accreditation tests associated with verification levels [#client-accreditation-tests-associated-with-verification-levels] When configuring a verification level, it is now possible to use a new **Passed Tests Needed** option and select a required accreditation test that your clients must pass before submitting documents for obtaining this verification level. #### Improvements [#improvements-36] * In order to preserve settings of the configured platforms, it is no longer possible to remove an existing external connection if it is associated with the platform set up to use this connection. * The columns that were previously available in the currency details for displaying detailed information about currencies (such as **Markup: Sell**, **Markup: Buy**, **Precision** and **Block explorer**) have been moved to the **Currencies** > **Currencies** section. Here, you can now view the complete data related to a currency as well as filter and sort this data by the available columns. * The maximum number of digits used to represent amounts in a currency in the B2CORE UI has been increased to 18. * The account cards shown to your clients in the B2CORE UI now display the time when an account balance was last updated and stay active even if the data about account balance is expired, still allowing your clients to operate their accounts. #### Resolved issues [#resolved-issues-27] * Fixed an issue that made it impossible to add the **email** option to the list of channels for the existing event notification. * Fixed an issue due to which the **Quick Links** widget didn’t display the link to the **IB** section in the case when this section was available in the B2CORE UI. *** ### July 19, 2022 [#july-19-2022] #### New features [#new-features-31] ##### Event Notifications [#event-notifications] With this release, it has become possible to set up notifications about particular events and send them via Slack and email. To configure notifications, navigate to a new **System** > **Event Notifications** section of the Back Office. The following events may trigger notifications: * **Tagging users in the Event log** — notifications about the notes and comments added on the **Event log** tab in the client details, for which users are marked as recipients. * **Payout requests** — notifications about payout requests created by clients. ##### Slack bot integration [#slack-bot-integration] A Slack bot has been integrated, adding one more channel for sending event notifications. #### Improvements [#improvements-37] * The **Mailing Log** tab has been added to the client details, allowing you to view a list of emails sent to a specific client. On this tab, you can export the email list to a CSV file. * The **Hide balances** option has been added to the **Wallets** section of the B2CORE UI, allowing clients to hide balances on their wallets for security purposes. * The **Use redirect location only** option has been added to the **PAMM** > **Links** section of the Back Office. With this option, you can redirect your clients to your own PAMM platform (using the URL specified in the **Redirect location** field) without attempting to authenticate them and create payment accounts. #### Resolved issues [#resolved-issues-28] * Fixed an issue due to which it was impossible to display the available options in the **Document groups** field in the verification level details. * Fixed an issue due to which clients were redirected to the **Sign In** page instead of the **Sign Up** page upon clicking the **Not a member? Sign up now** option in the case when they had previously signed out from the B2CORE UI. * Fixed an issue due to which it was impossible to save color settings applied to the **TradingView** widget after reloading the page. *** ### July 5, 2022 [#july-5-2022] #### New features [#new-features-32] ##### Enhanced security permissions for user groups [#enhanced-security-permissions-for-user-groups] With this release, you can restrict user access to entire sections of the B2CORE UI by disabling specific “view” options in the **System** > **Groups** section. #### Improvements [#improvements-38] * A new engine for the payment system RAMP has been implemented, following the recent major update to B2BINPAY, an integrated payment provider. * When creating a new verification level, you can now choose from among the available KYC providers that are listed in the Wizard drop-down menu displayed in the **Verification** > **Levels** section. * The Wallets Overview widget now displays the aggregate balance on all user wallets opened in the same currency. * It has become possible to introduce custom steps to the Registration Wizard pages displayed for the Advanced workflow type. #### Resolved issues [#resolved-issues-29] * Fixed an issue due to which duplicate transaction details were displayed upon rejecting a transfer request. * Fixed an issue due to which an incorrect commission currency was displayed in the Market/Limit widget. * Fixed an issue due to which different currencies were highlighted with the same color in the Wallets Overview widget. *** ### June 21, 2022 [#june-21-2022] #### New features [#new-features-33] ##### New PS integrations [#new-ps-integrations-12] A new payment provider, **PaymentAsia**, has been integrated, with support for both deposit and withdrawal operations. ##### Event log categories [#event-log-categories] It has become possible to define categories to organize notes and comments that are added on the **Event log** tab in the client details. For this purpose, a new **Clients** > **Events log** section has been added to the Back Office. ##### Enhanced multiselect fields for service parameters [#enhanced-multiselect-fields-for-service-parameters] The multiselect fields available for configuring service parameters (in the **Clients** > **Services** > **Parameters section**) have been modified to allow you to quickly move predefined options between two columns to enable or disable them. #### Improvements [#improvements-39] * The process of creating eWallet and B2TRADER products has been streamlined: it is now possible to select and enable multiple currencies when creating your products. * The following B2TRADER widgets can be added to the default Dashboard layout: **Assets**, **Watch List**, **Open Orders**, **Filled Orders** and **Order Book**. * It has become possible to hide QR codes displayed for signing in to the B2CORE UI from the **Sign In** page by leaving the Lifetime parameter (which is available in the **System** > **Settings** section of the Back Office) empty. * The size of QR codes displayed on the B2CORE **Sign In** page has been increased, making it possible to scan them using mobile devices with iOS 13 and 15. * The option for toggling password visibility by clicking the **Eye** icon has become available on the B2CORE **Sign In** page. * The password reset process for MT accounts has been streamlined: the window for selecting a password reset option (by either generating a random password or specifying a custom password) is no longer displayed if the Change Account Password (MetaTrader) wizard is disabled. * A request form on the HelpDesk has been extended to include a specific set of fields depending on the selected request option. #### Resolved issues [#resolved-issues-30] * Fixed an issue that made it impossible to sign in to the B2CORE UI when Google reCAPTCHA v2 was enabled. * Fixed an issue that prevented QR codes from being displayed on the B2CORE Sing In page when the light theme was enabled. * Fixed an issue due to which the Settings section of the B2CORE UI was unavailable in the case when a client wasn’t signed in to B2TRADER. *** ### June 7, 2022 [#june-7-2022] #### New features [#new-features-34] ##### Support for a new trading platform [#support-for-a-new-trading-platform-1] With this release, **cTrader** has been integrated, allowing your clients to create cTrader trading accounts via the B2CORE UI. ##### Signing in to the B2CORE UI with QR codes [#signing-in-to-the-b2core-ui-with-qr-codes] It has become possible to sign in to the B2CORE UI by scanning QR codes displayed on the **Sign In** page from the B2BROKER app to which you are already signed in. ##### Custom passwords for MT accounts [#custom-passwords-for-mt-accounts] The option to set up custom passwords for MT accounts has become available in B2CORE. Now clients can choose to set up custom passwords or generate random passwords for their MT accounts. #### Improvements [#improvements-40] * The B2CORE signup process has been improved for the cases when an expired invitation link is used to complete registration: the corresponding message is now displayed to users, and after that they are redirected to the **Sign Up** page of the B2CORE UI. * The option to select widgets that you want to shown on the default **Dashboard** via the B2CORE UI has been added. For this purpose, enable the **Show by default** switch for the required widgets in the **Promotion** > **Dashboard** section of the Back Office. * It has become possible to upload profile photos and specify nicknames for clients via the Back Office and B2CORE UI. #### Resolved issues [#resolved-issues-31] * Fixed an issue that made it impossible to open the details of MT demo accounts and display analytics data on them via the B2CORE UI. * For deposit methods for which transaction and payment currencies are set, fixed an issue due to which the minimum and maximum deposit values specified for a payment currency were applied to a transaction currency instead, which resulted in showing incorrect validation messages for the amounts that clients specified in the **Deposit amount** field via the B2CORE UI. * Fixed an issue that caused the data to be displayed beyond the column borders in the **Quotes Widget MT** in the case of a small widget size. * Fixed an issue that caused display of a list of available B2TRADER widgets instead of the **Quick Limit Order** and **Quick Market Order** widgets after their adding to a space. * Fixed the following issues related to the B2TRADER widget tooltips: * Fixed an issue that caused a B2TRADER space to become inactive after the last widget tooltip was displayed. * Fixed an issue due to which widgets located in the upper part of a B2TRADER space were not fully shown during the display of their tooltips. * Fixed an issue that resulted in showing the tooltip for an inactive **TradingView** widget. *** ### May 24, 2022 [#may-24-2022] #### New features [#new-features-35] ##### Support for new platforms [#support-for-new-platforms] With this release, **OneZero** and **PrimeXM** have been supported. The section for managing OneZero and PrimeMX accounts is now available under the **Platforms** menu item in the B2CORE UI. To display these accounts, enable the **OZ/PXM** option (**Promotion** > **Menu**) in the Back Office. ##### New KYC provider integration [#new-kyc-provider-integration] A new KYC provider, **ShuftiPro**, has been integrated, allowing you to verify client identity and documents. ##### A new Custom Commissions widget [#a-new-custom-commissions-widget] A new widget, containing data on commissions that have been customized for clients trading on particular markets, is now available upon navigating to **Profile** > **Settings** via the B2CORE UI. This widget is only displayed to the clients who have been added to the **Commissions** / **Custom** group. #### Improvements [#improvements-41] * It has become possible for clients to set up the default configuration for the **Dashboard** via the B2CORE UI by selecting the required widgets and customizing their parameters, such as the size and location on the dashboard. The default configuration set by a client is restored after resetting the **Dashboard** or signing out of the B2CORE UI. * The **I Agree to** checkbox, allowing you to get consent to custom agreements and terms from your clients, has been added to the cards for creating MT4/MT5 accounts. A link to the document to which clients should agree is specified in the **Agreement Link** field when configuring products via the Back Office. #### Resolved issues [#resolved-issues-32] * Fixed an issue that prevented loading of the **Trades History** widget when clicking the **B2TRADER** menu item in the B2CORE UI. * Fixed an issue with the **TradingView** widget that Firefox users might encounter: the widget displayed no data after switching between menu items in the B2CORE UI in the case when the widget had been previously changed to display specific data. * Fixed an issue that caused display of an incorrect flag on the **Sign up** screen when registering to the B2CORE UI with a phone number starting with +7. *** ### April 26, 2022 [#april-26-2022] #### Improvements [#improvements-42] * A new **Reaction Date** field has been added to the announcement details (**Promotion** > **Announcements**) in the Back Office. The new field shows the date and time when a client interacted with an announcement via the B2CORE UI. * When downloading client files from the Back Office, the filenames displayed in the **Caption** column on the **Files** tab in the client details are now used as filenames for the downloaded files. * The **Compliance approved** field has been added to client requests for withdrawals as well as to the list of withdrawal operations displayed upon clicking **Finance** > **Payouts**. This field identifies whether a compliance check for a withdrawal operation has been passed. The status of this field can be changed only by admin users who have been assigned the corresponding **Compliance approved** permission. #### Resolved issues [#resolved-issues-33] * Fixed an issue related to MT accounts that caused displaying MT4 accounts in the MT5 menu option and MT5 accounts in the MT4 menu option via the B2CORE UI. * Fixed an issue that caused the **Quick Link** widget to display no data in case the PAMM option has been enabled for the B2CORE UI. * Fixed an issue due to which the correct email and phone confirmation codes would not be accepted during the validation process under certain circumstances. *** ### April 12, 2022 [#april-12-2022] #### Improvements [#improvements-43] * Support for withdrawal operations has been added for the **Midtrans** payment provider. * The capability to customize the priority of exchange rate providers for each currency pair has become available via the Back Office. For this purpose, the **Rates Custom Priority** field has been added, allowing you to set the existing exchange rate providers in a desired order (for details, refer to [How to set priorities for exchange rate providers](../how-to-articles/manage-currencies/how-to-set-priorities-for-exchange-rate-providers)). * The option for auto withdrawal has become applicable to all payment providers integrated into B2CORE. Clients do not need a B2CORE admin’s approval to withdraw amounts that do not exceed those specified in the **Auto withdraw** field for each verification level. * It has become possible to change the text color when adding notes on the **Event log** tab. * The **Wallets Overview** widget has been renamed to **Total Balance** and now displays the total balance on all client’s wallets in conversion to a selected currency (the widget supports the following currencies: USD, EUR, INR, CAD and GBP). A list of currencies that will be available to clients while displaying the total balance can be configured upon navigating to **Promotion** > **Dashboard** in the Back Office. A maximum of three currencies can be selected for the widget. * The **Walkthrough** widget visibility via the B2CORE UI is now configured upon navigating to **Promotion** > **Dashboard** in the Back Office. #### Resolved issues [#resolved-issues-34] * Fixed an issue that prevented widget data from being loaded in the mobile version of B2CORE UI when a device was rotated to a landscape orientation. * Fixed an issue that prevented the **Filled orders** and **Inactive orders** widgets from being fully loaded via the B2CORE UI. *** ### March 29, 2022 [#march-29-2022] #### Improvements [#improvements-44] * The mechanism for obtaining currency rates from B2BINPAY has been enhanced to provide more exchange rate data for each currency pair and deliver it faster. * Email notifications sent to admin users upon creating new records on the **Event log** tab of the Back Office have been altered: the **Client ID** field is now clickable and contains a URL that points to the corresponding record logged via the Back Office; the fields that display short and full company names have been added. * The **Export** button has been added to the **Deposit**, **Payout**, **Transfer**, **Exchange** and **Withdrawal Wallet List** pages that are available in the client details via the Back Office, enabling export of the data that is contained on these pages to CSV files. #### Resolved issues [#resolved-issues-35] * Fixed an issue due to which selection of deposit or withdrawal methods has been available to the clients who have not completed KYC verification via the B2CORE UI. * Fixed an issue that resulted in displaying data on all client’s accounts on the **Analytics** page of the B2CORE UI instead of displaying only the data on selected accounts. * Fixed an issue due to which it was impossible to display the **Total Balance** chart in the **Wallets Overview** widget if the total balance was equal to zero. * Fixed the following issues related to the **Trading View** widget: * Fixed an issue that prevented the **Volume** chart from being displayed in the **Trading View** widget after adding the corresponding indicator. * Fixed an issue that prevented the **Trading View** widget from displaying data after switching between tabs and then returning to the tab containing the widget. * Fixed an issue that made it impossible to display data in the **Trading View** widget using a mobile version of the B2CORE UI. * Fixed an issue that caused the **Reset** button to only reset the default B2TRADER workspace to its default configuration instead of resetting all workspaces in the case when there have been more than one workspace created. * Fixed an issue due to which it was impossible to restore the default B2TRADER workspaces by clicking the **Reset** button if these workspaces have been previously closed. * Fixed an issue that caused the **SimpleExchange** widget to be missing from the list of available widgets in the B2CORE UI. *** ### March 15, 2022 [#march-15-2022] #### New features [#new-features-36] ##### New PS integrations [#new-ps-integrations-13] A new payment provider, **POLi**, has been integrated, with support for deposits. #### Improvements [#improvements-45] * Case-insensitive comparison of currency alpha codes has been implemented to correctly display available wallets sorted by currency code in the **Wallets Overview** widget regardless of the case of the currency alpha code specified in a client’s account. * The Dutch language has been added to the B2CORE UI. #### Resolved issues [#resolved-issues-36] * Fixed an issue due to which it was impossible to download the **Withdraw** page via the B2CORE UI. * Fixed an issue that caused an error upon clicking **Profile** > **API Key Management** in the B2CORE UI. * Fixed an issue that caused certain widgets in the B2CORE UI to display data only after reloading a page. * Fixed an issue due to which an error message was displayed after changing a language on the B2CORE UI **Sign In** page before switching to a selected localization. * Fixed an issue due to which the **Files** subgroup and the corresponding **Upload Files** permission were not available under the Right section located in **System** > **Groups** of the B2CORE Back Office. *** ### March 1, 2022 [#march-1-2022] #### New features [#new-features-37] ##### Transaction check [#transaction-check] A new button, **Check transaction**, has been added to the details of **Deposits** and **Payouts** in crypto. Upon successful verification, a corresponding transaction record is created in **Security** > **Transaction Monitoring**. This option is only available for clients with SumSub KYT configured. #### Improvements [#improvements-46] * When an SMTP connection test in the **Mailing** section fails, detailed error messages are now displayed, including information on validation and data input errors for each field. * **B2BINPAY** connectivity has been improved: * Asynchronous requests for wallets have been added to speed up the edit page loading for deposit and payout methods. * The **Destination tag** and **Destination tag type** fields have been added to **Provider settings**. #### Resolved issues [#resolved-issues-37] * Fixed an issue which caused the B2TRADER authorization error for clients that don’t provide exchange functionality. *** ### February 15, 2022 [#february-15-2022] #### Improvements [#improvements-47] * Integration with **BerryPay** has been improved. The format of asynchronous responses and the algorithm for generating a digital signature of transmitted data have changed. * Integration with **B2BINPAY** has been improved. When adding a new deposit method, the Local URL field in the provider settings is filled in automatically. * **PAX** currency has been renamed to **USDP**. The alpha code and caption have been updated. * For the **Registration** wizard, a new rule, `english_chars`, has been added. When enabled, the registration form in the B2CORE UI only accepts Latin characters for the **First name** and **Last name** fields. * The **Index** and **Next level** fields in **Verification** > **Levels** have become editable, which significantly simplifies creation and display customization of verification levels in the B2CORE UI. Previously, it was necessary to create levels in the reverse order — from the last to the first. In case of an error, it was impossible to edit the sequence of fields in the B2CORE UI. * A new **Enabled for admin** option has been added to the currency pair details. The **Enabled** option has been renamed to **Enabled for client**. This allows you to differentiate access rights to exchange operations via the B2CORE UI and B2CORE Back Office. * New fields have been added to the **Currencies** > **Currency pairs** table: * **Max amount** * **Step** * **Hedging enabled** * **Enabled for admin** * **Enabled for client** * Changing numbering of MT accounts in the B2CORE UI and B2CORE Back Office has been disabled until further improvements. #### Resolved issues [#resolved-issues-38] * Fixed an issue due to which the Profile > Settings > Tier and Profile > Security > WhiteList sections were not displayed in the B2CORE UI. * Fixed an issue due to which in the B2CORE UI, the Withdraw amount field retained the value of the previous input. * Fixed an issue that caused instant loading of the Trading UI. *** ### February 1, 2022 [#february-1-2022] #### New features [#new-features-38] ##### B2CORE UI menu management [#b2core-ui-menu-management] A new section, **Menu**, has been added to **Promotion**. Here, you can manage B2CORE UI menu items, such as changing their visibility depending on the client’s verification level. ##### Client folders tree [#client-folders-tree] A new section, **Client folders**, has been added to **System**. Now, you can create a folder tree with any nesting depth. Features: * You can create predefined system folders in the **System** > **Client folders** section. These folders will be automatically added to all clients. * You can additionally create custom folders for a specific client, on the **Files** tab in the client’s details. Note that you cannot delete system folders here. * If a system folder is created with the same name as that of a custom folder of some client, it is not a problem: a `_Custom` postfix will be added to the name of the custom folder, and a system folder with the same name will be created next to it. * When renaming a folder in **System** > **Client folders**, it will be automatically renamed on the **Files** tab in the client’s details. * You can assign access permissions to a folder, to specify which groups of users can view and edit it in the **Files** tab. * By default, nested folders inherit the access permissions from the parent folder. Their access permissions cannot be broader than that of the parent folder. * When access permissions assigned to a parent folder are revoked from a user group, access to all nested folders is automatically restricted for these users. * When granting access permissions to a parent folder for a user group, it will NOT be automatically granted access to nested folders. ##### Successful registration event [#successful-registration-event] A new event type, **SuccessfulRegistration**, has been added to **System** > **Events**. When a client registers via the B2CORE UI or an admin creates a new client profile via the B2CORE Back Office, a notification is sent to the admin email specified in the event. A new template, `SuccessfulRegistration (to admin)`, has also been added to **System** > **Templates**. ##### New rate provider [#new-rate-provider] A new rate provider, **WazirX**, has been integrated. #### Improvements [#improvements-48] * When uploading multiple files, the drag-and-drop function is now available. * When configuring commissions for deposits/payouts methods, you can select multiple currencies at once. * When creating a new product, the currencies list is now sorted in an alphabetical order. A quick search field has also been implemented. * When creating a bulk action for zero balance, alpha codes instead of captions are now displayed in the currencies list. * A new provider, **TransakV2**, has been integrated into B2BINPAY. * In the transaction details, the **Client** field has become a link to a client’s profile. * The **From account amount** and **From account equity** fields have been added to the details of a Transfer-type request. If the account does not have these parameters, `0` is displayed. The current balance is obtained from the platform. * The process of receiving rates on the exchange page has been optimized so that only rates for currency pairs corresponding to client wallets are loaded. #### Resolved issues [#resolved-issues-39] * Fixed an issue due to which it was impossible to log in to B2CORE UI without previously refreshing the page. *** ### January 18, 2022 [#january-18-2022] This release was aimed at technical debt and improved stability. #### Improvements [#improvements-49] * It has become possible to select an account type for cashback — trade or personal. For the personal account type, cashback is deposited to the wallet upon comparing the currency of the wallet with the currency of the trading account(s). In case the cashback has been calculated for more than one trading account, it is credited to the wallet in separate deposits. #### Resolved issues [#resolved-issues-40] * Fixed an issue due to which it was impossible to unarchive an MT account if `Max accounts = -1` was specified in the product settings. ### December 21, 2021 [#december-21-2021] #### New features [#new-features-39] ##### Clients accreditation [#clients-accreditation] A new feature has been implemented allowing you to manage and configure client accreditation. A new **Client Tests** section has been added to the **Verification** page. In this section, you can specify questions that the client should answer to be granted a higher verification level in the B2CORE UI. In addition, a new Test results tab has been added to the client’s details. ##### Saving withdrawal details [#saving-withdrawal-details] Upon making a withdrawal request via the B2CORE UI, clients can now choose to save withdrawal details to avoid specifying the same information once again for each subsequent withdrawal. A new **Finance** section has been added to the client’s profile, where all saved withdrawal data is available. This data can be also accessed by administrators via the B2CORE Back Office by switching to the newly added **Saved withdrawals** tab in the client’s details. ##### Wallet Details [#wallet-details] In the B2CORE UI, it has become possible to view a transaction history for a specified wallet. ##### Service presets [#service-presets] You can now create a pre-configured preset and quickly apply it when adding a new client service or customizing an existing one. Presets associated with specific services can be accessed in the **Clients** > **Services** > **Saved presets** section. #### Improvements [#improvements-50] * The data in the **Security** > **Transaction monitoring** section is now filtered in descending order by the **Transaction ID** field by default. * A new button, **Upload multiple files**, has been added to the **Files** tab of the client’s details. * Information about service parameters has been added to the **Clients** > **Services** section. Service parameters are listed in separate table columns; the parameter values specified for various clients are indicated in corresponding rows. * In the B2CORE UI, the **Delete account** option has been removed until further improvements. #### Resolved issues [#resolved-issues-41] * Fixed an issue due to which precision settings were ignored when displaying amount values of the Transaction history in the B2CORE UI. * Fixed a validation rule for the deposit amount field. It is now based on precision settings set for the asset selected in the Deposit amount field. * Fixed an issue due to which problems occurred upon adding a withdrawal whitelist. * Fixed an issue causing incorrect resetting of a timer after re-sending a 2FA code. *** ### December 7, 2021 [#december-7-2021] #### New features [#new-features-40] ##### Multi-currency accounts [#multi-currency-accounts] Starting with this release, B2CORE can process multi-currency accounts. A new tab **Currencies** has been added to the product details. After creating a product (base currency still has to be selected at this step), you can add an unlimited number of currencies to it. Settings of the added currency can overwrite product settings. In addition, creating products for the B2TRADER platform (which provides multi-currency accounts) has become easier. Previously, you had to create a platform product, and then create wallets for each currency with Wallet Wrapper. Now it all can be done at once, by creating a platform product and adding all required currencies to it. ##### B2BINPAY: Merchant clients and multiple address types [#b2binpay-merchant-clients-and-multiple-address-types] For B2BINPAY v2, processing of Merchant clients transactions has been implemented. Also, support for multiple address types has been added. In the settings of B2BINPAY methods, the Address Type field is displayed for currencies with multiple types of addresses. #### Improvements [#improvements-51] * Editing the values ​​of the **Dealing approved** (for payouts) and **Fin verified** (for deposits) fields has become available only to admin users with the appropriate access rights. The corresponding settings have been added to **System** > **Groups**. * For service parameters with type text, text wrapping has been enabled. * Several improvements have been implemented to **Security** > **Transaction monitoring**: * **Transaction ID** now displays the identifier of the operation itself. * Four columns that support filtering have been added: **Created date**, **Email**, **Source amount**, **Source currency**. * The **Export** button has been added. * To **System** > **Users** the following columns have been added: **2FA status**, **IP whitelist**, **Groups**. * For Trading UI, skeletons have been implemented to display the loading state of widgets. * Integration with CoinMarketCap has been improved to receive rates for “rare” currency pairs: additional rates resource is accessed if there are no rates provided. * Integration with SendGrid has been improved to bypass the maximum limit of 1000 email recipients. * When signing up to the B2CORE UI, a pre-selection of a phone code has been added based on the chosen country. #### Resolved issues [#resolved-issues-42] * Fixed an issue that caused infinite loading of the Verification page in the B2CORE UI. * For MT4 and MT5 accounts, fixed an issue that caused infinite loading of Pending orders in Deals history. * Fixed an issue with the up and down sorting arrows that incorrectly sorted MT accounts and wallets by balance or name. The up arrow now correctly sorts in the ascending order and the down arrow sorts in the descending order. * Fixed an issue due to which the Reset button did not work for the TradingView widget. * For MT5 accounts, fixed an issue due to which the Profit parameter values in Deals history were displayed in exponential notation instead of decimal. *** ### November 24, 2021 [#november-24-2021] #### New features [#new-features-41] ##### Hiding recipients emails [#hiding-recipients-emails] When receiving emails sent via SendGrid, your recipients now only see their own addresses in the mailing list and do not see the emails of other recipients. ##### SMS daily limit [#sms-daily-limit] A new setting **SMS limit for each recipient** has been added to **System** > **Settings** > **Other**. Use it to limit the number of SMS that can be sent to each client per day and avoid uncontrolled spending of the balance. The setting will be applied to SMS sent during registration and 2FA confirmation. If the limit has been exceeded (for example, the client has already received the allowed number of SMS but could not enter the correct 2FA code), SMS are blocked for this client for a year. ##### Verification requests via Back Office [#verification-requests-via-back-office] In the client details, a **Verification request** button has been added to the **Documents** tab. Use this button to upload files and create a request for the next verification level directly from the B2CORE Back Office. Important: you cannot create a request if an open request of the Verification type has already been created for this client. ##### New PS integrations [#new-ps-integrations-14] A new payment system, **Help2Pay**, has been integrated, with support for deposit and payout operations. The following currencies are available: * `MYR` — Ringgit Malaysia * `THB` — Thai Baht * `VND` — Vietnamese Dong * `IDR` — Indonesian Rupiah * `PHP` — Philippine Peso #### Improvements [#improvements-52] * In the client details, the **Files** tab has changed location and is now located between the **Services** and **Advanced** tabs for quicker access. * It is now possible to reject **Verification** requests related to already deleted clients. * Cashback calculation mechanism has been improved: * **Cashback percent** has been renamed to **Cashback value**, which means it is no longer a percentage value. The calculation formula remains the same: `cashback = lots amount × cashback value`. * If two trading platforms are active and connected to the same database, cashback is credited only once. * Cashback is no longer credited for trading with demo accounts. * It is no longer possible to disable all languages in **System** > **Localizations**. At least one language must be enabled, otherwise it is impossible to save changes. * For B2BINPAY transfers, the **Created** value is now considered a date and time of receiving a final confirmation and not the date and time of creating a transfer as before. The aim behind this change is to prevent inconsistencies. For other payment systems, this value still indicates the date and time of invoice creation. * List view is now available for wallets in the B2CORE UI. * Migration to the New WebSDK SumSub has been completed. For more information, check the [SumSub documentation](https://developers.sumsub.com/migrations/sdk.html#advantages-of-the-new-sdk). #### Resolved issues [#resolved-issues-43] * For Google Chrome and Safari, fixed an issue which caused a logging out instead of refreshing the token after the access token expiry. * Fixed an issue due to which the email message was sent only to the first email from the uploaded CSV file and the other addresses were not processed. *** ### November 9, 2021 [#november-9-2021] #### New features [#new-features-42] ##### Immediate password reset [#immediate-password-reset] In the Back Office, the option to request a password reset from a specific client or all clients at once is added. When trying to log in, the client will receive a notification that the password is no longer valid and must be changed. Email verification is required before the password reset (with a verification code). #### Improvements [#improvements-53] * Improved internal storage of system settings: added groups with unique names. * MT4/MT5 demo accounts can be archived without transfer of the remaining funds. Archiving is available in the client UI and Back Office. * For B2BINPAY v2 callbacks, added an additional check by currency alias to avoid errors in case of the name mismatch. * After deleting personal data (the Delete Account button), all active requests of this client are automatically rejected. #### Resolved issues [#resolved-issues-44] * Fixed an issue which caused a redirect to the dashboard when attempting to open the trading UI. * Fixed an issue due to which the TradingView graph was not displayed after several minutes of inactivity. *** ### October 26, 2021 [#october-26-2021] #### New features [#new-features-43] ##### Cashback for traded lots [#cashback-for-traded-lots] Brokers can now set a cashback ratio to reward traders. The cashback is set as a fixed amount per each traded lot and is paid in the currency of the wallet. ##### Testing mailing connection [#testing-mailing-connection] A new Test Connection button is added to the Mailing > System > Providers section and allows to test the status of existing connections. The automatic timeout increases after each unsuccessful email from 0 to 5, then 25, 125 seconds and so on, but will not exceed 52 minutes, after which the timeout loop will restart at 0. ##### New PS integrations [#new-ps-integrations-15] A new payment system, **Gibilling**, has been integrated, with support for payout operations. #### Improvements [#improvements-54] * The Watchlist widget is completely redesigned, has a new sleek interface and provides better user experience. * The Whitelist and Device management widgets in the Security section of the B2CORE UI switched their places for the convenience of users. * Sumsub connection settings are improved so that during the SyncData, the system retrieves client information from the Personal info section of the Sumsub, instead of the Provided Personal Info section as it was before. #### Resolved issues [#resolved-issues-45] * Fixed a currency exchange issue where the Exchange button was inactive if the balance of wallet in the quote currency was zero. * Fixed an issue with incorrect rates being displayed for exchange operations involving Cryptocompare and BTC-Alpha rates providers. *** ### October 12, 2021 [#october-12-2021] #### New features [#new-features-44] ##### Auto bonus minimum [#auto-bonus-minimum] Admin users can now set a minimum deposit amount that will trigger an automatic bonus creation. The minimum deposit amount applies to each funds transfer made to an MT account. To explore the new feature navigate to System > Settings > Bonuses. ##### Auto bonus limit [#auto-bonus-limit] Admin users can limit an overall amount of auto created bonuses paid to a client. When the overall amount of auto created bonuses to a client reaches the specified limit, new auto created bonuses will not be generated. Applies only to funds transfer to an MT account. To explore the new feature navigate to System > Settings > Bonuses. ##### Bonus burn on withdrawal [#bonus-burn-on-withdrawal] A new switch option Burn on withdrawal is added to the System > Settings > Bonuses section. If Enabled and a client makes a withdrawal — all bonuses calculated for a particular account will be burnt and marked as Expired; if Disabled and a client makes a withdrawal — all bonuses will remain active. ##### Table type for service parameters [#table-type-for-service-parameters] Service parameters now have a new option Table type, which can be used to specify the number of columns and rows for that particular service. To explore the new feature navigate to Clients > Services > Parameters and edit a selected parameter. ##### Register as workflow feature [#register-as-workflow-feature] User registration wizard has a new workflow option Register As, which allows admin users to select the client type which will automatically be assigned to all new users registered via this wizard. ##### New filters for user settings [#new-filters-for-user-settings] Admin users can now geographically limit the list of clients available to a particular user with the help of Include and Exclude options added to the Country field in the System > Users > Edit tab. If the Exclude option is active and a certain country is specified — the user with these settings will see a list of clients from all countries except a selected country. If the Include option is active and a certain country is selected — the user with these settings will see a list of clients from a selected country only. ##### Product view restriction by partner ID [#product-view-restriction-by-partner-id] Brokers can now restrict product access to a particular IB and consequently to such IB’s clients. The settings are made in Back Office and are reflected in the B2CORE UI. #### Improvements [#improvements-55] * Urdu, Greek, Ukrainian, Finnish, Swedish & Norwegian languages are added to the API. * Error messages of MT4/MT5 Wrapper v3 are now displayed in a descriptive and easy to understand format. #### Resolved issues [#resolved-issues-46] * Fixed a bug where the TradingView widget would not automatically switch its data to match the market selected by the trader. * Fixed an issue where the Wallet widget was unnecessarily rounding up the Total balance sum. * Fixed an error occurring during an internal transfer in case there are two accounts with an identical ID. * Fixed an issue where transactions with a Partial status were listed in a list of deposits with a status Successful. * Fixed an error resulting in new MT Demo accounts to be created with zero balance without the consideration of prior Start amount settings. * Fixed a bug that hidden several field labels in user creation form in the admin panel. * Fixed an issue with an empty Amount field in a new deposit message sent to a client. * Fixed an issue with an incorrect operation of Countries field filter in User settings of the admin panel. * Fixed unsynced statuses display between the list of all transfers and details of each transfer. * Fixed an issue with the Mailing section not being hidden while the View mailing option was unchecked. *** ### September 28, 2021 [#september-28-2021] #### New features [#new-features-45] ##### Data masking [#data-masking] Administrators with full access privileges can now apply data masking options to another admin or admin group, by enabling the *Mask Data* and *Update Masking Data* checkboxes, respectively. When enabled, data masking prevents selected users from seeing the following client data: Client Name, Email and a Phone number. This applies to data displayed in the system as well as exported documents. To explore the new feature navigate to System > Users/Groups > Edit. ##### Client data protection tool in compliance with GDPR [#client-data-protection-tool-in-compliance-with-gdpr] A new feature that allows brokers to delete all personal client data of deleted client profiles is added. The following personal data will be removed from the system: First Name, Middle Name, Last Name, Email, Country, Address, Phone, Documents, Historical Data, Devices. ##### B2BINPAY transactions check [#b2binpay-transactions-check] A new Check option is added to the B2BINPAY > Wallets section, and allows users to audit all B2BINPAY deposits or withdrawals for the selected time period. ##### New workflow type [#new-workflow-type] New SendNotificationFlow workflow is added to System > Events > SuccessfulOperationHandler > Event handler workflow. The new workflow sends the details of all successful transactions to the email. ##### Wallet display currency [#wallet-display-currency] Users can now choose which currency their Wallet data will be displayed in. For now the available currencies are USD and EUR, with more new currencies being added in the nearest releases. #### Improvements [#improvements-56] * Admin messages accessible from the message icon in the top bar of the home page are now always saved, regardless of whether they have been read or not. The list of tagged admins is displayed at the top of the message. Messages to the current admin, for easier navigation, have a different color indicator than the rest of the messages. * A Password field now cannot be removed from the System > Wizards > Edit element > Workflow, without the prior enabling of the Password Auto Generation option. * Users can now dynamically edit the following transaction details: *Transaction hash*, *Status*, *Rate (USD)*. The Final amount of the transaction will be automatically recalculated. * All accounts/wallets, transactions, products and platforms related to B2Margin are removed from the B2CORE databases. * B2TRADER Adv UI Workspace widget structure is improved so, when a user moves or adds a new widget, the existing widgets stay in place instead of moving, and a layering principle applies until all widgets are set. #### Resolved issues [#resolved-issues-47] * Fixed a bug that was blocking the automatic generation of monthly financial reports. * Fixed a Withdrawal filter in transaction monitoring that caused zero entries to be displayed when the filter was applied. * Fixed *In Progress* status error in Finance > Payouts that prevented the payout processing. * Fixed an error with missing *Payment Name* and *Name fields* in exported data in the Finance section. * Fixed a bug that was blocking reports building in Security > Transaction Monitoring. * Fixed a bug where deposits with the transfer status callback *unconfirmed* were considered as *confirmed*. *** ### September 14, 2021 [#september-14-2021] #### New features [#new-features-46] ##### Files migration tool [#files-migration-tool] A new Files Migration Tool is added, and allows you to move client files between directories simply by choosing the required directory in the Directory field of the Edit File tab. Files can only be moved to another directory of the same client. ##### B2BINPAY v2 rate provider integration [#b2binpay-v2-rate-provider-integration] A new rates provider is integrated — B2BINPAY v2. ##### Root folders restrictions [#root-folders-restrictions] A new section is added to System > Settings that lets an admin limit or grant selected users an access to root folders. #### Improvements [#improvements-57] * New event log message feature was added to Clients > Details > Event Log, that sends an event log message to admins tagged in a message. #### Resolved issues [#resolved-issues-48] * Fixed a GBPay callback issue where the B2CORE did not recognize the callback sent by the payment system. * Fixed a GBPay integration issue where the generated Reference number, consisting of numbers, upper, and lowercase letters was not accepted by the payment system that only takes numbers and uppercase letters. * Fixed an incorrect displaying of empty values in Total Amount in Payments > Deposits. * Fixed an issue in Accounts table settings where unticking Hide zero balance option was not refreshing the table back to the full list. * Fixed an issue that was causing 2FA settings to be displayed as Disabled, for users that had 2FA option enabled. *** ### August 31, 2021 [#august-31-2021] #### New features [#new-features-47] ##### Transaction receival event [#transaction-receival-event] Added a new event type — SuccessfulOperation, which sends POST requests to a provided external URL upon receiving a new successful transaction: deposit, withdrawal, transfer, or exchange. ##### Balance receival event [#balance-receival-event] Added another new event type — AccountBalanceReceived, which checks balances of SMS providers every 12 hours and sends email notification if the balance is low. Also, the corresponding email template was added — BalanceSmall. ##### Client data synchronization [#client-data-synchronization] To the SumSub settings added a new action — Sync Data, which starts the synchronization of documents and personal data (First Name, Last Name, etc.) about the client for clients with a verification level higher than 0. The execution can be checked in logs. Action triggering is allowed once an hour. #### Improvements [#improvements-58] * Added a separate group of access rights for the Event Log tab of the client’s details. * For B2Margin and B2Margin Cash platforms, when you change the email in the B2CORE UI, the email on the platform changes. * B2TRADER platform settings are migrated to External connections. * Added the templates of email notifications on new deposits and rejected deposits. By default, the template of email notifications on new deposits is disabled. * Removed the following fields from the Services tab of the client’s details: Service Setup Fee, Service Monthly Fee, Service Sign Date. * To the parameter constructor in Services added the following types: text, numeric, date, select, multiselect, checkbox. * When archiving demo accounts, funds checking is now skipped and the account can be archived straight away. * The Nexmo provider was adapted to a new brand — Vonage. * Adjusted the Toshimart integration so that First Name, Last Name and Email are now taken from the client automatically. * Adjusted KYT integration with SumSub so that now exactly wallets that were used in the transaction are sent for the check. * Adjusted the BPay integration for external deposits with adding a new provider — BPayExternal. #### Resolved issues [#resolved-issues-49] * Fixed an issue which caused markups to be ignored in the calculation of the final deposit amount in deposits with conversion. * Fixed an issue due to which disabled countries were still available for selection at registration. * Fixed an issue which caused session expiration at the login page due to the slow connection. * For Windows 10, fixed an issue which caused widgets refresh after switching to another tab in Google Chrome. * Fixed infinite redirect when switching to the Exchange page after login. * Fixed incorrect display of percentages on progress bars of bonus widgets. * Fixed an issue due to which any indicator added to TradingView disappeared after switching to another page. * Fixed an issue due to which the auth request was sent after each click. * Fixed an issue due to which anti-phishing code didn’t accept values ​​written in Cyrillic. * Fixed incorrect margin level calculation for OneZero accounts. New correct formula is: `Margin Level = Margin Used [Equity — Free Margin] / Equity * 100% = (1 — Free Margin/Equity) * 100%`. * Fixed an issue due to which in the email notification about withdrawal request, the codes of custom fields were displayed instead of their names. *** ### August 3, 2021 [#august-3-2021] #### New features [#new-features-48] ##### Tagging and notifying an Admin [#tagging-and-notifying-an-admin] The dropdown list was added to the Event Log tab of the client’s details when creating a new comment. Use the dropdown list to tag an admin. The admin will be notified via the new icon, which was added to the upper toolbar. By clicking the icon, and then clicking a message, the admin will be redirected to the client’s details Event Log tab. ##### Directories [#directories] The functionality of using directories (folders) was implemented for the Files tab of the client’s details. ##### AdvCash withdrawal channels [#advcash-withdrawal-channels] Added AdvCash withdrawal channels inside the provider, now you can configure the channel on System > Payout system > Payout methods page in the admin panel. #### Improvements [#improvements-59] * External system id field was added to Services > List, as well as to the service creation form. * Improvements to Services > Clients: * New fields: Client internal type, Client type, Company short, Company long, Tags, and Manager. * ID is clickable and leads to the client’s details. * The Service name is clickable and leads to service details. * Email is clickable and is copied to the clipboard. * Simple Exchange in Adv UI now supports switching between buy and sell operations. For example, you can switch BTC/USDT market to USDT/BTC. * We merged B2Margin & B2Margin Cash into a single platform. The configuration was partly moved to External Accounts for ease of use. * We have enhanced BPay integration, making it possible to receive callbacks from external systems and crediting end-user by checking user ID in the details. * Now you can view the service details on the Services tab of client’s details even if you lack the permissions to edit it. * B2TRADER authorization is now using tokens instead of cookies. * The export functionality of Finance > Exchange and Finance > Transfers pages was improved by optimizing requests to the database. #### Resolved issues [#resolved-issues-50] * Fixed value rounding for **Amount** and **Final amount** fields, when exporting **Finance** > **Deposits**. * Fixed an issue, which allowed the withdrawal of an unpermitted asset using `account_id`. * For B2TRADER Adv UI, fixed an issue, which caused spontaneous page refreshing. * Fixed an issue due to which page horizontal scrolling failed to return to default value after pulling widgets outside the border on the Dashboard page. * Fixed an issue that caused TwilioPhone to not appear in the external connection list. * Fixed an issue that caused the CoinGecko rates provider not to display rates. * Fixed an issue, which caused a logout error of an authorized user, when changing user status to Inactive. * Fixed an issue, which prevented you from seeing the Anti-Phishing Code in emails. * Fixed an issue, which could cause an infinite redirect while opening the Exchange page. * Fixed an issue, which caused the added Anti-Phishing Code not to display if SMS 2FA is enabled. *** ### July 20, 2021 [#july-20-2021] #### New features [#new-features-49] ##### Twilio Voice integration [#twilio-voice-integration] The new Twilio Phone provider was added to External Connections. Set it up to be able to dial a client from the personal info page. ##### CoinGecko Integration [#coingecko-integration] CoinGecko API integration. The open-source rates provider. ##### Profile > Security [#profile--security] Several blocks were moved to, and new blocks added to the **Profile** > **Security** page: * **Address Management** moved from **Settings**. * **Two-factor authentication** moved from **Settings**. * Added **Anti-Phishing Code** block (4—20 non-special characters). Becomes available after enabling **Google Authenticator**. * Added **Device Management** block which displays the list of trusted devices. #### Improvements [#improvements-60] * The SMTP server settings were added to the admin panel in the Mailing section. It is possible to configure the email storage period, the resend, and the deletion of an unsent email. * Added a monitoring feature to prevent the abusive activity with Adv UI. If more than 20 widgets were added or more than 20 resizes/movements were performed within a minute, the user will be prompted to reset the Workspace and stop the abusive activity. * Optimized export of payouts lists. Download speed increased up to 4 times, email sending speed increased up to 3.5 times. #### Resolved issues [#resolved-issues-51] * For BetaTransfer PSP, fixed an issue that caused the return of the incorrect currency list during the creation of funds withdrawal method in admin panel. * Fixed the TradingView widget, which could display incorrect data after socket reconnection. * Fixed an issue due to which the TradingView widget refused to resize the chart. * Fixed an issue due to which during the deposit/withdrawal method changing, the rate of the previous method was displayed. * Fixed an issue due to which always the first currency was deposited in case multiple PS Currencies are used. * Fixed an issue that caused the dropdown lists to stick to the screen while scrolling the page. *** ### July 6, 2021 [#july-6-2021] #### New features [#new-features-50] ##### Payout method constructor [#payout-method-constructor] The Constructor payout provider has been added. General settings are identical to other providers, but with an additional Custom Fields block, which has an Add Field option. Fields names can be edited. Fields values can be set when creating a payout and also will be available in the corresponding client’s request. #### Improvements [#improvements-61] * Optimized export of clients, accounts and payments lists. Download speed increased up to 4 times, email sending speed increased up to 3.5 times. * Payeer settings were migrated to External Connections. Now B2CORE owners can configure the exact channel of Payeer payout in the method settings in order to configure separate commissions/naming etc. for different channels. * For B2Margin Cash, added the possibility to authorize to the trading UI with a token. * For PrimeXM, added request settings for transfers. * To the Deposits and Payouts tables, added the Final Currency field — currency in which funds were credited/debited. For more convenience, this field is also displayed in the tables on the Finance tab in client’s details, along with the Rate currency and Rate (USD) fields. * When searching by IP in Security, the Hide IP duplicates option is now available. Enable it to group entries by unique email + IP pairs. * 4-hour candle timeframe added to the TradingView widget. #### Resolved issues [#resolved-issues-52] * Fixed an issue due to which, in the Trade history widget, lots values were set to 0 for all instruments. * Fixed display name for internal client type “agent”. * Fixed an issue due to which, during payouts with conversion when only one PS currency is available, the incorrect destination currency was displayed in the Back Office. * Fixed an issue due to which the link to a specific currency pair did not work on the Public exchange and all widgets displayed the default currency pair. * Fixed an issue due to which the New Deposit Amount option affected the deposit amount in destination currency (TR Currency) instead of source currency (PS Currency). * Fixed an issue due to which the Fee Product value on the Trades tab in the client’s details were not displayed. *** ### June 22, 2021 [#june-22-2021] #### New features [#new-features-51] ##### PrimeXM integration [#primexm-integration] Now it is possible to configure connection to the PrimeXM platform and retrieve clients accounts. In the Back Office detailed information on balance, equity, margin, PnL, transfers from/to the account will be displayed. In the B2CORE UI, PrimeXM accounts will be displayed on the Wallets page. ##### Simple exchange for B2TRADER [#simple-exchange-for-b2trader] A new widget has been added to the advanced UI. Simple Exchange provides the ability to exchange currencies via FOK orders if both wallets are on the B2TRADER platform. #### Improvements [#improvements-62] * Now all custom fields of the rate provider are checked for validity. Also, if the provider is just created and has a password field, it will be created disabled; when trying to enable the provider with an empty password field, an error message will appear. * Bonus details for the client now display the fields that were set when the bonus was created. * B2Margin Cash logins are now stored in the B2CORE UI. * After reaching max inactivity, the accounts are no longer archived, only the trading option is disabled. * For Banners and Announcements, the Button URL field has been added. If the value is specified, by clicking on the button, the client will be redirected to the specified URL. * When creating MetaTrader accounts, it is now available to select the Investor Only template which contains no Password, only Investor Password. * A new type of client request has been added to quickly filter requests related to Introducing brokers. #### Resolved issues [#resolved-issues-53] * Fixed an issue which caused an error when trying to view exchange details. * Fixed an issue due to which the Internal Transfer item was not displayed in the menu for some clients despite the access rights. * Fixed an issue due to which empty wallets list was displayed when loading the Wallet page. * Fixed an issue due to which accounts which require approval were created without requests. * For Introducing brokers, fixed sorting and filters by country, latitude, longitude and position lifetime. * Fixed an issue due to which the language select window was not properly displayed in the exchange interface. * Fixed the gaps on the TradingView widget which occurred when zooming out and scrolling the chart. * Fixed incorrect translations in payout requests. *** ### June 8, 2021 [#june-8-2021] #### New features [#new-features-52] ##### Hedging fail handler [#hedging-fail-handler] A new type was added to Events. You can now receive email or Slack notifications which contain transaction ID upon hedging failed for exchange operations. ##### Request receival handler [#request-receival-handler] Another new type was added to Events, which sends email notifications when a request of a specific type is created. ##### B2TRADER platform support in IB [#b2trader-platform-support-in-ib] Another trading platform was added — B2TRADER. Connection to the platform and commission payment plan can be configured in the B2CORE Back Office. #### Improvements [#improvements-63] * Now verification level cannot be saved if a non-existing class is specified as a wizard. * In the Registration wizard fields constructor, the Label field value is now mandatory. * Several improvements for the B2Margin Cash platform: * In the account details, the trading platform groups are now displayed and can be edited. * In the product details, it is now possible to set several platform groups. * When editing the platform group of a product or B2Margin Cash platform account, only one group in one domain is allowed. * Added `nonce` value to the private API requests to B2TRADER platform. Nonce is a 64-bit integer which is unique within a 22 seconds time interval in the frame of the used public key. It is used to improve the security of trading methods. Applicable for B2CORE with B2TRADERShadow platform configured for exchange hedging purposes. * For B2TRADER platform authorization, tokens are now used instead of cookies. * The value of the currently active external connection is now sent in the `snsHost` field for the verification request. * In Introducing brokers, base and quote currencies were added to symbol details, trades details, and reward details. * In Introducing brokers, naming was reworked and improved for reward states and details, trade details, and symbol details. Data displaying was reorganized to improve convenience. #### Resolved issues [#resolved-issues-54] * Fixed an issue due to which the Open Orders widget displayed zero in Price of limit orders. * Fixed an issue that caused an unexpected error when canceling an order. * Fixed the expired session problem when re-logging to the B2CORE UI in Safari. * Fixed an issue that caused slow data loading when re-switching to the exchange tab in the B2CORE UI. * For the Trading View widget, fixed default chart type. Now it’s always Candles. * Fixed the behavior of the Remove tooltip, which did not disappear after deleting an entry in the WatchList widget. * For MT4 and MT5 Accounts, fixed an issue due to which accounts data was not displayed if there were no transactions. * Fixed incorrect displaying of connected B2BINPAY v2 wallets when configuring deposit method. * Fixed calculations for deposit methods with conversion. *** ### May 26, 2021 [#may-26-2021] #### New features [#new-features-53] ##### SumSub KYB [#sumsub-kyb] When changing the client type (individual/corporate), the client’s verification level in the B2CORE UI and verification system will be set to 0. Re-verification will be required. This option is available if Client Resetting Mode is enabled in External Connections for SNS. It is disabled by default. ##### Event log [#event-log] A new tab was added to the client’s details. On this tab you can add notes and commentaries about the client. Supported text formatting, hyperlinks, attachments, replies and message editing. ##### Parameter constructor for services [#parameter-constructor-for-services] It is now possible to configure additional parameters for each service. When adding a service to a client, these fields will be required. ##### IB symbols export [#ib-symbols-export] Now it is possible to export settings to CSV, change the formula and then import these symbol settings in the same or in a different IB Type. The Export button is available on the Symbols tab of IB Type details. ##### Min position lifetime [#min-position-lifetime] New parameter was added to MT4 and MT5 platforms in Introducing brokers. If a position was closed earlier than the min position lifetime, it is not taken into account in rewards calculating. #### Improvements [#improvements-64] * We have significantly enhanced our authorization technology. * Optimized rates receiving from CryptoCompare. Now instead of sending a request for every pair we accumulate the pairs and send one request for all. * New supported formats on the Files tab in the client’s details: DOC, DOCX, XLSX, CSV, PAGES, NUMBERS, ZIP. * API Key in B2TRADERShadow platform configuration is now visible. * Now every export request can be done in a matter of minutes. * Asynchronous balances are now updated right on the open page with no need to refresh. * Added PostgreSQL reporting support for MT5 in Introducing brokers. * In Introducing brokers, tier ID was replaced with tier name. * Min position lifetime parameter was added to MT4 and MT5 platforms in Introducing brokers. If a position was closed earlier than the min position lifetime, it is not taken into account in rewards calculating. * Added MaxMind diagnostics to Introducing brokers services. * IB now supports PostgreSQL reporting for MT5 apart from being only MySQL before. #### Resolved issues [#resolved-issues-55] * Fixed an issue that caused user to be banned due to Client Rights release. * Fixed an issue due to which Transaction Monitoring sent email notifications on “green” transactions. * Fixed an issue due to which on mobile devices deleting the Wallets Overview widget removed also the Quick Links widget. * Fixed an issue due to which the Add Widget link was displayed over the banner when creating a new workspace. * Fixed incorrect behavior of the Verification widget after re-login. * Fixed an issue due to which the trades history was not updated after disconnecting the exchange. *** ### April 27, 2021 [#april-27-2021] #### New features [#new-features-54] ##### Clients access rights [#clients-access-rights] You no longer have to manage client rights from different parts of the Back Office. Clients access rights management has been moved to the Clients Rights subsection in the System. You can create and edit access levels, assign a level to a client from the details of his profile, and so on. ##### Transaction verifying handler [#transaction-verifying-handler] A new type was added to Events. You can now receive email notifications once a RED transaction is detected in Transaction Monitoring (KYT SumSub). The notification contains transaction details and risk score. ##### Account created handler [#account-created-handler] Another new event type, which sends POST requests to a provided external URL when opening an account for a client. Request body contains the client’s identifiers, account number, and product details. ##### IB Reports [#ib-reports] The Reports section has been added. At the moment, Acquisition report and Payment report are available. ##### IB API Clients [#ib-api-clients] You can now connect your application and get API access to them via the Back Office. In Services > Security > API Clients, you can add an API client and get Client ID and Client Secret. You can delete the clients also, if necessary. #### Improvements [#improvements-65] * Integration with ChillPay has been adapted for payment statuses, success and error URLs were added to the method configuration. * Added validation to the Lots per unit field in Bonus Presets. Now zero value cannot be saved. * Balances on all remaining (Transfer, Deposit, Withdraw, MT5, MT4, Internal Transfer) pages are now updated asynchronously for quick and correct displaying of information. * The Wizards functionality has been improved: repeated signals of already completed wizards steps are blocked. * For the IB section, we have reworked and optimized the naming of entities related to Symbols. #### Resolved issues [#resolved-issues-56] * Fixed an issue due to which the Download file button did not work when exporting reports. * Fixed CSV-template for reports exporting. * Fixed an issue due to which client’s data from SumSub were not displayed in the client’s profile. * Fixed incorrect display of the password recovery window. * Fixed infinite loader in Safari when trying to load history in trading account details. * Fixed an issue due to which filter by clients registration date in IB did not work. * Fixed an issue due to which in the Firefox browser the tooltip was hidden behind currency balances on the Pie Chart Widget. * Fixed an issue that caused a wrong caption when depositing with the Wire method. * Fixed an issue that caused an error when interacting with Mercurio, if the client did not have the country value specified. * Fixed an issue due to which the Need help link in the footer could not correctly process HTML formatting. *** ### April 13, 2021 [#april-13-2021] #### New features [#new-features-55] ##### B2Margin platform groups editing [#b2margin-platform-groups-editing] Added the ability to remove/add trading platform groups for accounts. It is now possible to select several platform groups, but only one group in the domain. New functionality is available in account details. ##### New PS integrations [#new-ps-integrations-16] Two more payment systems have been integrated — **EeziePay** and **9PAY**. #### Improvements [#improvements-66] * In Antifraud, to the Identical IP Used By Multiple Accounts event, the Verification Level Monitor setting has been added, which allows you to specify the verification levels of the clients you want to check. * For B2Margin, it is now possible to authorize in the Trading UI by token. * For B2TRADER, a special comment is displayed for the operation when the hold is returned. * Monitoring and running of processes Introducing Brokers is now more convenient: we have analyzed and improved the captions of processes, making them more declarative. * We have added validation for the Options Type of the select field in the Registration Wizard. #### Resolved issues [#resolved-issues-57] * Fixed an issue due to which in the Back Office it was possible to create a withdrawal request with an empty value of the withdrawal wallet. * Fixed an issue that caused incorrect behavior (infinite loading, drag-and-drop block) of MT4/MT5 Payment Accounts and Trading Accounts widgets after they were added to the B2CORE UI dashboard. * Fixed an issue due to which the chart on the TradingView widget was not displayed for day/week/month time intervals. * Fixed an issue due to which the First Transfer Activation option for trading did not work. * Fixed an issue due to which the theme of the chart did not change if at the time of changing the theme of the B2CORE UI, it had not yet loaded. * Fixed an issue due to which the language of the interface was not displayed if only one localization was available. *** ### March 30, 2021 [#march-30-2021] #### Improvements [#improvements-67] * Antifraud updates: * We have added a check for unauthorized changes in the user’s verification level. * Information about all clients is now displayed in details of the Identical IP Used By Multiple Account notification. * MetaTrader5 platform and product updates: * The First Transfer Activation switch has been added to the product settings. If Enabled, all accounts are created with the Trade Enabled right turned off, this right is added upon the first successful transfer to the account. * The Max Inactivity field has been added to the platform settings. All accounts with a balance less than or equal to 0, for which there have been no balance transactions for more days than specified in this field, will be archived. The check runs once a week. * We have migrated HelpDesk settings to External Connections. Now B2CORE owners can configure HelpDesk by themselves with no waiting from the B2CORE team. * CryptoCompare Rates provider integration was adjusted to be able to insert a secret key in provider details. * We have added notifications about long report generation. * Vpay integration updates. The account parameter was moved to provider settings. * Now only admins with Update client’s request permission can audit requests. * We removed the non-relevant Account number field from the Total Balance pie chart. * Background images for banners are now supported for all pages. Previously we supported it only for the dashboard page. * Balances on the Dashboard and Wallets pages are now updated asynchronously for quick and correct displaying of information. #### Resolved issues [#resolved-issues-58] * Fixed an issue due to which an incorrect set of fields was displayed during Advanced registration for select, multiselect types with no configured options. * Fixed an issue due to which the Hide zero balance flag was missing in Accounts. * Fixed an issue due to which request color settings could not be applied. * Fixed validation process for advanced Registration step fields with numeric values ​​of the Name attribute. * Fixed an issue that caused the Amount missing in the Trades History. * Fixed problems with Signing in with desktop Safari. * Fixed an issue with the Asset widget where not all assets were displayed. * Fixed an issue that caused the Trading View widget to freeze in place when dragging and dropping and resizing adjacent widgets on the Dashboard. * Fixed an issue due to which a newly created wallet was displayed only after the page refresh. * Fixed an issue that caused incorrect fee calculation display for Buy Limit orders. * Fixed an issue due to which notifications upon ticket status changing were not displayed and some other small fixes in the HelpDesk. * Fixed an issue due to which for some clients 2FA confirmation via sms was unavailable. * Fixed an issue that caused incorrect tier fee displaying for some clients. *** ### March 16, 2021 [#march-16-2021] #### New features [#new-features-56] ##### Device management [#device-management] Device management provides an opportunity to take a unique “fingerprint” for each client login. Each fingerprint contains a set of data about the login and device. A list of devices is available on the Devices tab in client details. #### Improvements [#improvements-68] * We have added asynchronous updating of balances, which significantly speeds up the loading of user accounts. * We have added a profile picture and a nickname to Client Profile. * The Connections subsection was renamed to External Connections to improve clarity. For each connection, the Type field was added, which currently supports two values: Payment system and Other. Now when creating a new Deposit/Payout method only connections with Payment system type are available for selection. Also, the Enable/Disable option was added to connection details. * We have migrated SumSub configuration into the External Connections. Now B2CORE owners can configure the integration by themselves with no waiting from the B2CORE team. * Clients who are not connected to SumSub can now disable transaction monitoring. It is also possible now to specify a list of currencies to monitor. New settings are available in External Connections. * The Comment field was added to Services List and Services Groups. * Antifraud notifications can now be filtered by Responsible admin users. * Exceptions for antifraud notifications can now be set for the pattern of email addresses. For example, if the exception rule is created for `user*@email.com`, the antifraud system will not be triggered for any address which starts with `user` and ends with `@email.com` like `user+1@email.com`, etc. * Now we process callbacks without transaction IDs from B2BINPAY v2. * For deposit/payouts via WireDocuments provider admin users can now edit the amount of a transaction directly in the request. #### Resolved issues [#resolved-issues-59] * Fixed an issue due to which some clients could see infinite loading when viewing client accounts. * Fixed an issue that causes incorrect HTML displaying of the customer agreement on the registration page. * Fixed an issue due to which export of accounts by currencies did not work for some clients. * Fixed a rule which caused problems with the first name and last name fields when registering. * Fixed an issue that caused problems with verification levels via SumSub. * Fixed an issue due to which permissions for Clients Requests worked incorrectly. * Fixed problems with proxying requests at the server level. * Fixed Offline notification in the B2CORE UI interface. * Fixed an issue due to which some labels in the B2CORE UI could be displayed incorrectly. * Fixed an issue due to which order book in the Trading UI of B2TRADER and B2Margin could be displayed incorrectly after long inactivity. * Fixed an issue that caused incorrect display of the absent rate in the Total Balance widget. *** ### March 2, 2021 [#march-2-2021] #### New features [#new-features-57] ##### Wallets overview widget [#wallets-overview-widget] We have completed yet another Dashboard widget, the most representative and informative one, now end-users are able to check their asset balances and its USD-equivalent in both card and pie chart view. ##### Wizards v2 [#wizards-v2] We have completely reworked and polished wizards functionality, which provides you with an opportunity to configure on the side of the Back Office some parts of business logic, like registration, password recovery, profile changing, verification, etc. Each wizard has a list of steps available for installation and a list of default steps. The System > Wizards section is now available in the menu. We keep working on improvements. #### Improvements [#improvements-69] * We have developed Public Adv UI for all our B2TRADER Exchange clients. This feature is available upon account manager contact. * Now when changing the email of a user with the B2TRADER platform through the Back Office, the email will be automatically changed also on the platform. * Balance (USD) and Balance (EUR) fields were added to clients accounts. * We have improved handling of unsuccessful hedging. Now hedging status and logs are available in transaction details. * We have added transfer details, where you can also see Request Info if the transfer was made via the request. * We added Address Management to the Security section, where you can see which addresses the client has added to the whitelist. * We added Final Amount and Final Currency to Deposits and Payouts tables. * Now you can see which admin has added a comment on the Compliances Tab. * No more double verification for Mercuryo payment system: we can now use the SumSub token for it. * We have changed the logic of the calculation of Min Deposit Amount in product details, it will ignore the restriction in case of 0 or empty value. * We have made several adjustments to make Back Office tables more efficient and quicker to load. #### Resolved issues [#resolved-issues-60] * Fixed an issue due to which account balances in crypto were displayed with wrong precision. * Fixed an issue due to which historical info on email changes was not displayed. * Fixed an issue that caused Back Office freezing after transfer creation. * Fixed Antifraud false alerting for identical phone numbers used by multiple accounts. * Fixed an issue due to which Blockchain fees for withdrawals via B2BINPAY v2 were not displayed. * Fixed an issue that caused Bank Wire Local to not display information correctly. * Fixed an issue with permissions due to which the Client Services section could be unavailable for editing. * Fixed an issue that caused workspaces to reset after the refresh. * Fixed an issue due to which all widgets switched to the default currency pair after page refresh. * Fixed an issue which caused incorrect navigation by clicking on the logo. * Fixed an issue that caused incorrect values of 24h Volume/Change parameters in the Watchlist widget. *** ### February 16, 2021 [#february-16-2021] #### New features [#new-features-58] ##### Audit of financial operations [#audit-of-financial-operations] We have developed and implemented an audit algorithm that checks financial transactions and calculates abnormal discrepancies. New Audit button is now available in Clients > Requests. #### Improvements [#improvements-70] * We are proud to present Mailing 1.1 — we added: * sending an email to all customers at once, * importing recipients from a CSV file, * attachments to an email, * a visual editor for HTML tags, * a preview of an email, * easier template creation and saving an email as a template, * webhooks for Sendgrid. * We have improved hedging: now it can be enabled/disabled for a currency pair, and when exchanging hedging can be disabled for certain types of clients. * We unified transaction details for client requests. Now withdraw requests through all providers will show transaction details entered by end-user. * Now we can process more State codes for PAMM IB. * Upgraded twilio/sdk to version 6. #### Resolved issues [#resolved-issues-61] * Fixed an issue due to which a rejection reason was not displayed in the email notifications on a failed deposit. * Fixed an issue due to which the Created field was not displayed at exporting of transfers. * Fixed an issue that caused showing the incorrect currency for deposits with conversion. * Fixed an issue due to which user restrictions (such as Client Tag) did not apply to export. * Fixed an issue that caused an error when trying to create an applicant that already exists in SumSub. * Fixed an issue due to which wrong MT5 Accounts were displayed in client’s details. * Fixed an issue that caused an Access denied error for Client Services and Services Groups editing with appropriate permissions enabled. * Fixed an issue with failed deposits and actualized integration with Sticpay. * Fixed several issues in B2TRADER Advanced UI, such as a non-working light theme, infinite redirect when clicking on the logo, and other small fixes. * Fixed an issue that caused products to ignore Restrictions with Auto Creation on Login turned on. * Fixed an issue that caused Multiple IP Addresses to trigger with failed authorizations. *** ### February 2, 2021 [#february-2-2021] #### New features [#new-features-59] ##### SumSub transaction monitoring [#sumsub-transaction-monitoring] We have developed a completely new KYT functionality through SumSub integration. Now our clients who are connected to SumSub will be able to check their transactions and see the risk scores, where the money came from and all key signals about it. The new functionality was added to the Security > Transaction Monitoring section. #### Improvements [#improvements-71] * We have reworked integrations with B2Margin and B2TRADER to provide more stability and efficiency to these services. * We have reworked B2TRADERShadow needed for a converter hedging purposes platform to be connected through API keys that can be generated in the B2BX cabinet. * CoinmarketCap rates provider integration was updated and is now fully functional. * MT Accounts in the Back Office are now divided into tabs corresponding to the active platforms, to optimize loading and visualization of the tables. * Added Deposit Wallets export functionality to the Back Office. * All B2TRADER’s clients are now switched to a new updated, optimized advanced UI. * For top-ups with conversion we have removed unnecessary currency selection if there is only one currency available. * Other small UI improvements. #### Resolved issues [#resolved-issues-62] * Fixed an issue due to which 2FA stayed enabled for the enduser after disabling it from the Back Office. * Fixed an issue due to which multiple products with Liquidity type could be created. * Fixed an issue due to which the admins with specified client tags could not create new clients. Now a new client is created with the same tags as the admin. * Fixed an issue that caused blue Error snack bar to show on the login page. * Fixed an issue that could break monthly reports generation. * Fixed an issue that caused infinite loading of transfers table. * Fixed an issue due to which Ignored symbol groups selector was empty during bonus or bonus preset creation. * Fixed an issue due to which mobile numbers were displayed as confirmed while they were not, as twilio was not connected. * Fixed an issue that could not proceed Simplex deposit payment. * Fixed an issue that caused Decta payment gateway payments to stay in New status even though they were successful on the payment gateway side. * Fixed an issue that caused the login page to freeze sometimes when trying to log in. * Fixed an issue that caused incorrect layout display of verification levels in the B2CORE UI. * Fixed an issue due to which charts were not displayed in the trading view. * Fixed an issue due to which the payment details set in wire-custom were not displayed. **Introducing brokers (IB)** is a partnership program that enables brokers to expand their client network and boost their business growth and profits through revenue sharing. ## How it works [#how-it-works] The partnership program is based on a **revenue sharing** approach. Brokers attract new traders through their partners and, in return, reward these partners with a portion of the earnings generated from referred active traders. Rewards can be paid in any crypto- or fiat currency. The reward amount is calculated per trade and is paid to a partner based on pre-set payment schedules, which can be hourly, daily, weekly, or monthly. The programs are fully customizable to best suit your specific needs: * You can select from various joining options: from automatic registration of all clients to exclusive joining by personal invitation. * You can customize reward ratios for different symbols or symbol groups. * You can set up tiers by a number of active traders referred and/or trading volume to further motivate your partners. * You can configure levels to reward partners not only for trades of their direct clients, but also for trades of clients referred by their clients. * You can set personal reward plans for key partners. ## Key features [#key-features] ### Various trading platforms [#various-trading-platforms] B2CORE IB offers a real-time access to market data through integration with popular trading platforms: * [B2TRADER](https://b2broker.com/b2trader/) * [MetaTrader 4](https://www.metatrader4.com/en) * [MetaTrader 5](https://www.metatrader5.com/en) * [cTrader](https://ctrader.com/) * [DXtrade](https://dx.trade/) * Converter ### Diverse and flexible payment plans [#diverse-and-flexible-payment-plans] Explore our range of flexible payment plans and select the option that aligns perfectly with your business needs. Available payment plans depend on the platform. | Payment plan | B2TRADER | MT4 | MT5 | cTrader | DXtrade | Converter | | -------------- | -------------------- | -------------------- | -------------------- | -------------------- | -------------------- | -------------------- | | **Commission** | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | | **Lot** | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | | | **Max amount** | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | | | **Markup** | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | | | **Markup %** | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | | | **Spread** | :heavy\_check\_mark: | | :heavy\_check\_mark: | :heavy\_check\_mark: | | | To learn more, refer to [Payment plans](payment-plans). ### Advanced CRM tool [#advanced-crm-tool] With the B2CORE Back Office, you have access to a wide range of features and benefits: * Launch and manage multiple partnership programs. * Encourage your clients to attract new traders by offering them a variety of reward options and plans. * Monitor and control your partners’ performance and marketing campaigns. * Get valuable insights through robust data analysis and comprehensive reporting. ### Extended analytics for partners [#extended-analytics-for-partners] With the help of B2CORE UI, your partners can monitor their key performance indicators through comprehensive reports and beautiful charts, as well as customize their referral links. ### All-round equipped solution [#all-round-equipped-solution] B2CORE IB offers an extensive range of services and ready-to-go apps backed up by 24/7 multi-lingual support, ensuring that you have the necessary assistance whenever you need it. ## Broker [#broker] The owner of a partnership program. *** ## Direct client [#direct-client] The client who signed up to the B2CORE UI by a referral link of a partner. Let's say, it is *Jill*. *Jill* joined the partnership program by *Jack's* referral link. *** ## IB type [#ib-type] The set of criteria based on which a broker pays rewards and the set of parameters for calculating these rewards. The broker can configure more than one IB type with separate settings and, for example, different types of registration. *** ## Level [#level] The setting of an IB type. It determines how many participants in the chain from the partner to the trader receive a reward. By default, only Level 1 is configured, which means that the broker pays rewards only for trades of direct clients. Let's say, the broker pays *Jill* the Level 1 ratio for the trades of the direct clients. For example, the Level 1 multiplier is 1. But the broker may want to pay *Jack* the Level 2 ratio for the same trades (because if not for *Jack*, *Jill* might not have joined the program and would not have brought so many clients). For example, the Level 2 multiplier is 0.5. And so on. The depth of the clients tree is not limited, and the broker chooses the number of paid levels. With the [Max amount](payment-plans#max-amount) payment plan, the broker can also limit the total reward amount and specify reward amounts for each level as a fixed value, not a ratio. *** ## Master IB [#master-ib] The special status of a partner. For such partners, a broker can configure an individual number of paid levels with a fix ratio. The Master IB status overwrites settings of a partnership program for this partner. *** ## Partner [#partner] The client who signed up to the B2CORE UI and joined a partnership program. Let's say, it is *Jack*. After joining the partnership program, *Jack* receives a referral link. *** ## Personal ratio [#personal-ratio] The individual configuration of reward amount. For example, the broker can pay increased rewards to partners who bring many clients and trades. Unlike tiers, this setting is not automatic and is set manually by the broker for selected partners. *** ## Referral link [#referral-link] The personal link of a partner which usually leads to the Sign up page of the B2CORE UI. All clients who signed up by this link are [direct clients](key-terms#direct-client) of this partner. *** ## SubIB [#subib] The client who signed up to the B2CORE UI by a referral link of a partner and then joined a partnership program. In other words, this client decided to become a partner too. Let's say, it is *Jill*. Clients brought by *Jill* are not direct clients of *Jack*, but the broker can still trace them back: *Jack* → *Jill* → *Clients brought by Jill*. *Jill* has many friends, so 100 of them signed up to the B2CORE UI and started trading. *** ## Tier [#tier] The setting of an IB type. With the help of tiers a broker can encourage partners with extra motivation. For example, the broker can configure increased reward ratio for each partner who brings 100 active clients in 30 days. Or increased reward ratio for each partner whose clients have traded 1,000 lots in 14 days. Or both at once. A payment plan is part of IB type configuration that the Broker sets when launching a partnership program. **Key points** * Payment plans can be configured for a single symbol or symbol group. For a step-by-step tutorial, refer to [How to set up a payment plan for symbols](how-to-articles/how-to-set-up-a-payment-plan-for-symbols). * The calculated reward amounts can be additionally multiplied by level, tier, personal or Master ratio, if applicable. * If a partner's wallet currency differs from the reward currency, then the reward amount is converted into the wallet currency. The conversion occurs at the current exchange rate at the time of calculation. * Trading volume used for reward calculations can be changed by a platform group modifier. For example, the lot size for a group is set to 0.4 (**Introducing brokers** > **Platforms** > **Groups**). If the trade volume is 100 lots, this value will be multiplied by the group lot size: **100 lots × 0.4 = 40 lots**. The available payment plans are described below. Pay attention to a list of trading platforms to which each plan is applicable. **Disclaimer** All values given in this section are for demonstration purposes only and do not constitute a recommendation. ## Commission [#commission] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, cTrader, DXtrade, and Converter platforms. The Broker pays partners a fixed percentage of commissions received for trades executed by their clients: **Reward amount = Commission × Percentage** Where: * **Commission** is a fee amount that a trader paid to the Broker for executing a trade. * **Percentage** is a commission percentage value specified by the Broker in the IB type settings. This is a percentage of the total commission received by the Broker. Consider an example of *Jack*, whose client brought 70 USD in commissions to the Broker, while the set commission percentage is 10%. In this case, the amount rewarded to *Jack* is calculated as follows: **70 USD × 10% = 7 USD**. **Implementation details of the Commission payment plan on the Converter platform** When the *Commission* plan is used on the Converter platform, brokers pay partners a fixed percentage of markups received from exchange transactions made by their clients. These markups are configured in B2CORE, applied to each exchange transaction, and then recorded as commissions. The partner's reward is then calculated based on the recorded commissions, using the percentage specified in the *Commission* plan. ## Lot [#lot] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, cTrader, and DXtrade platforms. The Broker pays partners a fixed amount for each lot traded by their clients: **Reward amount = Trading volume, in lots × Amount per lot** Where: * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Amount per lot** is a fixed reward amount to be paid per lot, specified by the Broker along with the reward currency. The reward currency doesn't depend on the traded symbol. That is, the Broker can specify USD as the reward currency for the ETH/EUR symbol. Consider an example of *Jill*, whose client has traded 10 lots while the reward amount per lot is 2 USD. In this case, the amount rewarded to *Jill* is calculated as follows: **10 lots × 2 USD = 20 USD**. Keep in mind that you must monitor profitability using this scheme as the reward amounts may exceed the commissions charged. ## Max amount [#max-amount] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, cTrader, and DXtrade platforms. The Broker pays partners a fixed amount for each lot traded by their clients, while also having the opportunity to specify both the maximum reward amount and the reward amount for each configured level. With the **Lot** payment plan, the Broker specifies the reward amount per lot for Level 1. The rewards for subsequent levels (if configured) are calculated as a percentage of Level 1 reward. With the **Max amount** payment plan, the Broker limits the total reward amount paid to partners, regardless of the number of levels, and then specifies the exact amount a partner receives at each level. The following example illustrates how the reward amount can be distributed across different levels. | | **1 level** | **2 levels** | **3 levels** | **4 levels** | **5 levels** | **6 levels** | | ----------- | ----------- | ------------ | ------------ | ------------ | ------------ | ------------ | | **Level 1** | 10 USD | 8 USD | 5 USD | 5 USD | 4 USD | 3 USD | | **Level 2** | | 2 USD | 3 USD | 3 USD | 2 USD | 2 USD | | **Level 3** | | | 2 USD | 1 USD | 2 USD | 2 USD | | **Level 4** | | | | 1 USD | 1 USD | 1 USD | | **Level 5** | | | | | 1 USD | 1 USD | | **Level 6** | | | | | | 1 USD | Based on the table above, consider an example of *Jack*, whose direct client has traded 10 lots. In this case, the reward is paid only to Level 1, and the amount rewarded to *Jack* is calculated as follows: **10 lots × 10 USD = 100 USD**. Next, consider an example of *Jill* who participates in *Jack's* sub-IB program. If *Jill's* direct client has traded 10 lots, then the reward amount is distributed between two levels: * at Level 1, the amount rewarded to *Jill* is calculated as follows: **10 lots × 8 USD = 80 USD** * at Level 2, the amount rewarded to *Jack* is calculated as follows: **10 lots × 2 USD = 20 USD** In this case, the total reward amount is 100 USD, that's 10 USD per each traded lot. ## Markup [#markup] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, cTrader, and DXtrade platforms. The Broker pays partners rewards based on the volume traded by their clients and a markup specified in points: **Reward amount = Trading volume, in lots × Markup, in points** Where: * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Markup** is a markup value to be paid per lot, specified by the broker in the IB type settings. For example, the markup set on a platform is 14 points, and *Jack* decides to pay partners 1/7 of this markup value, that is 2 points. After *Jack's* clients have traded 10 lots of AUD/CAD, the amount rewarded to *Jack* is calculated as follows: **10 lots × 2 points = 20 CAD**. ## Markup % [#markup-] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, cTrader, and DXtrade platforms. The broker pays the partners a percentage of the markup. The calculation formula depends on the trade side: * For **sell** trades: **Reward amount = Trading volume × Trade price × 2 × Markup % / (1 + Markup %)** * For **buy** trades: **Reward amount = Trading volume × Trade price × 2 × Markup % / (1 – Markup %)** Where: * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Trade price** is an execution price at which the asset was sold or bought by a trader as a result of a trade. * **Markup %** is a markup value, in percents, specified by the broker in the IB type settings. For example, the markup value is 20% and a client of *Jill* buys 15 lots at 4,000. In this case, the amount rewarded to *Jill* is calculated as follows: **15 × 4,000 × 2 × 0.2 / (1 - 0.2) = 30,000**. ## Spread [#spread] > Supported for the B2TRADER, cTrader, and MetaTrader 5 platforms. The broker pays the partner a percentage of the market spread value at the moment of the trade. **Reward amount = (Market ask – Market bid) × Contract size × Trading volume × Percentage / 100** Where: * **Market ask**, **Market bid** are top-of-the-book bid and ask market prices valid at the moment of the trade, in the quote currency. * **Contract size** is a standardized quantity of asset per lot, set on a trading platform. * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Percentage** is a spread percentage value specified by the Broker in the IB type settings. Consider an example of *Jill*, whose client traded on the EUR/USD market: * **Market ask** = 1.08253 * **Market bid** = 1.07252 * **Contract size** = 100,000 * **Trading volume** = 2 lots * **Percentage** = 50% In this case, the amount rewarded to *Jill* is calculated as follows: **(1.08253 – 1.07252) × 100,000 × 2 × 50 / 100 = 1,001 USD**. ## Platform Spread % [#platform-spread-] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, and cTrader platforms. This payment plan only applies to **closed** trade positions. The broker pays the partner a percentage of the spread value recorded by the trading platform for the closed trade. Unlike the **Spread** plan, which uses live market bid and ask prices, this plan uses the spread value stored in the trade data by the platform itself. **Reward amount = Platform spread × Contract size × Trading volume × Percentage / 100** Where: * **Platform spread** is the spread value recorded by the trading platform at the time of trade execution, in the quote currency. * **Contract size** is a standardized quantity of asset per lot, set on a trading platform. * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Percentage** is a spread percentage value specified by the Broker in the IB type settings. Consider an example of *Jack*, whose client traded EUR/USD: * **Platform spread** = 0.00200 * **Contract size** = 100,000 * **Trading volume** = 2 lots * **Percentage** = 50% In this case, the amount rewarded to *Jack* is calculated as follows: **0.00200 × 100,000 × 2 × 50 / 100 = 200 USD**. ## Platform Markup % [#platform-markup-] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, and cTrader platforms. This payment plan only applies to **closed** trade positions. The broker pays the partner a percentage of the markup revenue generated from the closed trade. Unlike the **Markup %** plan, which uses a manually configured markup value, this plan uses the actual markup recorded by the trading platform based on the broker's symbol configuration. The calculation formula depends on the trade side: * For **sell** trades: **Reward amount = Trading volume × Trade price × 2 × Platform markup % / (1 + Platform markup %)** * For **buy** trades: **Reward amount = Trading volume × Trade price × 2 × Platform markup % / (1 – Platform markup %)** Where: * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Trade price** is an execution price at which the asset was sold or bought by a trader as a result of a trade. * **Platform markup %** is the markup percentage recorded by the trading platform based on the broker's symbol markup configuration. For example, the platform markup is 20% and a client of *Jack* buys 15 lots at 4,000. In this case, the amount rewarded to *Jack* is calculated as follows: **15 × 4,000 × 2 × 0.2 / (1 - 0.2) = 30,000**. To join your first partnership program and become a partner: Sign in to the B2CORE UI with your credentials. Expand the partnership section in the main menu (labeled **IB Room** or **Partners**, depending on the broker configuration) and click any option in the expanded menu, such as **Partner Dashboard**, **Promo**, or **Reports**. In the **Partner Program** dropdown, select a partnership program that best meets your requirements. After selecting a partnership program, you can see its description that provides important information about the program. Click **Become a Partner** to join the selected partnership program. If several partnership programs are available to you and you've already joined one of them and want to join one more: Expand the partnership section in the main menu (labeled **IB Room** or **Partners**, depending on the broker configuration) and click any option in the expanded menu, such as **Partner Dashboard**, **Promo**, or **Reports**. In the dropdown located at the top of the page, select **Become a Partner**. In the displayed **Partner Program** dropdown, select a partnership program to which you want to join. Click **Become a Partner** to join the selected partnership program. Depending on the platform configuration, you may be allowed to join the selected partnership program immediately or after a B2CORE admin confirms your request for joining the program. After joining your first partnership program, you can access the menu options located under the partnership section (**IB Room** or **Partners**) in the main menu. The Market Data session provides real-time order book streaming via the FIX 4.4 protocol. Use this session to subscribe to price updates for specific trading instruments and receive continuous market data. For FIX connection settings (host, port, SenderCompID, TargetCompID, credentials), contact your broker. This page covers the **Market Data** session only. For trading operations (order placement, execution reports), use the [Trading](trading) session. ## Supported message types [#supported-message-types] The following values can be assigned to the `<35>` MsgType field: * `A` — Logon (Client → B2TRADER) * `0` — Heartbeat (Client ↔ B2TRADER) * `1` — Test Request (Client ↔ B2TRADER) * `3` — Reject (Client ← B2TRADER) * `4` — Sequence Reset (Client ↔ B2TRADER) * `5` — Logout (Client ↔ B2TRADER) * `V` — Market Data Request (Client → B2TRADER) * `W` — Market Data — Snapshot/Full Refresh (Client ← B2TRADER) * `X` — Market Data — Incremental Refresh (Client ← B2TRADER) * `Y` — Market Data Request Reject (Client ← B2TRADER) * `j` — Business Reject (Client ← B2TRADER) ## Getting started [#getting-started] ### Connection [#connection] To connect to the Market Data session, use the following parameters provided by B2TRADER: * **Host and port**: The Market Data endpoint (provided separately from the Trading endpoint) * **SenderCompID**: Your client identifier for the Market Data session * **TargetCompID**: The server identifier for the Market Data session * **Protocol**: FIX 4.4 The Market Data connection does not require SSL. ### Message structure [#message-structure] **Standard Header** All FIX messages must begin with a Standard Header containing the following fields: **`8 BeginString`** `String` Identifies the FIX version (`FIX.4.4`). Always the first field in a message. **`9 BodyLength`** `int` The automatically computed message length, in bytes. Always the second field. **`35 MsgType`** `String` The message type. See [Supported message types](#supported-message-types) for possible values. Always the third field. **`34 MsgSeqNum`** `int` The message sequence number, incremented by 1 for each consecutive message. **`49 SenderCompID`** `String` The identifier of the message sender. Provided by B2TRADER. **`52 SendingTime`** `Timestamp` The date and time when the message was sent, in UTC: `YYYYMMDD-HH:MM:SS.sss`. **`56 TargetCompID`** `String` The identifier of the message recipient. Provided by B2TRADER. *** **Standard Trailer** All FIX messages must end with a Standard Trailer: **`10 CheckSum`** `int` A three-digit checksum. Always the last field in a message. ### Logon (A) [#logon-a] This message is sent by the client to initiate a FIX session. It must be the first message in each connection. **`1 Account`** `String` The account identifier. Required. Provided by B2TRADER. **`98 EncryptMethod`** `int` The encryption method. Required. Must be `0` (no encryption). **`108 HeartBtInt`** `int` The heartbeat interval, in seconds. Required. Indicates how often the server sends Heartbeat messages as part of a connection health check. **`141 ResetSeqNumFlag`** `Boolean` Indicates whether both parties should reset the currently used sequence numbers. Optional. **`553 Username`** `String` The client username. Required. Provided by B2TRADER. **`554 Password`** `String` The client password. Required. Provided by B2TRADER. ```text title="Request (Client → B2TRADER)" 8=FIX.4.4^9=138^35=A^1=68a4446ac84827ff5cd35c74^34=1^52=20231218-07:59:06.000^49=sender_b2trader^56=target_b2trader^554=password^553=username^98=0^108=30^10=139^ ``` ```text title="Response (B2TRADER → Client)" 8=FIX.4.4^9=112^35=A^1=68a4446ac84827ff5cd35c74^34=1^49=target_b2trader^52=20231218-07:59:06.655^56=sender_b2trader^98=0^108=30^10=009^ ``` ### Session maintenance [#session-maintenance] #### Heartbeat (0) [#heartbeat-0] This message is sent back and forth between the server and the client to check the connection status and in response to Test Request messages. **`112 TestReqID`** `String` The identifier of a Test Request in response to which this Heartbeat is sent. Required when the Heartbeat is a response to a Test Request. ```text title="Example" 8=FIX.4.4^9=73^35=0^34=2^52=20231218-07:59:36.000^49=sender_b2trader^56=target_b2trader^10=202^ ``` #### Test Request (1) [#test-request-1] This message is sent back and forth between the server and the client as a means of connectivity check. If a Heartbeat is not received within the expected interval, a Test Request is sent; the recipient must respond with a Heartbeat containing the same `<112>` TestReqID. **`112 TestReqID`** `String` The identifier of a Test Request. Optional. ```text title="Example" 8=FIX.4.4^9=81^35=1^34=137^52=20231218-10:12:38.000^49=sender_b2trader^56=target_b2trader^112=2^10=040^ ``` #### Sequence Reset (4) [#sequence-reset-4] This message indicates the sequence number of the next message from the sender, immediately following the Sequence Reset. This may be necessary to recover from a disconnect when some messages were lost or their resending is not desirable. **`123 GapFillFlag`** `Boolean` Indicates that this message replaces missing messages that won't be resent. Optional. Possible values: * `Y` — Gap fill: `<34>` MsgSeqNum is valid and indicates the beginning of the gap fill range * `N` — Sequence reset: `<34>` MsgSeqNum is ignored. Should only be used in disaster recovery situations **`36 NewSeqNo`** `int` The new sequence number. Required. ```text title="Example" 8=FIX.4.4^9=84^35=4^34=6^49=target_b2trader^52=20231219-21:11:38.578^56=sender_b2trader^123=Y^36=8^10=231^ ``` #### Logout (5) [#logout-5] This message is sent by the client or server to terminate a session. When terminated, the possible reason is specified in the `<58>` Text field. **`58 Text`** `String` The detailed information about the reason for logging out. Optional. ```text title="Request (Client → B2TRADER)" 8=FIX.4.4^9=83^35=5^34=5^52=20231218-13:40:48.000^49=sender_b2trader^56=target_b2trader^58=ST1234^10=229^ ``` ```text title="Response (B2TRADER → Client)" 8=FIX.4.4^9=75^35=5^34=748^49=target_b2trader^52=20231218-13:40:49.016^56=sender_b2trader^10=064^ ``` ### Reject (3) [#reject-3] This message is sent by the server upon receiving a malformed message from the client. The rejection reason is specified in the `<373>` SessionRejectReason field. This message is unrelated to application-level rejections (Market Data Request Reject and Business Reject). **`45 RefSeqNum`** `int` The sequence number of the rejected message (`<34>` MsgSeqNum). Required. **`371 RefTagID`** `int` The tag number of the field that caused message rejection. Optional. **`372 RefMsgType`** `String` The type of the rejected message (`<35>` MsgType). Optional. **`373 SessionRejectReason`** `int` The reason why the message is rejected. Optional. Possible values: * `0` — Invalid tag number * `1` — Required tag missing * `2` — Tag not defined for this message type * `3` — Undefined tag * `4` — Tag has no value assigned * `5` — Value is incorrect (out of range) for this tag * `6` — Incorrect value data format * `7` — Decryption issue * `8` — Signature problem * `9` — CompID issue * `10` — SendingTime accuracy issue * `11` — Invalid MsgType * `12` — XML validation error * `13` — Same tag appears more than once * `14` — Tag specified not in required order * `15` — Wrong order of repeating group fields * `16` — Incorrect NumInGroup count for repeating group * `17` — Non-"Data" value includes field delimiter (SOH character) * `99` — Other **`58 Text`** `String` The detailed information about the rejection reason. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=125^35=3^34=193^52=20231219-22:41:16.000^49=target_b2trader^56=sender_b2trader^45=18^371=262^372=V^373=1^58=Required tag missing^10=122^ ``` *** ## Market Data Request (V) [#market-data-request-v] This message is sent by the client to subscribe to real-time quoting data for a specified ticker symbol. After subscribing, the server sends an initial Market Data — Snapshot/Full Refresh, followed by continuous Market Data — Incremental Refresh messages with each market data update. To subscribe to multiple symbols, send a separate Market Data Request for each symbol. To unsubscribe, send a Market Data Request with `<263>` SubscriptionRequestType set to `2`. All subscriptions are also terminated when the session is closed via Logout. **`262 MDReqID`** `String` The identifier of the Market Data Request. Required. Must be unique for the duration of each session. When unsubscribing, specify the ID of a previous request to discard. **`263 SubscriptionRequestType`** `int` The type of response expected from the server. Required. Possible values: * `1` — Subscribe: receive updates as the market status changes * `2` — Unsubscribe: stop streaming market data for the specified symbol **`264 MarketDepth`** `int` The market depth for an order book snapshot. Required. Possible values: * `0` — Full order book * `1` — Top-of-the-book prices **`265 MDUpdateType`** `int` The update type. Required. Must be `1` (incremental updates for changed price levels only). **`267 NoMDEntryTypes`** `int` The number of `<269>` MDEntryType entries requested. Required. > Repeating group: **`269 MDEntryType`** `int` The side of the quote. Required. Possible values: * `0` — Bid * `1` — Ask **`146 NoRelatedSym`** `int` The number of ticker symbols. Required. Must be `1`. To subscribe to multiple symbols, send a separate request for each. > Repeating group: **`55 Symbol`** `String` The market identifier. Required. Format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. ```text title="Example (Client → B2TRADER)" 8=FIX.4.4^9=141^35=V^34=7^52=20231220-08:11:50.000^49=sender_b2trader^56=target_b2trader^262=1235^263=1^264=0^265=1^267=2^269=0^269=1^146=1^55=spot.btc_usdt^10=250^ ``` ## Market Data — Snapshot/Full Refresh (W) [#market-data--snapshotfull-refresh-w] This message is sent by the server after the client subscribes to a ticker symbol. It contains the full current state of the order book. Subsequent updates are delivered as Market Data — Incremental Refresh messages. **`55 Symbol`** `String` The market identifier. Format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`262 MDReqID`** `String` The identifier of the originating Market Data Request. **`268 NoMDEntries`** `int` The number of market data entries following. The value is `0` if the order book is empty. > Repeating group (present when `<268>` NoMDEntries > 0): **`269 MDEntryType`** `int` The side of the quote. Conditional — required if `<268>` NoMDEntries is not `0`. Possible values: * `0` — Bid * `1` — Ask **`270 MDEntryPx`** `Price` The price of the market data entry. Conditional — required if `<268>` NoMDEntries is not `0`. **`271 MDEntrySize`** `Qty` The tradable volume of the market data entry. Conditional — required if `<268>` NoMDEntries is not `0`. **`278 MDEntryID`** `String` A unique market data entry identifier. Conditional — required if `<268>` NoMDEntries is not `0`. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=507^35=W^34=48^49=target_b2trader^52=20231222-14:40:39.983^56=sender_b2trader^55=spot.btc_usdt^262=1235^268=9^269=1^270=1.10338^271=3000000^278=4441516524^269=1^270=1.10337^271=1000000^278=4441516521^269=1^270=1.10339^271=5000000^278=4441516523^269=1^270=1.10335^271=600000^278=4441516522^269=0^270=1.10333^271=500000^278=4441516520^269=0^270=1.10332^271=1000000^278=4441516517^269=0^270=1.10331^271=3000000^278=4441516516^269=0^270=1.10334^271=100000^278=4441516519^269=0^270=1.1033^271=5000000^278=4441516518^10=025^ ``` ## Market Data — Incremental Refresh (X) [#market-data--incremental-refresh-x] This message is continuously sent by the server after the initial Snapshot/Full Refresh. Each message includes only the changes since the previous update. **`55 Symbol`** `String` The market identifier. Format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`262 MDReqID`** `String` The identifier of the originating Market Data Request. **`268 NoMDEntries`** `int` The number of market data entries following. The value is `0` if the order book is empty. > Repeating group (present when `<268>` NoMDEntries > 0): **`269 MDEntryType`** `int` The side of the quote. Conditional — required if `<268>` NoMDEntries is not `0`. Possible values: * `0` — Bid * `1` — Ask **`270 MDEntryPx`** `Price` The price of the market data entry. Conditional — required if `<268>` NoMDEntries is not `0`. **`271 MDEntrySize`** `Qty` The tradable volume of the market data entry. Conditional — required if `<268>` NoMDEntries is not `0`. **`278 MDEntryID`** `String` A unique market data entry identifier. Conditional — required if `<268>` NoMDEntries is not `0`. * Must be unique among active entries when `<279>` MDUpdateAction is `0` (New) * Must match the previous `<278>` MDEntryID when `<279>` MDUpdateAction is `1` (Change) or `2` (Delete) **`279 MDUpdateAction`** `int` The update type. Conditional — required if `<268>` NoMDEntries is not `0`. Possible values: * `0` — New * `1` — Change * `2` — Delete **`58 Text`** `String` Additional context. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=201^35=X^34=52^49=target_b2trader^52=20231222-14:40:41.150^56=sender_b2trader^55=spot.btc_usdt^262=1235^268=2^279=1^269=0^270=1.10334^271=200000^278=4441516519^279=2^269=1^270=1.10339^271=0^278=4441516523^10=092^ ``` ## Market Data Request Reject (Y) [#market-data-request-reject-y] This message is sent by the server to reject a Market Data Request due to business or technical reasons. **`262 MDReqID`** `String` The identifier of the rejected Market Data Request. Required. **`281 MDReqRejReason`** `int` The reason why the request is rejected. Optional. Possible values: * `0` — Unknown symbol * `1` — Duplicate MDReqID * `2` — Insufficient bandwidth * `3` — Insufficient permissions * `4` — Unsupported SubscriptionRequestType * `5` — Unsupported MarketDepth * `6` — Unsupported MDUpdateType * `8` — Unsupported MDEntryType **`58 Text`** `String` The detailed information about the rejection reason. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=118^35=Y^34=3^49=target_b2trader^52=20231221-10:25:11.849^56=sender_b2trader^262=1234^58=symbol 'btcusd' is not supported^10=104^ ``` ## Business Reject (j) [#business-reject-j] This message is sent by the server to reject a message due to a business-level issue not addressed by the standard Market Data Request Reject or session-level Reject. **`45 RefSeqNum`** `int` The sequence number of the rejected message (`<34>` MsgSeqNum). Required. **`372 RefMsgType`** `String` The type of the rejected message (`<35>` MsgType). Optional. **`380 BusinessRejectReason`** `int` The reason why the request is rejected. Required. Possible values: * `0` — Other * `1` — Unknown ID * `2` — Unknown Security * `3` — Unsupported MsgType * `4` — Application not available * `5` — Conditionally required field missing * `6` — Not authorized * `7` — DeliverTo firm not available at this time **`58 Text`** `String` The detailed information about the rejection reason. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=120^35=j^34=2^49=target_b2trader^52=20231219-22:30:39.617^56=sender_b2trader^45=133^58=Unsupported Message Type^372=V^380=3^10=166^ ``` The Trading session enables order placement and execution management via the FIX 4.4 protocol. Use this session to submit orders and receive real-time execution reports for your trading activity. For FIX connection settings (host, port, SenderCompID, TargetCompID, credentials), contact your broker. This page covers the **Trading** session only. For real-time order book streaming, use the [Market Data](market-data) session. ## Supported message types [#supported-message-types] The following values can be assigned to the `<35>` MsgType field: * `A` — Logon (Client → B2TRADER) * `0` — Heartbeat (Client ↔ B2TRADER) * `1` — Test Request (Client ↔ B2TRADER) * `3` — Reject (Client ← B2TRADER) * `4` — Sequence Reset (Client ↔ B2TRADER) * `5` — Logout (Client ↔ B2TRADER) * `D` — New Order Single (Client → B2TRADER) * `8` — Execution Report (Client ← B2TRADER) * `j` — Business Reject (Client ← B2TRADER) ## Getting started [#getting-started] ### Connection [#connection] To connect to the Trading session, use the following parameters provided by B2TRADER: * **Host and port**: The Trading endpoint (provided separately from the Market Data endpoint) * **SenderCompID**: Your client identifier for the Trading session * **TargetCompID**: The server identifier for the Trading session * **Protocol**: FIX 4.4 The Trading connection requires SSL with a self-signed certificate. ### Message structure [#message-structure] **Standard Header** All FIX messages must begin with a Standard Header containing the following fields: **`8 BeginString`** `String` Identifies the FIX version (`FIX.4.4`). Always the first field in a message. **`9 BodyLength`** `int` The automatically computed message length, in bytes. Always the second field. **`35 MsgType`** `String` The message type. See [Supported message types](#supported-message-types) for possible values. Always the third field. **`34 MsgSeqNum`** `int` The message sequence number, incremented by 1 for each consecutive message. **`49 SenderCompID`** `String` The identifier of the message sender. Provided by B2TRADER. **`52 SendingTime`** `Timestamp` The date and time when the message was sent, in UTC: `YYYYMMDD-HH:MM:SS.sss`. **`56 TargetCompID`** `String` The identifier of the message recipient. Provided by B2TRADER. *** **Standard Trailer** All FIX messages must end with a Standard Trailer: **`10 CheckSum`** `int` A three-digit checksum. Always the last field in a message. ### Logon (A) [#logon-a] This message is sent by the client to initiate a FIX session. It must be the first message in each connection. **`1 Account`** `String` The account identifier. Required. Provided by B2TRADER. **`98 EncryptMethod`** `int` The encryption method. Required. Must be `0` (no encryption). **`108 HeartBtInt`** `int` The heartbeat interval, in seconds. Required. Indicates how often the server sends Heartbeat messages as part of a connection health check. **`141 ResetSeqNumFlag`** `Boolean` Indicates whether both parties should reset the currently used sequence numbers. Optional. **`553 Username`** `String` The client username. Required. Provided by B2TRADER. **`554 Password`** `String` The client password. Required. Provided by B2TRADER. ```text title="Request (Client → B2TRADER)" 8=FIX.4.4^9=117^35=A^1=68a4446ac84827ff5cd35c74^34=1^52=20231218-07:59:06.000^49=sender_b2trader^56=target_b2trader^554=password^553=username^98=0^108=30^10=117^ ``` ```text title="Response (B2TRADER → Client)" 8=FIX.4.4^9=93^35=A^1=68a4446ac84827ff5cd35c74^34=225^49=target_b2trader^52=20231218-07:59:06.655^56=sender_b2trader^98=0^108=30^10=054^ ``` ### Session maintenance [#session-maintenance] #### Heartbeat (0) [#heartbeat-0] This message is sent back and forth between the server and the client to check the connection status and in response to Test Request messages. **`112 TestReqID`** `String` The identifier of a Test Request in response to which this Heartbeat is sent. Conditional — required when sent in response to a Test Request. ```text title="Example" 8=FIX.4.4^9=79^35=0^34=2^52=20231218-07:59:36.000^49=sender_b2trader^56=target_b2trader^10=156^ ``` #### Test Request (1) [#test-request-1] This message is sent back and forth between the server and the client as a means of connectivity check. If a Heartbeat is not received within the expected interval, a Test Request is sent; the recipient must respond with a Heartbeat containing the same `<112>` TestReqID. **`112 TestReqID`** `String` The identifier of a Test Request. Required. ```text title="Example" 8=FIX.4.4^9=87^35=1^34=137^52=20231218-10:12:38.000^49=sender_b2trader^56=target_b2trader^112=2^10=250^ ``` #### Sequence Reset (4) [#sequence-reset-4] This message indicates the sequence number of the next message from the sender, immediately following the Sequence Reset. This may be necessary to recover from a disconnect when some messages were lost or their resending is not desirable. **`123 GapFillFlag`** `Boolean` Indicates that this message replaces missing messages that won't be resent. Optional. Possible values: * `Y` — Gap fill: `<34>` MsgSeqNum is valid and indicates the beginning of the gap fill range * `N` — Sequence reset: `<34>` MsgSeqNum is ignored. Should only be used in disaster recovery situations **`36 NewSeqNo`** `int` The new sequence number. Required. ```text title="Example" 8=FIX.4.4^9=90^35=4^34=6^49=target_b2trader^52=20231219-21:11:38.578^56=sender_b2trader^123=Y^36=8^10=176^ ``` #### Logout (5) [#logout-5] This message is sent by the client or server to terminate a session. When terminated, the possible reason is specified in the `<58>` Text field. **`58 Text`** `String` The detailed information about the reason for logging out. Optional. ```text title="Request (Client → B2TRADER)" 8=FIX.4.4^9=105^35=5^34=5^52=20231218-13:40:48.000^49=sender_b2trader^56=target_b2trader^58=Session terminated by client^10=183^ ``` ```text title="Response (B2TRADER → Client)" 8=FIX.4.4^9=81^35=5^34=748^49=target_b2trader^52=20231218-13:40:49.016^56=sender_b2trader^10=009^ ``` ### Reject (3) [#reject-3] This message is sent by the server upon receiving a malformed message from the client. The rejection reason is specified in the `<373>` SessionRejectReason field. This message is unrelated to application-level rejections (Execution Report with rejected status and Business Reject). **`45 RefSeqNum`** `int` The sequence number of the rejected message (`<34>` MsgSeqNum). Required. **`371 RefTagID`** `int` The tag number of the field that caused message rejection. Optional. **`372 RefMsgType`** `String` The type of the rejected message (`<35>` MsgType). Optional. **`373 SessionRejectReason`** `int` The reason why the message is rejected. Optional. Possible values: * `0` — Invalid tag number * `1` — Required tag missing * `2` — Tag not defined for this message type * `3` — Undefined tag * `4` — Tag has no value assigned * `5` — Value is incorrect (out of range) for this tag * `6` — Incorrect value data format * `7` — Decryption issue * `8` — Signature problem * `9` — CompID issue * `10` — SendingTime accuracy issue * `11` — Invalid MsgType * `12` — XML validation error * `13` — Same tag appears more than once * `14` — Tag specified not in required order * `15` — Wrong order of repeating group fields * `16` — Incorrect NumInGroup count for repeating group * `17` — Non-"Data" value includes field delimiter (SOH character) * `99` — Other **`58 Text`** `String` The detailed information about the rejection reason. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=128^35=3^34=193^52=20231219-22:41:16.000^49=target_b2trader^56=sender_b2trader^45=18^371=11^372=D^373=1^58=Required tag missing: ClOrdID^10=126^ ``` *** ## New Order Single (D) [#new-order-single-d] This message is sent by the client to place a new order. The server responds with an Execution Report confirming the order status. For details on supported order types, see [Order types](../get-started/order-types). For details on time-in-force options, see [Time in force](../get-started/time-in-force). **`11 ClOrdID`** `String` The unique client-assigned order identifier. Required. **`1 Account`** `String` The account identifier. Required. Provided by B2TRADER. **`55 Symbol`** `String` The market identifier. Required. Format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. **`54 Side`** `char` The order side. Required. Possible values: * `1` — Buy * `2` — Sell **`38 OrderQty`** `Qty` The order quantity. Required. Must be greater than zero. The decimal precision must not exceed the market's amount scale, and the value must be at least the market's minimum amount. **`40 OrdType`** `char` The order type. Required. Possible values: * `1` — Market * `2` — Limit **`59 TimeInForce`** `char` The order's time-in-force policy. Required. Possible values: * `0` — Day * `1` — Good Till Cancel (GTC) * `3` — Immediate or Cancel (IOC) * `4` — Fill or Kill (FOK) * `6` — Good Till Date (GTD) **`44 Price`** `Price` The order price. Conditional — required when `<40>` OrdType is `2` (Limit), must not be present when `<40>` OrdType is `1` (Market). Must be greater than zero. The decimal precision must not exceed the market's price scale. **`126 ExpireTime`** `UTCTimestamp` The order expiration time. Conditional — required when `<59>` TimeInForce is `6` (GTD), must not be present otherwise. **`60 TransactTime`** `UTCTimestamp` The time of order creation. Required. ```text title="Limit order example (Client → B2TRADER)" 8=FIX.4.4^9=168^35=D^34=3^52=20231220-09:15:30.000^49=sender_b2trader^56=target_b2trader^1=68a4446ac84827ff5cd35c74^11=order001^55=spot.btc_usdt^54=1^38=0.5^40=2^44=42500.00^59=1^60=20231220-09:15:30.000^10=123^ ``` ```text title="Market order example (Client → B2TRADER)" 8=FIX.4.4^9=155^35=D^34=4^52=20231220-09:16:00.000^49=sender_b2trader^56=target_b2trader^1=68a4446ac84827ff5cd35c74^11=order002^55=spot.btc_usdt^54=2^38=0.1^40=1^59=3^60=20231220-09:16:00.000^10=045^ ``` ## Execution Report (8) [#execution-report-8] This message is sent by the server to confirm order status changes, including acknowledgment of new orders, fills, partial fills, cancellations, and rejections. For details on order statuses, see [Order statuses](../get-started/order-statuses). **`37 OrderID`** `String` The server-assigned unique order identifier. Required. **`11 ClOrdID`** `String` The client-assigned order identifier from the original New Order Single. Required. **`17 ExecID`** `String` The unique execution identifier. Present for trade executions. **`150 ExecType`** `char` The type of execution being reported. Required. Possible values: * `0` — New: order has been accepted * `4` — Canceled: order has been canceled by the server (e.g., IOC order partially filled, GTD order expired, or market settings changed) * `8` — Rejected: order has been rejected * `F` — Trade: order has been partially or fully filled **`39 OrdStatus`** `char` The current order status. Required. Possible values: * `0` — New * `1` — Partially filled * `2` — Filled * `4` — Canceled * `8` — Rejected **`1 Account`** `String` The account identifier. Required. **`55 Symbol`** `String` The market identifier. Format: `{marketType}.{baseAssetId}_{quoteAssetId}`. **`54 Side`** `char` The order side. Required. Possible values: * `1` — Buy * `2` — Sell **`40 OrdType`** `char` The order type. Required. Possible values: * `1` — Market * `2` — Limit **`44 Price`** `Price` The order price. Present for Limit orders. **`6 AvgPx`** `Price` The average price of all fills on this order. Required. **`14 CumQty`** `Qty` The total filled quantity. Required. **`151 LeavesQty`** `Qty` The remaining quantity to be filled. Required. Set to `0` for Canceled or Rejected orders. **`31 LastPx`** `Price` The price of the last fill. Present when `<150>` ExecType is `F` (Trade). **`32 LastQty`** `Qty` The quantity of the last fill. Present when `<150>` ExecType is `F` (Trade). **`15 Currency`** `String` The quote asset identifier. Optional. **`60 TransactTime`** `UTCTimestamp` The transaction time. Required. **`64 SettlDate`** `String` The settlement date in `YYYYMMDD` format. Required. **`58 Text`** `String` Additional information, such as the rejection reason. Optional. ```text title="New order accepted (B2TRADER → Client)" 8=FIX.4.4^9=220^35=8^34=5^52=20231220-09:15:30.100^49=target_b2trader^56=sender_b2trader^37=01HBXK5V3R8NQ7YP^11=order001^150=0^39=0^1=68a4446ac84827ff5cd35c74^55=spot.btc_usdt^54=1^40=2^44=42500.00^6=0^14=0^151=0.5^60=20231220-09:15:30.100^64=20231220^10=087^ ``` ```text title="Trade execution (B2TRADER → Client)" 8=FIX.4.4^9=245^35=8^34=6^52=20231220-09:15:30.200^49=target_b2trader^56=sender_b2trader^37=01HBXK5V3R8NQ7YP^11=order001^17=01HBXK5V3R8NQ7YR^150=F^39=2^1=68a4446ac84827ff5cd35c74^55=spot.btc_usdt^54=1^40=2^44=42500.00^6=42500.00^14=0.5^151=0^31=42500.00^32=0.5^15=usdt^60=20231220-09:15:30.200^64=20231220^10=154^ ``` ```text title="Order rejected (B2TRADER → Client)" 8=FIX.4.4^9=214^35=8^34=7^52=20231220-09:16:00.100^49=target_b2trader^56=sender_b2trader^37=01HBXK5V3R8NQ7YS^11=order002^150=8^39=8^1=68a4446ac84827ff5cd35c74^55=spot.btc_usdt^54=2^40=1^6=0^14=0^151=0^58=Insufficient balance^60=20231220-09:16:00.100^64=20231220^10=201^ ``` ## Business Reject (j) [#business-reject-j] This message is sent by the server to reject a message due to a business-level issue not addressed by the standard session-level Reject or Execution Report rejection. **`45 RefSeqNum`** `int` The sequence number of the rejected message (`<34>` MsgSeqNum). Required. **`372 RefMsgType`** `String` The type of the rejected message (`<35>` MsgType). Optional. **`380 BusinessRejectReason`** `int` The reason why the request is rejected. Required. Possible values: * `0` — Other * `1` — Unknown ID * `2` — Unknown Security * `3` — Unsupported MsgType * `4` — Application not available * `5` — Conditionally required field missing * `6` — Not authorized * `7` — DeliverTo firm not available at this time **`58 Text`** `String` The detailed information about the rejection reason. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=100^35=j^34=2^49=target_b2trader^52=20231219-22:30:39.617^56=sender_b2trader^45=133^58=Unsupported Message Type^372=V^380=3^10=006^ ``` Each trading account has an `accountStatus` field that determines which operations are permitted on the account. The field is returned on account objects by the API, such as in [Get accounts](../rest-api/settings). An account can be assigned one of the following statuses: * **Active**: All operations are permitted, including placing, modifying, and canceling orders, opening and closing positions, deposits, and withdrawals. * **Halted**: Trader-initiated trading is blocked. Requests to place, modify, or cancel orders and to open or close positions are rejected. Deposits and withdrawals remain allowed. Managed trading through the Management API (MAM, B2COPY) continues to work. * **Frozen**: All operations are blocked. Trading, deposits, and withdrawals are unavailable, and the account is view-only. Stop-out liquidation still executes as a safety mechanism. * **Archived**: The account is decommissioned and hidden from all user-facing surfaces. Real-time profit and loss, equity, margin level, and funding settlement continue for all statuses. Archived accounts are never returned in the trading API account list. They are excluded server-side, so an account that changes to *Archived* stops appearing in [Get accounts](../rest-api/settings) responses. A market can be assigned one of the following statuses: * **Open**: The market is operating properly and accepts orders via Trading terminal and API. Market data for charts is persisted. * **Paused**: The market stops accepting incoming orders via Trading terminal and API (previously placed Limit orders still await execution). Market data for charts is persisted. * **Halted**: The market stops accepting incoming orders via Trading terminal and API. All open Limit orders will be cancelled. Market data for charts is persisted. * **Disabled**: The market stops accepting incoming orders via Trading terminal and API. All open Limit orders will be cancelled. Market data for charts is not persisted. * **Archived**: The market is retired from regular operations. It doesn't accept trading activity, isn't included in market synchronization responses, and its historical chart data is deleted. ## Market and Limit orders [#market-and-limit-orders] Orders can be assigned one of the following statuses: * **Started**: The order has passed preliminary checks. * **Pending**: For Limit orders: the order is waiting for a price trigger. * **Working**: The order is being executed. * **Completed**: The order has been executed in its full amount. * **Cancelled**: The order has been cancelled by a trader. * **Rejected**: The order has been rejected by the system and has never been assigned the *Working* status. * **Expired**: The order has been cancelled due to [Time in force](time-in-force) settings. Some part of it may have already been executed. The status is applicable for GTD and Day orders only. ## Stop orders [#stop-orders] Orders can be assigned one of the following statuses: * **Waiting for activation**: The order awaits the Activation price trigger. * **Activated**: The Activation price has been reached, a new Market or Limit order has been placed. * **Rejected**: The Activation price has been reached, but an issue occurred with placing of a new Market or Limit order. The following order types are supported: * **Market**: An instruction to instantly buy or sell a certain asset amount at a currently best price on the market. Such orders are not listed in the order book. * **Limit**: An instruction to buy or sell a certain asset amount at a specified price. Limit orders are placed in the order book and executed only after the market price reaches the specified limit price (or at a better price). * **Stop Market**: Such an order is not placed unless the current market price meets a specified stop (or trigger) price, after which the order is placed as a regular Market order due to be executed or cancelled, depending on its Time in force. * **Stop Limit**: The order is similar to the Stop Market order in the sense that you need to indicate the stop price at which the order must be placed, after which it becomes a regular Limit order awaiting execution at a specified limit price. For Stop buy orders, the stop price should be above the best ask price; for Stop sell orders, the stop price should be below the best bid price (otherwise, the orders will be activated instantly). Stop Market and Stop Limit orders are accepted while a market is closed according to its trading calendar. The order is stored with the standard `WaitingForActivation` status and is evaluated against the first available price when the session opens. Market and Limit orders are still rejected while the market is closed. The market's own status must still be `Open` — a `Paused` or `Halted` market rejects every order type. Refer to [Time in force](time-in-force) to learn about execution parameters that can be specified for different order types. ## Introduction [#introduction] B2TRADER provides developers with three distinct methods for data delivery, each optimized for specific use cases and performance requirements: REST, WebSocket, and FIX APIs. The **REST API** provides read access to market data as well as both read and write access to trading operations. It serves as the foundation for synchronous data operations where immediate confirmation and guaranteed delivery are essential. The **WebSocket API** provides access to public market data streaming as well as private account updates. It delivers real-time updates with low latency, making it ideal for live trading environments. The **FIX API** provides direct access to market data and trading via the FIX 4.4 protocol. It is designed for institutional clients and algorithmic trading systems that require standardized, low-latency connectivity using the industry-standard Financial Information eXchange protocol. This approach provides developers with flexible options for building robust, scalable trading applications that can handle both operational requirements and real-time market dynamics. ### When to use REST API [#when-to-use-rest-api] * **Account configuration and settings**: Managing user preferences and system configurations. * **Order placement and modification**: Creating, updating, and canceling trading orders. * **Historical data retrieval**: Accessing past trading records and market data. * **One-time data requests**: Retrieving specific information that doesn't require continuous updates. * **Administrative operations**: Account management and system administration tasks. ### When to use WebSocket API [#when-to-use-websocket-api] * **Real-time price monitoring**: Live market price feeds and ticker updates. * **Live position tracking**: Continuous monitoring of open and closed positions. * **Order book visualization**: Real-time depth of market data. * **Market data feeds**: Streaming market statistics and trading activity. * **Account balance monitoring**: Live updates of account equity and margin status. ### When to use FIX API [#when-to-use-fix-api] * **Institutional connectivity**: Standardized FIX 4.4 protocol for professional trading infrastructure. * **Algorithmic trading**: Low-latency order execution and market data for automated strategies. * **Market data streaming**: Real-time order book snapshots and incremental updates via FIX protocol. * **Multi-venue integration**: Unified FIX connectivity for systems already integrated with other FIX-based venues. ## General considerations [#general-considerations] The following applies to all interface descriptions provided in this documentation: * **Endpoints**: All endpoints are relative and resolved based on a specified hostname (indicated as `{host}`). * **Authentication**: REST and WebSocket APIs require an access token (see [Authentication](#authentication)). The FIX API uses in-band authentication via the Logon message with Username, Password, and Account fields provided by B2TRADER. * **Data format**: REST and WebSocket APIs return results in JSON format. The FIX API uses the standard FIX 4.4 message format. * **Security**: All communications use secure protocols (HTTPS for REST, WSS for WebSocket, encrypted TCP for FIX). ### Authentication [#authentication] API access requires an access token for both REST and WebSocket connections. Authentication follows a two-step process: 1. Generate an offline token in the Trading terminal. 2. Exchange the offline token for an access token via API call. #### Token types [#token-types] **Offline token** * **Limit**: 10 tokens per account * **Validity**: 1 year * **Management**: Can be revoked or deleted at any time * **Purpose**: Generate access tokens **Access token** * **Type**: Bearer token * **Validity**: 60 minutes * **Purpose**: Authorize API requests ### Generate offline token [#generate-offline-token] To generate an offline token: 1. In the Trading terminal, open **Settings** and select **API token management**. 2. Click **+ Create new**. 3. In the **New API token** popup, fill in a **Name** for the token, to help you identify it later. 4. Click **Create**. The newly generated token will be displayed and available for copying, along with its name and expiration date. The token only reveals once in the creation popup. Copy and store it securely before closing the popup. The token can't be retrieved again after closing. ### Obtain access token [#obtain-access-token] Request an access token using your offline token. **Endpoint**: `POST` `/frontoffice/api/v4/access-token` **Request body**: ```json { "token": "{YOUR_OFFLINE_TOKEN}" } ``` **Response** (Success): ```json { "accessToken": "{YOUR_ACCESS_TOKEN}", "expiresIn": 3600, "tokenType": "Bearer" } ``` **`accessToken`** `string` The access token for API authorization. **`expiresIn`** `integer` The token lifetime, in seconds. **`tokenType`** `string` The authentication type, always `"Bearer"`. ### Using access tokens [#using-access-tokens] Include the access token in API requests: ```http title="REST" Authorization: Bearer {YOUR_ACCESS_TOKEN} ``` ```http title="WebSocket" {URL}?access_token={YOUR_ACCESS_TOKEN} ``` Access tokens must be refreshed before expiration by repeating the Step 2 with your offline token. ## REST API: Synchronous data operations [#rest-api-synchronous-data-operations] The REST API serves as the foundation for synchronous data operations within the B2TRADER platform. This approach follows standard HTTP protocols and is ideal for operations requiring immediate confirmation and guaranteed delivery. ### Key characteristics [#key-characteristics] * **Request-response operations** where immediate confirmation is required. * **Account management** including settings and configuration. * **Order placement and modification** with guaranteed delivery. * **Historical data retrieval** for analysis and reporting. * **Stateless operations** that don't require persistent connections. ### HTTP response codes [#http-response-codes] B2TRADER API uses conventional HTTP response codes to indicate the success or failure of requests. **Success codes:** * `200 OK` — Request successful **Error codes:** * `400 Bad Request` — Invalid request parameters * `401 Unauthorized` — Authentication required * `403 Forbidden` — Insufficient permissions * `404 Not Found` — Resource not found * `429 Too Many Requests` — [Rate limit](#rate-limits) exceeded * `500 Internal Server Error` — Server error In case of an error, an object will be returned with the following structure: ```json { "code": "text", "message": "text", "details": { "source": "text", "message": "text", "stackTrace": "text" } } ``` ### Available endpoints [#available-endpoints] * **[Trading operations](../rest-api/trading)**: Create, modify, and cancel orders; open, close, and modify positions; control price trigger settings. * **[Trading history](../rest-api/history)**: Retrieve detailed execution records for positions and orders. * **[Settings and configurations](../rest-api/settings)**: Access account information, market specifications, trading sessions, and asset details. ### Rate limits [#rate-limits] Rate limits are applied per minute for each unique **AccountId** to ensure fair resource usage and maintain optimal API performance. All limits use the **Fixed Window** strategy. When rate limits are exceeded, the API returns a `429 Too Many Requests` HTTP status code. #### Trading methods [#trading-methods] * **Default limit**: 600 requests per minute for all methods. * **Reduced limit (200 rpm)** applies to: * Get order data methods * Bulk close positions method * Price triggers methods #### History methods [#history-methods] * **All request types**: 60 requests per minute. #### Settings methods [#settings-methods] * **GET requests**: 100 requests per minute. * **POST and DELETE requests**: 60 requests per minute. Rate limits are calculated independently for each method category. For example, you can make 100 GET requests to Settings methods and 60 requests to History methods within the same minute without hitting rate limits. ## WebSocket API: Real-time data streaming [#websocket-api-real-time-data-streaming] The WebSocket API delivers real-time updates with minimal latency, essential for modern trading applications. The implementation uses unidirectional communication from server to client, ensuring efficient data delivery. ### Key characteristics [#key-characteristics-1] * **Unidirectional communication** from server to client for optimal performance. * **Real-time market data** for live trading environments. * **Position and order updates** as they occur in real-time. * **Low-latency data delivery** for time-sensitive trading operations. * **Persistent connections** maintaining continuous data flow. ### SignalR implementation [#signalr-implementation] B2TRADER utilizes **AspNetCore SignalR** for WebSocket message organization and transmission, providing a robust and scalable real-time communication framework. **Resources:** * [Official GitHub Repository](https://github.com/dotnet/aspnetcore/tree/main/src/SignalR) * [Official Documentation](https://dotnet.microsoft.com/en-us/apps/aspnet/signalr) SignalR provides a structured approach to real-time communication through standardized message formatting and connection management. ### Connection lifecycle [#connection-lifecycle] The data transfer process consists of two essential phases: 1. **Connection establishment** — Initial handshake, authentication, and subscription setup. 2. **Data streaming** — Continuous real-time data flow with automatic reconnection handling. ### Message types [#message-types] SignalR utilizes numerical `type` indicators for different operations: ### Available stream types [#available-stream-types] * **[Trading streams](../ws-api/trading)**: Track active orders, open and closed positions. * **[Market data streams](../ws-api/market-data)**: Get real-time order book updates, market statistics and price changes. * **[Account information streams](../ws-api/account-info)**: Get live account balance and margin updates. ## FIX API: Standardized protocol connectivity [#fix-api-standardized-protocol-connectivity] The FIX API provides direct access to B2TRADER via the FIX 4.4 protocol, the industry standard for electronic trading communication. It is designed for institutional clients and algorithmic trading systems. ### Key characteristics [#key-characteristics-2] * **FIX 4.4 protocol** for standardized, vendor-neutral connectivity. * **Dedicated sessions** for Market Data and Trading with separate endpoints. * **In-band authentication** via Logon message (Username, Password, Account). * **Real-time market data** with order book snapshots and incremental updates. * **Session management** with Heartbeat, Test Request, and Sequence Reset support. ### Authentication [#authentication-1] Unlike REST and WebSocket APIs, the FIX API does not use access tokens. Authentication is performed in-band as part of the FIX Logon message using credentials provided by B2TRADER: * **Username** (`<553>`): The client username * **Password** (`<554>`): The client password * **Account** (`<1>`): The account identifier ### Available session types [#available-session-types] * **[Market Data](../fix-api/market-data)**: Subscribe to real-time order book updates, snapshots, and incremental refreshes. * **[Trading](../fix-api/trading)**: Place orders and receive execution reports in real time. ## Integration best practices [#integration-best-practices] ### API selection strategy [#api-selection-strategy] * Use **REST API** for operational tasks requiring confirmation (order placement, account management). * Use **WebSocket API** for real-time monitoring and market data visualization. * Use **FIX API** for institutional connectivity, algorithmic trading, and integration with existing FIX-based infrastructure. * Implement multiple APIs in comprehensive trading applications for optimal functionality. ### Performance optimization [#performance-optimization] * Implement proper connection pooling for REST API requests. * Use WebSocket subscriptions efficiently by subscribing only to required data streams. * Handle reconnection logic for WebSocket connections to ensure data continuity. * Implement appropriate error handling and retry mechanisms. ### Security considerations [#security-considerations] * Store authentication tokens securely and implement token refresh mechanisms. * Use secure connections (HTTPS/WSS) for all API communications. * Implement proper input validation and sanitization. * Monitor API usage and implement rate limiting on the client side. This comprehensive API architecture enables developers to build sophisticated trading applications that can handle both real-time market dynamics and operational trading requirements efficiently. When trading on CFD or Perpetual markets, the following triggers can be enabled to manage investments and mitigate risks: * **Take profit**: A take-profit order is used to sell or buy an asset automatically once it hits a predefined price, ensuring the trader locks in profits. For example, if a trader buys ETH at $2,000 and sets the Take profit at $2,100, the platform will sell the ETH automatically when the market price reaches $2100, securing the trader's profit. * **Stop loss**: A stop-loss order is a tool to limit potential losses. It automatically sells an asset when its price falls to a predetermined level. For example, if a trader buys ETH at $2,000 and sets the Stop loss at $1,900, the asset will be sold if the price drops to $1,900, capping the loss to $100 per ETH. * **Trailing stop**: A trailing-stop order allows a trader to set a Stop price that dynamically adjusts as the market price moves. It's different from a regular stop-loss order because the Stop price isn't stationary but follows the market price by a specified percentage. When the asset price moves favorably, the Stop price updates, securing potential gains. However, if the price falls, the Stop price stays fixed to protect profits or limit losses. For example, a trader buys ETH at $2,000 and sets the Trailing stop at $1900 with a 10% adjustment. If ETH rises to $2,200, the Trailing stop increases to $2,090. A drop to $2,090 triggers the sale, locking in gains. The triggers are applicable to all order types: Market, Limit, Stop Market, and Stop Limit. Multiple triggers can be applied simultaneously. The triggers can be adjusted anytime until a position is fully closed. The Take profit, Stop loss, and Trailing stop always operate with the current position volume. For **buy** orders, the triggers are activated by the top-of-the-book **bid** price. For **sell** orders, the triggers are activated by the top-of-the-book **ask** price. Triggers do not activate if a position is in the *Stop out* state. However, if the position persists after the *Stop out*, triggers can then be activated. The following time-in-force settings can be specified for orders: * **FOK** (fill-or-kill): Such orders are either filled instantly or killed (cancelled). In other words, a fill-or-kill order must be fulfilled instantly or not executed at all. FOK orders are used when partial delivery of assets isn't acceptable for any reason. * **IOC** (immediate-or-cancel): This setting implies that any part of an order that can't be filled instantly must be cancelled. Upon placing an IOC order, an attempt will be made to instantly execute it (in full or in part) at the best possible price, after which any remaining, unfilled part will be cancelled. If no amount is available at a specified price upon placing such order, it's cancelled instantly. * **GTC** (good-‘til-cancelled): The default setting applied to all Limit orders. Open GTC orders are awaiting execution until they are cancelled explicitly by a trader or filled. * **GTD** (good-‘til-date): Can be applied to Limit and Stop Limit orders. Such orders remain listed in the order book until a specified date or until they are cancelled by a trader. By that time the order can be partially executed. * **DAY**: Can be applied to Limit and Stop Limit orders. Such orders remain listed in the order book until 23:59 of the current day or until they are cancelled by a trader. By that time the order can be partially executed. * **Retry**: Can be applied to Market orders only. A Retry order aims to fill your full volume by repeatedly filling the unfilled remainder at current market prices. The average price may be worse than shown, and in thin markets a remainder may stay unfilled. The order expiration time is defined by the time settings specified for the platform, without taking into account the time settings of the devices from which the platform is accessed. Guest endpoints serve public market data to callers with no access token. Each one is the anonymous counterpart of an authenticated endpoint: same request shape, same response schema, no authorization. They exist so an unauthenticated Trading terminal session can render markets, charts, and order books, and you can use them the same way for read-only integrations. Every guest endpoint sits under a `/guest` path segment inserted after the API version, and shares these rules: * **No authentication.** Do not send an `Authorization` header. There are no required operations. * **No `accountId`.** The `accountId` header used by the authenticated endpoints does not apply and is not read. * **Public data only.** Balances, positions, orders, trade history, margin, and user profile are not reachable through any guest endpoint. * **Guest-visible markets only.** A market that is not active and well-configured is rejected with `400`, even if it exists. * **No account context.** A guest has no trading account, so nothing account-specific enters the calculation. Commissions come from the tenant's **default** commission profile rule, with volume-based tiers evaluated at a traded volume of `0`, so a guest always sees the entry tier. Prices and calculated figures can therefore differ from the same call made with an access token. * **Rate limited per caller.** Guest traffic is subject to its own request-rate limit, separate from the authenticated limits. * **Read-only.** There is no guest counterpart of order placement, position closing, trigger submission, or favorites. ## Assets [#assets] `GET` `/frontoffice/api/v3/guest/assets` Anonymous counterpart of [Get assets](settings#get-assets). Returns the same schema, restricted to CRM-source assets — assets that exist only on a liquidity provider stay hidden. ## Info [#info] `GET` `/frontoffice/api/v3/guest/info` Anonymous counterpart of [Get server info](settings#get-server-info). Same platform time, same schema. *** `GET` `/frontoffice/api/v3/guest/info/time-zones` Anonymous counterpart of [Get server time zones](settings#get-server-time-zones). Same schema. ## Markets [#markets] `GET` `/frontoffice/api/v5/guest/markets` Anonymous counterpart of [Get markets](settings#get-markets). Lists active, well-configured markets ordered by display name. Accepts the optional `categoryId` query parameter. Each item carries `marketId`, `displayName`, `fullName`, `type`, and `subtype` — the authenticated `isFavorite` field is absent, because guests have no per-account favorites. *** `GET` `/frontoffice/api/v5/guest/markets/{marketId}` Anonymous counterpart of [Get market](settings#get-market). Returns the instrument's trading parameters — price and amount scales, tick size, lot size and step, amount limits, trading calendar, slippage rate, price deviation, and the funding schedule for perpetual markets. The per-account, commission, and leverage fields of the authenticated response are absent. An unknown, disabled, or misconfigured `marketId` returns `400`. *** `GET` `/frontoffice/api/v4/guest/markets-categories` Returns the broker's market category tree, pruned to branches that contain at least one guest-visible market. Each category carries `id`, `name`, and a nested `categories` array. ## Order data [#order-data] These endpoints price a hypothetical order without placing it. They are the calculation behind the order form's preview figures. `POST` `/frontoffice/api/v3/guest/order-data` Anonymous counterpart of [Get SPOT order data](trading#get-spot-order-data). Same request body. The response carries the same `order` object with `baseAmount`, `quoteAmount`, `commissionAmount`, and `total`, calculated without any account-specific settings and with the tenant-default commission rule. *** `POST` `/frontoffice/api/cfd/v4/guest/order-data` Anonymous counterpart of [Get CFD order data](trading#get-cfd-order-data). Same request body. The response carries the same `order` object — `lotAmount`, `requiredMarginInRAT`, `quoteAmount`, `commissionAmountInRAT`, `takeProfit`, and `stopLoss` — calculated without any account-specific settings, and with `marginLevel` always `null`, since it needs a balance and open positions. *** `POST` `/frontoffice/api/perpetual/v4/guest/order-data` Anonymous counterpart of [Get PF order data](trading#get-pf-order-data). Behaves exactly as the CFD guest variant above, including `marginLevel` always being `null`. ## Charting [#charting] `GET` `/marketdata/api/v4/guest/instruments/{marketSymbol}/history` Returns historical candles for a market. Candle prices are not account-specific and can differ from the authenticated endpoint's response for the same market and window. Response schema matches the authenticated charting history endpoint at `/marketdata/api/v4/instruments/{marketSymbol}/history`. `type`, `startDate`, and `endDate` are **required** here, and the requested window is capped per timeframe: | Timeframe | Maximum window | | ---------------------- | -------------- | | 1, 5, 15, 30 minutes | 30 days | | 1, 4, 12 hours | 365 days | | 1 day, 1 week, 1 month | 5 years | A missing, malformed, or oversized window returns `400`. `endDate` may not be in the future beyond a one-minute allowance for client clock drift. A market that is hidden from traders returns an empty candle set rather than an error. *** `GET` `/marketdata/api/v4/guest/instruments/{marketSymbol}/funding` Returns the funding event history of a perpetual market. Funding events do not depend on an account, so the response matches the authenticated endpoint at `/marketdata/api/v4/instruments/{marketSymbol}/funding` exactly. Accepts the same `limit`, `offset`, `appliedAtFrom`, and `appliedAtTo` query parameters. An unknown market symbol, or a market that is not a perpetual, returns `400`. ## AI recommendation [#ai-recommendation] `GET` `/marketdata/api/v1/guest/ai-recommendation/{marketId}` Returns the AI-generated recommendation for a market — price forecast, sentiment ratios, suggested actions, market metrics, and triggers. Response schema matches the authenticated endpoint at `/marketdata/api/v1/ai-recommendation/{marketId}`. Accepts the same optional `language` query parameter, defaulting to `en`. An unknown `marketId` returns `400`. ## Streaming market data as a guest [#streaming-market-data-as-a-guest] The endpoints above cover snapshots and history. For live prices, order books, and candles without a token, use the guest market data stream — see [Guest market data](../ws-api/market-data#guest-market-data). ## Open positions [#open-positions] ### Get executions for an open position [#get-executions-for-an-open-position] `POST` `/frontoffice/api/v4/positions/``{positionId}``/executions/list` #### Summary [#summary] Use this method to retrieve execution details for a specific open position using its position identifier. #### Request [#request] ##### Header parameters [#header-parameters] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters] **`positionId`** `required` The position identifier. ##### Body [#body] **`limit`** `integer · int32 | nullable` The maximum number of items to return. **`offset`** `integer · int32 | nullable` The number of items to skip before starting to collect the result set. ```http title="Request example" POST /frontoffice/api/v4/positions/01K2PMT0VMJG5B8XBDNZ7FNM1F/executions/list HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "limit": 2, "offset": 0 } ``` #### Response [#response] In case of success, an object containing an array of executions will be returned. Each execution object contains the following information: **`positionId`** `string` The position identifier. **`orderId`** `string` The order identifier. **`side`** `string` The execution side. Possible values: * `Buy` * `Sell` **`reason`** `string` The reason for the execution. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`createdAt`** `string` The date and time when the execution occurred, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`executionId`** `string` The execution identifier. **`baseAmount`** `decimal string` The executed base asset amount. **`executionPrice`** `decimal string` The price at which the execution was settled. **`commissionAmountInRAT`** `decimal string` The total commissions charged for the execution, in conversion to RAT. **`commissions`** `array` The breakdown of commissions charged per asset. **`comment`** `string | nullable` The text note attached to the order, up to 100 characters. ```json title="Response example — 200: OK" { "executions": [ { "positionId": "01K2PMT0VMJG5B8XBDNZ7FNM1F", "orderId": "01K2PMT0KRRMTTXGPDJCXZ99NZ", "side": "Buy", "reason": "Trader", "createdAt": "2025-08-15T10:36:02.293Z", "executionId": "01K2PMT0VNWB23GSRN2XQAJD6Q", "baseAmount": "0.314", "executionPrice": "4603.5", "commissionAmountInRAT": "0", "commissions": [], "comment": null }, { "positionId": "01K2PMT0VMJG5B8XBDNZ7FNM1F", "orderId": "01K2PMT0KRRMTTXGPDJCXZ99NZ", "side": "Buy", "reason": "Trader", "createdAt": "2025-08-15T10:36:02.293Z", "executionId": "01K2PMT0VN1F2JPM14AEV6V8YJ", "baseAmount": "0.045", "executionPrice": "4603.49", "commissionAmountInRAT": "0", "commissions": [], "comment": null } ] } ``` ### Get executions for open positions [#get-executions-for-open-positions] `POST` `/frontoffice/api/v4/positions/executions/list` #### Summary [#summary-1] Use this method to retrieve execution details for multiple open positions by providing an array of position identifiers. #### Request [#request-1] ##### Header parameters [#header-parameters-1] **`accountId`** `required` The trading account identifier. ##### Body [#body-1] **`positionIds`** `array · string[]` The array of position identifiers. **`limit`** `integer · int32 | nullable` The maximum number of items to return. ```http title="Request example" POST /frontoffice/api/v4/positions/executions/list HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "positionIds": [ "01K2PMT0VMJG5B8XBDNZ7FNM1F", "01K2PMXY63HESK110WT1CHMAFA" ], "limit": 5 } ``` #### Response [#response-1] In case of success, an object containing an array of executions will be returned. Each execution object contains the following information: **`positionId`** `string` The position identifier. **`orderId`** `string` The order identifier. **`side`** `string` The execution side. Possible values: * `Buy` * `Sell` **`reason`** `string` The reason for the execution. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`createdAt`** `string` The date and time when the execution occurred, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`executionId`** `string` The execution identifier. **`baseAmount`** `decimal string` The executed base asset amount. **`executionPrice`** `decimal string` The price at which the execution was settled. **`commissionAmountInRAT`** `decimal string` The total commissions charged for the execution, in conversion to RAT. **`commissions`** `array` The breakdown of commissions charged per asset. **`comment`** `string | nullable` The text note attached to the order, up to 100 characters. ```json title="Response example — 200: OK" { "executions": [ { "positionId": "01K2PMXY63HESK110WT1CHMAFA", "orderId": "01K2PMXY1894RC6E2BYFR00T87", "side": "Buy", "reason": "Trader", "createdAt": "2025-08-15T10:38:10.627Z", "executionId": "01K2PMXY63NXM30VNWPDECSFJR", "baseAmount": "15", "executionPrice": "4333.69288", "commissionAmountInRAT": "32.27", "commissions": [ { "assetId": "eur", "amount": "32.27" } ], "comment": null }, { "positionId": "01K2PMT0VMJG5B8XBDNZ7FNM1F", "orderId": "01K2PMT0KRRMTTXGPDJCXZ99NZ", "side": "Buy", "reason": "Trader", "createdAt": "2025-08-15T10:36:02.292Z", "executionId": "01K2PMT0VMPCZW0JB2C9J6B405", "baseAmount": "0.141", "executionPrice": "4602.3", "commissionAmountInRAT": "5", "commissions": [ { "assetId": "eur", "amount": "5" } ], "comment": null } ] } ``` ## Closed positions [#closed-positions] ### Get orders for closed positions [#get-orders-for-closed-positions] `POST` `/frontoffice/api/v4/orders/closed-positions` #### Summary [#summary-2] Use this method to retrieve orders associated with closed positions within specified date ranges and market filters. #### Request [#request-2] ##### Header parameters [#header-parameters-2] **`accountId`** `required` The trading account identifier. ##### Body [#body-2] **`createdAtFrom`** `string · date-time | nullable` The start date of the period when the positions were opened. **`createdAtTo`** `string · date-time | nullable` The end date of the period when the positions were opened. **`closedAtFrom`** `string · date-time | nullable` The start date of the period when the positions were closed. **`closedAtTo`** `string · date-time | nullable` The end date of the period when the positions were closed. **`marketId`** `string | nullable` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`marketType`** `string | nullable` The market type. Possible values: * `Cfd` * `Perp` **`limit`** `integer · int32 | nullable` The maximum number of items to return. **`lastOrderId`** `string | nullable` The identifier of the final order to be returned. ```http title="Request example" POST /frontoffice/api/v4/orders/closed-positions HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "limit": 2, "createdAtFrom": "2025-08-01T12:00:32.886Z", "createdAtTo": "2025-08-15T12:00:32.886Z" } ``` #### Response [#response-2] In case of success, an object will be returned. Each object contains the following information: **`marketId`** `string` The market identifier. **`marketFullName`** `string | nullable` The market full name or description (optional). **`marketDisplayName`** `string | nullable` The market ticker. **`marketType`** `string` The market type. Possible values: * `Cfd` * `Perp` **`orderId`** `string` The order identifier. **`orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`timeInForce`** `string` The [time-in-force setting](../get-started/time-in-force) of the order. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`side`** `string` The order side. Possible values: * `Buy` * `Sell` **`positionCloseLotAmount`** `decimal string` The position amount closed by the order, in lots. **`reason`** `string` The reason for placing the order. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`realizedPnlInRAT`** `decimal string` The realized PnL, in conversion to RAT. **`closedAt`** `string · date-time | nullable` The date and time when the position was closed. **`positionId`** `string` The position identifier. **`openPrice`** `decimal string` The volume-weighted average price (VWAP) at which the position was opened. **`closePrice`** `decimal string` The volume-weighted average price (VWAP) of trades related to a position-closing order. **`positionPriceInRAT`** `decimal string` The position price, in conversion to RAT. **`rateToRAT`** `decimal string` The conversion rate to RAT. **`openedAt`** `string · date-time` The date and time when the position was opened. **`comment`** `string | nullable` The text note attached to the order, up to 100 characters. **`isExceeded`** `boolean` Indicates whether the number of returned items reached the response `limit` and more data is available. ```json title="Response example — 200: OK" { "data": [ { "marketId": "cfd.eth_eur", "marketFullName": null, "marketDisplayName": "CFD ETH/EUR", "marketType": "Cfd", "orderId": "01K2PNGX50SR1FRE6P14PJC17E", "orderType": "Market", "timeInForce": "Ioc", "side": "Sell", "positionCloseLotAmount": "15", "reason": "Trader", "realizedPnlInRAT": "-144.64", "closedAt": "2025-08-15T10:48:32.393Z", "positionId": "01K2PMXY63HESK110WT1CHMAFA", "openPrice": "4333.69288", "closePrice": "3370.58389", "positionPriceInRAT": "50558.75", "rateToRAT": "1", "openedAt": "2025-08-15T10:38:10.628Z", "comment": null }, { "marketId": "perp.eth_usdt", "marketFullName": "ETH/USDT_4s8hKqiPXmXOEhsO1J6W", "marketDisplayName": "ETH/USDT_jC6Im5PxwgZLrwyccRcI", "marketType": "Perpetual", "orderId": "01K2PNG3N6NKAJVV4RV5E2V0HK", "orderType": "Market", "timeInForce": "Ioc", "side": "Sell", "positionCloseLotAmount": "0.5", "reason": "Trader", "realizedPnlInRAT": "13.42", "closedAt": "2025-08-15T10:48:06.234Z", "positionId": "01K2PMT0VMJG5B8XBDNZ7FNM1F", "openPrice": "4603.1607", "closePrice": "4634.3915", "positionPriceInRAT": "1992.78", "rateToRAT": "0.86", "openedAt": "2025-08-15T10:36:02.293Z", "comment": null } ], "isExceeded": true } ``` ### Get executions for a closing order [#get-executions-for-a-closing-order] `POST` `/frontoffice/api/v5/orders/``{orderId}``/executions/list` #### Summary [#summary-3] Use this method to retrieve execution details for a specific position-closing order using its identifier. #### Request [#request-3] ##### Header parameters [#header-parameters-3] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-1] **`orderId`** `required` The order identifier. ##### Body [#body-3] **`positionId`** `string | nullable` The position identifier. **`limit`** `integer · int32 | nullable` The maximum number of items to return. **`lastExecutionId`** `string | nullable` The identifier of the final execution to be returned. ```http title="Request example" POST /frontoffice/api/v4/orders/01K2PNG3N6NKAJVV4RV5E2V0HK/executions/list HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "limit": 5 } ``` #### Response [#response-3] In case of success, an object containing an array of executions will be returned. Each execution object contains the following information: **`positionId`** `string` The position identifier. **`orderId`** `string` The order identifier. **`side`** `string` The execution side. Possible values: * `Buy` * `Sell` **`reason`** `string` The reason for the execution. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`createdAt`** `string` The date and time when the execution occurred, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`executionId`** `string` The execution identifier. **`baseAmount`** `decimal string` The executed amount of the base asset. **`executionPrice`** `decimal string` The price at which the execution was settled. **`realizedPnlInRAT`** `decimal string` The realized PnL, in conversion to RAT. **`commissionAmountInRAT`** `decimal string` The total commissions charged for the execution, in conversion to RAT. **`commissions`** `array` The breakdown of commissions charged per asset. Structure: * **`assetId`** `string` * **`amount`** `decimal string` **`positionSizeIncreased`** `boolean` Indicates if a position size was increased (`true`) or decreased (`false`) as a result of the execution. **`isExceeded`** `boolean` Indicates whether the number of returned items reached the response `limit` and more data is available. ```json title="Response example — 200: OK" { "executions": [ { "positionId": "string", "orderId": "string", "side": "Buy", "reason": "Trader", "createdAt": "2025-12-18T19:02:22.196Z", "executionId": "string", "baseAmount": "string", "executionPrice": "string", "realizedPnlInRAT": "string", "commissionAmountInRAT": "string", "commissions": [ { "assetId": "string", "amount": "string" } ], "positionSizeIncreased": true } ], "isExceeded": true } ``` ### Get executions for closing orders [#get-executions-for-closing-orders] `POST` `/frontoffice/api/v5/orders/executions/list` #### Summary [#summary-4] Use this method to retrieve execution details for multiple position-closing orders by providing an array of order identifiers. #### Request [#request-4] ##### Header parameters [#header-parameters-4] **`accountId`** `required` The trading account identifier. ##### Body [#body-4] **`orderId`** `string` The order identifier. **`positionId`** `string` The order identifier. ```http title="Request example" POST /frontoffice/api/v4/orders/executions/list HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "orderPositionPairs": [ { "orderId": "01K31APDKZCVGWZA3XTF5JPAMD", "positionId": "01K31APDWF2EBHRKHH15VGB1ST" } ], "limit": 0 } ``` #### Response [#response-4] In case of success, an object containing an array of executions will be returned. Each execution object contains the following information: **`positionId`** `string` The position identifier. **`orderId`** `string` The order identifier. **`side`** `string` The execution side. Possible values: * `Buy` * `Sell` **`reason`** `string` The reason for the execution. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`createdAt`** `string` The date and time when the execution occurred, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`executionId`** `string` The execution identifier. **`baseAmount`** `decimal string` The executed base asset amount. **`executionPrice`** `decimal string` The price at which the execution was settled. **`realizedPnlInRAT`** `decimal string` The realized PnL, in conversion to RAT. **`commissionAmountInRAT`** `decimal string` The total commissions charged for the execution, in conversion to RAT. **`commissions`** `array` The breakdown of commissions charged per asset. Structure: * **`assetId`** `string` * **`amount`** `decimal string` **`positionSizeIncreased`** `boolean` Indicates if a position size was increased (`true`) or decreased (`false`) as a result of the execution. **`comment`** `string | nullable` The text note attached to the order, up to 100 characters. **`isExceeded`** `boolean` Indicates whether the number of returned items reached the response `limit` and more data is available. ```json title="Response example — 200: OK" { "executions": [ { "positionId": "string", "orderId": "string", "side": "Buy", "reason": "Trader", "createdAt": "2025-12-18T18:53:15.657Z", "executionId": "string", "baseAmount": "string", "executionPrice": "string", "realizedPnlInRAT": "string", "commissionAmountInRAT": "string", "commissions": [ { "assetId": "string", "amount": "string" } ], "positionSizeIncreased": true, "comment": null } ], "isExceeded": true } ``` ## Accounts [#accounts] ### Get accounts [#get-accounts] `GET` `/frontoffice/api/v3/accounts` #### Summary [#summary] Use this method to retrieve a list of all trading accounts with their basic information including account type and total balance. #### Request [#request] *No request parameters.* ```http title="Request example" GET /frontoffice/api/v3/accounts HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response] In case of success, an array of objects will be returned. Each object contains the following information: **`accountId`** `string` The trading account identifier. **`publicAccountId`** `integer` The public account identifier for display purposes. **`accountName`** `string` The account name. **`accountType`** `string` The account type. Possible values: * `Hedging` * `Netting` **`accountStatus`** `string` The account status, which determines the permitted operations. For a description of each value, see [Account statuses](../get-started/account-statuses). Possible values: * `Active` * `Halted` * `Frozen` **`totalBalanceInRAT`** `decimal string` The total balance, in RAT. **`isCopyTradingAccount`** `boolean` Indicates if the account is `Copy`. ```json title="Response example — 200: OK" [ { "accountId": "685a7eaa360f9e7416221a61", "publicAccountId": 1234567, "accountName": "B2TRADER Hedging account", "accountType": "Hedging", "accountStatus": "Active", "totalBalanceInRAT": "6020.12", "isCopyTradingAccount": false }, { "accountId": "6891e70db552ff9c6fbbccf5", "publicAccountId": 1234568, "accountName": "B2TRADER Netting account", "accountType": "Netting", "accountStatus": "Halted", "totalBalanceInRAT": "10987.39", "isCopyTradingAccount": false } ] ``` ## Assets [#assets] ### Get assets [#get-assets] `GET` `/frontoffice/api/v3/assets` #### Summary [#summary-1] Use this method to retrieve a list of available assets on the platform. #### Request [#request-1] *No request parameters.* ```http title="Request example" GET /frontoffice/api/v3/assets HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-1] In case of success, an array of objects will be returned. Each object contains the following information: **`assetId`** `string` The asset identifier. **`assetName`** `string` The asset display name. **`isRootAsset`** `boolean` Indicates whether this is a root asset. ```json title="Response example — 200: OK" [ { "assetId": "usdt", "assetName": "Tether", "isRootAsset": true }, { "assetId": "xrp", "assetName": "Ripple", "isRootAsset": false } ] ``` ## Markets [#markets] ### Get markets [#get-markets] `GET` `/frontoffice/api/v6/markets` #### Summary [#summary-2] Use this method to retrieve a list of available markets with their type, subtype, and favorite status. #### Request [#request-2] ##### Query parameters [#query-parameters] **`categoryId`** The market category identifier. **`dynamicCommissionGroupId`** The dynamic commission group identifier. **`isFavorite`** `boolean` Filter by favorite status. If set to `true`, only markets marked as favorites are returned. ```http title="Request example" GET /frontoffice/api/v6/markets?isFavorite=true HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} ``` #### Response [#response-2] In case of success, an array of market objects is returned. Each market object contains the following information: **`marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`displayName`** `string` The market ticker. **`fullName`** `string | nullable` The market full name or description. **`type`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`subtype`** `string | nullable` *Applicable to CFD markets only.* The market subtype. Possible values: * `Crypto` * `Fx` * `Metals` * `Indices` * `Energies` * `Ndf` * `Shares` * `Etf` **`isFavorite`** `boolean` Indicates whether the market is marked as a favorite by the current user. ```json title="Response example — 200: OK" [ { "marketId": "spot.btc_usdt", "displayName": "BTC/USDT", "fullName": null, "type": "Spot", "subtype": null, "isFavorite": true }, { "marketId": "cfd.eth_btc", "displayName": "ETH/BTC", "fullName": "Ethereum to Bitcoin", "type": "Cfd", "subtype": "Crypto", "isFavorite": false }, { "marketId": "perp.trx_usdt", "displayName": "TRX/USDT", "fullName": "TRX to Tether Perpetual", "type": "Perpetual", "subtype": null, "isFavorite": false } ] ``` ### Get market [#get-market] `GET` `/frontoffice/api/v6/markets/``{marketId}` #### Summary [#summary-3] Use this method to retrieve detailed information about a specific market using its market identifier. #### Request [#request-3] ##### Path parameters [#path-parameters] **`marketId`** `required` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. ```http title="Request example" GET /frontoffice/api/v6/markets/{marketId} HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-3] In case of success, an object will be returned. Each object contains the following information: **`marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`displayName`** `string` The market ticker. **`fullName`** `string | nullable` The market full name or description (optional). **`baseAssetId`** `string` The base asset identifier. **`quoteAssetId`** `string` The quote asset identifier. **`minAmount`** `decimal string | nullable` *Applicable to Spot markets only.* The minimum tradable amount of the base asset. **`maxBaseAmount`** `decimal string | nullable` The maximum tradable amount of the base asset. **`priceDeviation`** `decimal string` The allowed price deviation for Limit orders placed on the market. Supports decimal values in the range `[0, 1]`, with up to 4 decimal places, for example: * `0.1` = 10% * `0.01` = 1% * `0.001` = 0.1% * `0.0001` = 0.01% If set to `0`, no restriction is applied, the price deviation is ignored. **`priceScale`** `integer` The price precision, which is the number of digits after a decimal separator. Also determines the minimum allowed trade price. Supports only integer values in the range `[2, 8]`. For example, `2` means the following price format: `0.01`, and `8`: `0.00000001`. **`amountScale`** `integer | nullable` *Applicable to Spot markets only.* The amount precision, which is the number of digits after a decimal separator. Also determines the minimum trade amount. Supports only integer values in the range `[0, 8]`. For example: * `0` means `1` (no digits after the decimal separator) * `5` means `0.00001` (five digits after the decimal separator) * `8` means `0.00000001` (eight digits after the decimal separator) **`type`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`subtype`** `string | nullable` *Applicable to CFD markets only.* The market subtype. Possible values: * `Crypto` * `Fx` * `Metals` * `Indices` * `Energies` * `Ndf` * `Shares` * `Etf` **`swapSettings`** `object | nullable` *Applicable to CFD markets only.* The fee type charged for holding open positions overnight. The amount can be negative for rebates. Possible values: * `FixPerLot`: The fixed amount per lot. * `Percent`: The fixed amount in points which is applied to the position size, in the range `[-1, 1]`, with up to 5 decimal places. * `Points`: The fixed amount of percents which is applied to the position size, with up to 3 decimal places. Structure: * **`type`** `string` — Swap calculation type. Possible values: `FixPerLot`, `Percent`, `Points`. * **`shortPositionSettings`** `object` — Settings for Short positions: * **`size`** `decimal string` * **`assetId`** `string | nullable` * **`longPositionSettings`** `object` — Settings for Long positions: * **`size`** `decimal string` * **`assetId`** `string | nullable` **`lotSize`** `integer | nullable` *Not applicable to Spot markets.* The standardized quantity of the base asset per lot. Supports only integer values in the range `[1, 1000000]`. **`minLotAmount`** `decimal string | nullable` *Not applicable to Spot markets.* The minimum order amount, in lots, that can be placed and executed. Supports values in the range `[0.00000001, 1]`. **`maxLotAmount`** `integer | nullable` *Not applicable to Spot markets.* The maximum order amount, in lots, that can be placed and executed. Supports only integer values in the range `[1, 10000]`. **`tickSize`** `decimal string | nullable` *Not applicable to Spot markets.* The minimum price increment. **`lotStep`** `decimal string | nullable` *Not applicable to Spot markets.* The minimum lot amount increment. Supports values in the range `[0.00000001, 1]`. By default, equals to the `minLotAmount`. **`slippageRate`** `decimal string` The expected slippage, that is, the difference between the expected execution price and the actual one. This value is used as a multiplier to calculate the funds to be put on hold for a market order execution. Supports values in the range `[1, 10]`, including decimal values with up to 4 decimal places. The default value is `1` which means that only the current bid/ask price is put on hold. For example, `1.1` means that the current bid or ask price + 10% is put on hold for each order, to cover the 10% slippage. **Mind that** the total amount funds to be held depends on the order parameters and takes into account many conditions, the slippage rate is only one of them. **`calendar`** `object` The trading calendar defining market trading hours. Structure: * **`timeZoneId`** `string` — IANA time zone identifier. * **`tradingSessions`** `array` — Weekly trading sessions: * **`dayOfWeek`** `string` — One of: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday. * **`timeIntervals`** `array` — List of intervals with: * **`start`** `string` (time) — Start time in `calendar.timeZoneId`. * **`end`** `string` (time) — End time in `calendar.timeZoneId`. * **`sessionOverrides`** `array` — Optional specific-date overrides: * **`date`** `string` (date) — In `YYYY-MM-DD` format. * **`timeIntervals`** `array | nullable` — Intervals for that date. **`fundingStartTime`** `string | nullable` *Applicable to Perpetual markets only.* The time of the first funding settlement, in the following format: `HH:MM:SS`. **`fundingIntervalInHours`** `integer | nullable` *Applicable to Perpetual markets only.* The funding settlement interval, in hours. Possible values: 1, 2, 3, 4, 6, 8, 12, 24. **`leverageProfile`** `object` *Not applicable to Spot markets.* The leverage profile. Structure: * **`leverageType`** `string` — Leverage type. Possible values: `Fixed`, `Dynamic`. * **`leverage`** `object` * **`useOnlyMaxLeverage`** `boolean` * **`maxLeverage`** `integer` — For `Fixed` leverage type only. * **`tiers`** `array` — For `Dynamic` leverage type only. * **`maxLeverage`** `integer` — The maximum allowed leverage for this tier. * **`maxNotionalValueInRAT`** `string | nullable` — The maximum position notional for this tier. **`commissionSettings`** `object` The commission settings. Structure: * **`type`** `string` — Leverage type. Possible values: `Fixed`, `Dynamic`. * **`charge`** `object` * **`type`** `string` — Possible values: `Percent`, `FixPerLot`. * **`assetId`** `string | nullable` — For `Fixed` commission type only. * **`size`** `decimal string` — For `Fixed` commission type only. * **`tiers`** `array` — For `Dynamic` commission type only. * **`size`** `string` — The commission amount for this tier. * **`minTradingVolumeInRAT`** `string` — The minimum required trading volume for this tier. * **`minCommissionInRAT`** `decimal string | nullable` * **`dynamicCommissionGroupId`** **`isFavorite`** `boolean` Indicates whether the market is marked as a favorite by the current user. ```json title="Response example — 200: OK" { "marketId": "string", "displayName": "string", "fullName": "string", "baseAssetId": "string", "quoteAssetId": "string", "minAmount": "string", "maxBaseAmount": "string", "minQuoteAmount": "string", "priceDeviation": "string", "priceScale": 0, "amountScale": 0, "type": "Spot", "subtype": "Cash", "swapSettings": { "type": "FixPerLot", "shortPositionSettings": { "size": "string", "assetId": "string" }, "longPositionSettings": { "size": "string", "assetId": "string" } }, "lotSize": 0, "minLotAmount": "string", "maxLotAmount": 0, "tickSize": "string", "lotStep": "string", "slippageRate": "string", "calendar": { "timeZoneId": "string", "tradingSessions": [ { "dayOfWeek": "Monday", "timeIntervals": [ { "start": "string", "end": "string" } ] } ], "sessionOverrides": [ { "date": "2025-12-18", "timeIntervals": [ { "start": "string", "end": "string" } ] } ] }, "fundingStartTime": "string", "fundingIntervalInHours": 0, "leverageProfile": { "leverageType": "Fixed", "leverage": { "useOnlyMaxLeverage": true, "maxLeverage": 0 } }, "commissionSettings": { "type": "Dynamic", "сharge": { "type": "Percent", "tiers": [ { "size": "string", "minTradingVolumeInRAT": "string" }, { "size": "string", "minTradingVolumeInRAT": "string" } ], "minCommissionInRAT": "string" }, "dynamicCommissionGroupId": "string" }, "isFavorite": true } ``` *** ### Add favorite market [#add-favorite-market] `POST` `/frontoffice/api/v6/markets/favorites/add` #### Summary [#summary-4] Add a market to the current user's favorites list. #### Request [#request-4] ##### Body [#body] **`marketId`** `string` `required` The market identifier to add to favorites. ```http title="Request example" POST /frontoffice/api/v6/markets/favorites/add HTTP/1.1 Host: {host} Authorization: Bearer JWT Content-Type: application/json { "marketId": "spot.btc_usdt" } ``` #### Response [#response-4] In case of success (`200`), an empty object is returned. *** ### Remove favorite market [#remove-favorite-market] `POST` `/frontoffice/api/v6/markets/favorites/delete` #### Summary [#summary-5] Remove a market from the current user's favorites list. #### Request [#request-5] ##### Body [#body-1] **`marketId`** `string` `required` The market identifier to remove from favorites. ```http title="Request example" POST /frontoffice/api/v6/markets/favorites/delete HTTP/1.1 Host: {host} Authorization: Bearer JWT Content-Type: application/json { "marketId": "spot.btc_usdt" } ``` #### Response [#response-5] In case of success (`200`), an empty object is returned. ## Account margin settings [#account-margin-settings] ### Get margin assets [#get-margin-assets] `GET` `/frontoffice/api/v4/account-margin-settings/assets` #### Summary [#summary-6] Use this method to retrieve a list of assets that can be used as collateral for margin trading. #### Request [#request-6] *No request parameters.* ```http title="Request example" GET /frontoffice/api/v4/account-margin-settings/assets HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-6] In case of success, an object will be returned. Each object contains the following information: **`assets`** `array` A list of assets that can be used as a collateral for margin trading. Each array item contains: **`assetId`** `string` The asset identifier. **`assetName`** `string` The asset display name. **`available`** `decimal string` The available asset balance. This value is calculated as *Total balance* – *Locked balance*. **`total`** `decimal string` The overall amount of the asset, including locked funds. **`marginRatio`** `decimal string` The percentage of the asset value used as a collateral. Supports values in the range `[0, 1]`, where `1` represents 100.00%. **`isSelected`** `boolean` Indicates whether the asset is selected to be used as collateral. Can be `true` only for assets with the `marginRatio` more than `0`. ```json title="Response example — 200: OK" { "assets": [ { "assetId": "btc", "assetName": "btc", "available": "0.031", "total": "0.031", "marginRatio": "1", "isSelected": true }, { "assetId": "eth", "assetName": "eth", "available": "0", "total": "0", "marginRatio": "1", "isSelected": false } ] } ``` ### Select margin asset [#select-margin-asset] `POST` `/frontoffice/api/v4/account-margin-settings/assets/``{assetId}` #### Summary [#summary-7] Use this method to enable a particular asset to be used as collateral for margin trading. Only assets with the `marginRatio` more than `0` can be selected. #### Request [#request-7] ##### Path parameters [#path-parameters-1] **`assetId`** `required` The asset identifier. ```http title="Request example" POST /frontoffice/api/v4/account-margin-settings/assets/usdt HTTP/1.1 Host: {host} Authorization: Bearer JWT Content-Type: application/json Accept: */* {} ``` #### Response [#response-7] In case of success, an empty object will be returned. ```json title="Response example — 200: OK" {} ``` ### Disable margin asset [#disable-margin-asset] `DELETE` `/frontoffice/api/v4/account-margin-settings/assets/``{assetId}` #### Summary [#summary-8] Use this method to prohibit a specific asset from being used as collateral for margin trading. #### Request [#request-8] ##### Path parameters [#path-parameters-2] **`assetId`** `required` The asset identifier. ```http title="Request example" DELETE /frontoffice/api/v4/account-margin-settings/assets/usdt HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-8] In case of success, an empty object will be returned. ```json title="Response example — 200: OK" {} ``` ## Info [#info] ### Get server info [#get-server-info] `GET` `/frontoffice/api/v3/info` #### Summary [#summary-9] Use this method to retrieve current server time and timezone information. #### Request [#request-9] *No request parameters.* ```http title="Request example" GET /frontoffice/api/v3/info HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-9] In case of success, an object will be returned. Each object contains the following information: **`serverTime`** `string` The server time, in the Unix timestamp format. **`serverTimeZone`** `string` The server time zone. ```json title="Response example — 200: OK" { "serverTime": "1755190380", "serverTimeZone": "+00:00" } ``` ### Get server time zones [#get-server-time-zones] `GET` `/frontoffice/api/v3/info/time-zones` #### Summary [#summary-10] Use this method to retrieve available server time zones. #### Request [#request-10] *No request parameters.* ```http title="Request example" GET /frontoffice/api/v3/info/time-zones HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-10] In case of success, an array of objects will be returned. Each object contains the following information: **`id`** `string` The time zone identifier. **`offset`** `string` The UTC offset, in the following format: `HH:MM:SS`. **`offsetInMinutes`** `integer · int32` The UTC offset in minutes. **`shortLabel`** `string` The short label for the time zone. **`label`** `string` The display label for the time zone. ```json title="Response example — 200: OK" [ { "id": "Africa/Abidjan", "offset": "00:00:00", "offsetInMinutes": 0, "shortLabel": "Africa/Abidjan", "label": "(UTC+00:00) Côte d’Ivoire Time" }, { "id": "Africa/Algiers", "offset": "01:00:00", "offsetInMinutes": 60, "shortLabel": "Africa/Algiers", "label": "(UTC+01:00) Central European Time (Algiers)" }, { "id": "Africa/Bissau", "offset": "00:00:00", "offsetInMinutes": 0, "shortLabel": "Africa/Bissau", "label": "(UTC+00:00) Guinea-Bissau Time" }, ... ] ``` ## Webhooks [#webhooks] ### Create webhook API key [#create-webhook-api-key] `POST` `/frontoffice/api/v3/webhook/api-keys` #### Summary [#summary-11] Create a new webhook API key for receiving TradingView alerts. #### Request [#request-11] ##### Header parameters [#header-parameters] **`Authorization`** `required` Bearer JWT token with `trading-ui` permission. ##### Body [#body-2] **`name`** `string` `required` A descriptive name for the API key, up to 100 characters. ```http title="Request example" POST /frontoffice/api/v3/webhook/api-keys HTTP/1.1 Host: {host} Authorization: Bearer JWT Content-Type: application/json { "name": "My TradingView Key" } ``` #### Response [#response-11] In case of success (`201`), the created API key object is returned. **`id`** `string` The unique identifier of the API key. **`apiKey`** `string` The full API key value. The key is shown only once at creation. **`name`** `string` The name assigned to the key. **`userId`** `string` The user identifier the key is bound to. **`status`** `string` The key status: `Active`. **`createdAt`** `string` The timestamp when the key was created. **`expiresAt`** `string` The timestamp when the key expires (one year from creation). ```json title="Response example" { "id": "01JZ3CVZKN20410JPYYH1YZJSK", "apiKey": "wh_key_abc123def456...", "name": "My TradingView Key", "userId": "01JZ3CVZKN20410JPYYH1YZJSK", "status": "Active", "createdAt": "2026-02-02T12:00:00Z", "expiresAt": "2027-02-02T00:00:00Z" } ``` The API key is shown only once in the creation response. It can't be retrieved again after this call. *** ### List webhook API keys [#list-webhook-api-keys] `GET` `/frontoffice/api/v3/webhook/api-keys` #### Summary [#summary-12] Retrieve all webhook API keys for the authenticated user along with the webhook URL. #### Request [#request-12] ##### Header parameters [#header-parameters-1] **`Authorization`** `required` Bearer JWT token with `trading-ui` permission. ```http title="Request example" GET /frontoffice/api/v3/webhook/api-keys HTTP/1.1 Host: {host} Authorization: Bearer JWT ``` #### Response [#response-12] In case of success (`200`), the webhook URL and a list of API keys are returned. **`webhookUrl`** `string` The webhook URL to configure in TradingView alerts. **`apiKeys`** `array of objects` The list of API keys. **`apiKeys[].id`** `string` The unique identifier of the API key. **`apiKeys[].name`** `string` The name assigned to the key. **`apiKeys[].status`** `string` The key status. Possible values: * `Active` * `Revoked` * `Expired` **`apiKeys[].createdAt`** `string` The timestamp when the key was created. **`apiKeys[].expiresAt`** `string` The timestamp when the key expires. ```json title="Response example" { "webhookUrl": "https://trading.example.com/frontoffice/api/v3/webhook/alerts/01JZ3...", "apiKeys": [ { "id": "01JZ3CVZKN20410JPYYH1YZJSK", "name": "My TradingView Key", "status": "Active", "createdAt": "2026-02-02T12:00:00Z", "expiresAt": "2027-02-02T00:00:00Z" } ] } ``` *** ### Revoke webhook API key [#revoke-webhook-api-key] `DELETE` `/frontoffice/api/v3/webhook/api-keys/{id}` #### Summary [#summary-13] Revoke an active webhook API key. After revocation, the key can no longer be used to authenticate webhook requests. #### Request [#request-13] ##### Header parameters [#header-parameters-2] **`Authorization`** `required` Bearer JWT token with `trading-ui` permission. ##### Path parameters [#path-parameters-3] **`id`** `string` `required` The unique identifier of the API key to revoke. ```http title="Request example" DELETE /frontoffice/api/v3/webhook/api-keys/01JZ3CVZKN20410JPYYH1YZJSK HTTP/1.1 Host: {host} Authorization: Bearer JWT ``` #### Response [#response-13] In case of success (`200`), a confirmation object is returned. **`success`** `boolean` Indicates whether the key was revoked successfully. **`message`** `string` A description of the result. ```json title="Response example" { "success": true, "message": "API key revoked successfully" } ``` *** ### Receive TradingView alert [#receive-tradingview-alert] `POST` `/frontoffice/api/v3/webhook/alerts/{userId}` #### Summary [#summary-14] Accept a webhook alert from TradingView and place an order on the specified trading account. TradingView calls this endpoint when an alert triggers. #### Request [#request-14] ##### Path parameters [#path-parameters-4] **`userId`** `string` `required` The B2TRADER user identifier (ULID format). ##### Body [#body-3] **`apiKey`** `string` `required` The webhook API key for authentication. **`accountId`** `string` `required` The trading account identifier. **`symbol`** `string` `required` The market symbol with a type prefix (`spot.`, `cfd.`, or `perp.`) followed by the pair name. For example: `spot.btc_usdt`, `cfd.eur_usd`, `perp.btc_usdt`. **`side`** `string` `required` The order side. Possible values: * `buy` * `sell` **`quantity`** `decimal string` `required` The order quantity in the base asset. **`orderType`** `string` The order type. Default: `market`. Possible values: * `market` * `limit` * `stop` * `stop_limit` **`price`** `decimal string` The limit price. Required for `limit` and `stop_limit` orders. **`stopPrice`** `decimal string` The stop price. Required for `stop` and `stop_limit` orders. **`leverage`** `decimal string` The leverage ratio. Applicable to CFD and Perpetual Futures markets only. **`takeProfit`** `decimal string` The take profit trigger price. **`stopLoss`** `decimal string` The stop loss trigger price. **`timeInForce`** `string` The time-in-force policy. Default: `gtc`. Possible values: * `gtc` * `ioc` * `fok` * `day` **`comment`** `string` A custom comment, up to 256 characters. **`deduplicationId`** `string` A UUID for idempotency. Duplicate requests with the same ID within five minutes return a cached response. ```http title="Request example" POST /frontoffice/api/v3/webhook/alerts/01JZ3CVZKN... HTTP/1.1 Host: {host} Content-Type: application/json { "apiKey": "wh_key_abc123def456...", "accountId": "01JZ3CVZKN20410JPYYH1YZJSK", "symbol": "spot.btc_usdt", "side": "buy", "quantity": "0.01", "comment": "TV Strategy Signal" } ``` #### Response [#response-14] In case of success (`200`), an order confirmation is returned. **`success`** `boolean` Indicates whether the order was placed successfully. **`orderId`** `string` The unique identifier of the created order. **`orderStatus`** `string` The initial status of the order. **`message`** `string` A description of the result. **`timestamp`** `string` The timestamp of the response. ```json title="Response example" { "success": true, "orderId": "01JZ3CVZKN20410JPYYH1YZJSK", "orderStatus": "Working", "message": "Order placed successfully", "timestamp": "2026-02-02T12:34:56.789Z" } ``` #### Rate limits [#rate-limits] Webhook requests are limited to five requests per second per user. If the limit is exceeded, the response returns a `429` status code with the following headers: * `X-RateLimit-Limit`: Maximum requests per window * `X-RateLimit-Remaining`: Remaining requests in the current window * `X-RateLimit-Reset`: Unix timestamp when the window resets ## Orders [#orders] ### Place SPOT order [#place-spot-order] `POST` `/frontoffice/api/v3/orders` #### Summary [#summary] Use this method to create and submit a new order for SPOT markets. #### Request [#request] ##### Header parameters [#header-parameters] **`accountId`** `required` The trading account identifier. ##### Body [#body] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` * `Retry` — Market orders only **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell. For Market orders, this represents the total base amount to fill; the executed amount may be lower if liquidity is insufficient. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/v3/orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json { "order": { "marketId": "spot.btc_usdt", "side": "Buy", "orderType": "Limit", "timeInForce": "Gtc", "requestedAmount": 0.02, "requestedPrice": 115193.35, "comment": "Strategy A" } } ``` #### Response [#response] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.marketId`** `string` The market identifier, same as in the request. **`order.marketDisplayName`** `string` The market ticker. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.orderType`** `string` The order type, same as in the request. **`order.side`** `string` The order side, same as in the request. **`order.status`** `string` The current [order status](../get-started/order-statuses#market-and-limit-orders). Possible values: * `Started` * `Pending` * `Working` * `Completed` * `Cancelled` * `Expired` * `Rejected` **`order.source`** `string` The source of the order. Possible values: * `Manual` — the order was created manually via UI or API. **`order.timeInForce`** `string` The time-in-force policy, same as in the request. **`order.commission`** `decimal string` The fee charged for the execution of the order, expressed in the quote asset. Right after the order is created commission is `0`. **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell, same as in the request. **`order.remainingAmount`** `decimal string` The amount of the base asset that remains unfilled. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders, same as in the request; `null` for market orders. **`order.executionPrice`** `decimal string` The volume-weighted average price at which the order was executed. **`order.createdAt`** `string` The timestamp when the order was created, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.updatedAt`** `string` The timestamp of the most recent update to the order, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.rejectDetails`** `string` The reason and details for order rejection when `status` is `Rejected`. Currently unused and not populated. **`order.cancellationDate`** `string | nullable` The timestamp when the order was cancelled or expired, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`; `null` if not cancelled. **`order.fillFactor`** `decimal string` The ratio of the filled quantity to the originally requested quantity (`filledAmount / requestedAmount`). ```json title="Response example — 200: OK" { "order": { "marketId": "spot.btc_usdt", "marketDisplayName": "SPOT BTC/USDT", "orderId": "01K1ZTB4DB0S6Y2NH81S781BQX", "orderType": "Limit", "side": "Buy", "status": "Pending", "source": "Manual", "timeInForce": "Gtc", "commission": "0", "requestedAmount": "0.02", "remainingAmount": "0.02", "requestedPrice": "115193.35", "executionPrice": "0", "createdAt": "2025-08-06T13:50:13.931Z", "updatedAt": "2025-08-06T13:50:13.9325008Z", "rejectDetails": "", "cancellationDate": null, "fillFactor": "0" } } ``` ### Place CFD order [#place-cfd-order] `POST` `/frontoffice/api/cfd/v4/orders` #### Summary [#summary-1] Use this method to create and submit a new order for CFD markets. #### Request [#request-1] ##### Header parameters [#header-parameters-1] **`accountId`** `required` The trading account identifier. ##### Body [#body-1] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` * `Retry` — Market orders only **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.stopLoss`** `object` The Stop loss settings. **`order.stopLoss.price`** `decimal string` The Stop loss price. **`order.stopLoss.isTrailing`** `boolean` Indicates if the Stop loss is Trailing. **`order.takeProfit`** `object` The Take profit settings. **`order.takeProfit.price`** `decimal string` The take profit price. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/cfd/v4/orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json { "order": { "marketId": "cfd.eth_eur", "side": "Sell", "orderType": "Limit", "timeInForce": "Gtd", "requestedLotAmount": 1, "requestedPrice": 3280, "leverage": 75, "cancellationDate": "2025-08-10T00:00:00Z", "stopLoss": { "price": 3320, "isTrailing": false }, "takeProfit": { "price": 3200 }, "comment": "Strategy A" } } ``` #### Response [#response-1] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.status`** `string` The current [order status](../get-started/order-statuses#market-and-limit-orders). Possible values: * `Started` * `Pending` * `Working` * `Completed` * `Cancelled` * `Expired` * `Rejected` ```json title="Response example — 200: OK" { "order": { "orderId": "01K2253Q9X3VTJ68PNWY40JC6Q", "status": "Pending" } } ``` ### Place PF order [#place-pf-order] `POST` `/frontoffice/api/perpetual/v4/orders` #### Summary [#summary-2] Use this method to create and submit a new order for Perpetual markets. #### Request [#request-2] ##### Header parameters [#header-parameters-2] **`accountId`** `required` The trading account identifier. ##### Body [#body-2] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `perp.eth_eur`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` * `Retry` — Market orders only **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.stopLoss`** `object` The Stop loss settings. **`order.stopLoss.price`** `decimal string` The Stop loss price. **`order.stopLoss.isTrailing`** `boolean` Indicates if the Stop loss is Trailing. **`order.takeProfit`** `object` The Take profit settings. **`order.takeProfit.price`** `decimal string` The take profit price. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/perpetual/v4/orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json { "order": { "marketId": "perp.eth_usdt", "side": "Buy", "orderType": "Market", "timeInForce": "Ioc", "requestedLotAmount": 10, "leverage": 159, "comment": "Strategy A" } } ``` #### Response [#response-2] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.status`** `string` The current [order status](../get-started/order-statuses#market-and-limit-orders). Possible values: * `Started` * `Pending` * `Working` * `Completed` * `Cancelled` * `Expired` * `Rejected` ```json title="Response example — 200: OK" { "order": { "orderId": "01K228VN55N7WFZRG70M24T9J1", "status": "Working" } } ``` ### Cancel order [#cancel-order] `DELETE` `/frontoffice/api/v3/orders/``{orderId}` #### Summary [#summary-3] Use this method to cancel an active order placed on SPOT, CFD, or Perpetual markets. #### Request [#request-3] ##### Header parameters [#header-parameters-3] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters] **`orderId`** `required` The order identifier to cancel. ```http title="Request example" DELETE /frontoffice/api/v3/orders/01K2PF9XS29WN4JZRHMCTTQYJB HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Accept: */* ``` #### Response [#response-3] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The canceled order. **`order.marketId`** `string` The market identifier, same as in the request. **`order.marketDisplayName`** `string` The market ticker. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.orderType`** `string` The order type, same as in the request. **`order.side`** `string` The order side, same as in the request. **`order.status`** `string` The current [order status](../get-started/order-statuses#market-and-limit-orders). Possible values: * `Started` * `Pending` * `Working` * `Completed` * `Cancelled` * `Expired` * `Rejected` **`order.source`** `string` The source of the order. Possible values: * `Manual` * `StopOrder` * `FixApi` * `System` **`order.timeInForce`** `string` The time-in-force policy, same as in the request. **`order.commission`** `decimal string` The fee charged for the execution of the order, expressed in the quote asset. **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell, same as in the request. **`order.remainingAmount`** `decimal string` The amount of the base asset that remains unfilled. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders, same as in the request; `null` for market orders. **`order.executionPrice`** `decimal string` The volume-weighted average price at which the order was executed. **`order.createdAt`** `string` The timestamp when the order was created, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.updatedAt`** `string` The timestamp of the most recent update to the order, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.rejectDetails`** `string` The reason and details for order rejection when `status` is `Rejected`. Currently unused and not populated. **`order.cancellationDate`** `string | nullable` The timestamp when the order was cancelled or expired, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`; `null` if not cancelled. **`order.fillFactor`** `decimal string` The ratio of the filled quantity to the originally requested quantity (`filledAmount / requestedAmount`). ```json title="Response example — 200: OK" { "order": { "marketId": "spot.eth_usdt", "marketDisplayName": "SPOT ETH/USDT", "orderId": "01K2PF9XS29WN4JZRHMCTTQYJB", "orderType": "Limit", "side": "Buy", "status": "Cancelled", "source": "Manual", "timeInForce": "Gtc", "commission": "0", "requestedAmount": "0.1", "remainingAmount": "0.1", "requestedPrice": "4450", "executionPrice": "0", "createdAt": "2025-08-15T08:59:51.97Z", "updatedAt": "2025-08-15T09:00:06.2791048Z", "rejectDetails": "", "cancellationDate": null, "fillFactor": "0" } } ``` ### Get SPOT order data [#get-spot-order-data] `POST` `/frontoffice/api/v3/order-data` #### Summary [#summary-4] Use this method to retrieve and validate order data for SPOT market orders before placing. #### Request [#request-4] ##### Header parameters [#header-parameters-4] **`accountId`** `required` The trading account identifier. ##### Body [#body-3] **`order`** `object` The order data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.requestedBaseAmount`** `decimal string | nullable` The requested amount in base asset units. **`order.requestedQuoteAmount`** `decimal string | nullable` The requested amount in quote asset units. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. ```http title="Request example" POST /frontoffice/api/v3/order-data HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=3.0 Accept: */* { "order": { "marketId": "spot.eth_usdt", "side": "Buy", "orderType": "Limit", "requestedBaseAmount": 0.2, "requestedPrice": 4600 } } ``` #### Response [#response-4] In case of success, an object will be returned. Each object contains the following information: **`baseAmount`** `decimal string` The calculated base asset amount for the order. **`quoteAmount`** `decimal string` The calculated quote asset amount for the order. **`commissionAmount`** `decimal string` The estimated commission amount to be charged. **`total`** `decimal string` The total quote asset amount, including the estimated commission. ```json title="Response example — 200: OK" { "order": { "baseAmount": "0.2", "quoteAmount": "920", "commissionAmount": "9.2", "total": "929.2" } } ``` ### Get CFD order data [#get-cfd-order-data] `POST` `/frontoffice/api/cfd/v4/order-data` #### Summary [#summary-5] Use this method to retrieve and validate order data for CFD market orders before placing. #### Request [#request-5] ##### Header parameters [#header-parameters-5] **`accountId`** `required` The trading account identifier. ##### Body [#body-4] **`order`** `object` The order data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.takeProfit.triggerType`** `string · enum | nullable` The trigger calculation type for Take profit. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`order.takeProfit.triggerSize`** `decimal string | nullable` The trigger value in selected units. **`order.stopLoss.triggerType`** `string · enum | nullable` The trigger calculation type for Stop loss. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`order.stopLoss.triggerSize`** `decimal string | nullable` The trigger value in selected units. **`order.stopLoss.isTrailing`** `boolean | nullable` If `true`, enables the Trailing behavior for Stop loss. ```http title="Request example" POST /frontoffice/api/cfd/v4/order-data HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "order": { "takeProfit": { "triggerSize": 15000, "triggerType": "points" }, "stopLoss": { "triggerSize": "4020", "triggerType": "price", "isTrailing": false }, "marketId": "cfd.eth_eur", "side": "Sell", "orderType": "Market", "leverage": 135, "requestedLotAmount": 1 } } ``` #### Response [#response-5] In case of success, an object will be returned. Each object contains the following information: **`requiredMarginInRAT`** `decimal string` The required margin amount, in conversion to RAT. **`quoteAmount`** `decimal string` The calculated quote asset amount for the order. **`commissionAmountInRAT`** `decimal string` The estimated commission amount to be charged, in conversion to RAT. **`marginLevel`** `decimal string | nullable` The resulting margin level. **`takeProfit.price`** `decimal string` The calculated Take profit price, based on trigger settings. **`takeProfit.rate`** `decimal string` The calculated Take profit rate. **`takeProfit.points`** `integer · int64` The calculated take profit offset, in points. **`takeProfit.pnl`** `decimal string` The projected PnL at Take profit. **`stopLoss.price`** `decimal string` The calculated Stop loss price, based on trigger settings. **`stopLoss.rate`** `decimal string` The calculated Stop loss rate. **`stopLoss.points`** `integer · int64` The calculated Stop loss offset, in points. **`stopLoss.pnl`** `decimal string` The projected PnL at Stop loss. ```json title="Response example — 200: OK" { "order": { "requiredMarginInRAT": "34.4613643", "quoteAmount": "4004.345", "commissionAmountInRAT": "0", "marginLevel": "5.3015", "takeProfit": { "price": "3989.345", "rate": "0.0037", "points": 15000, "pnl": "17.42713545" }, "stopLoss": { "price": "4020", "rate": "-0.0039", "points": -15655, "pnl": "-18.18812036" } } } ``` ### Get PF order data [#get-pf-order-data] `POST` `/frontoffice/api/perpetual/v4/order-data` #### Summary [#summary-6] Use this method to retrieve and validate order data for Perpetual market orders before placing. #### Request [#request-6] ##### Header parameters [#header-parameters-6] **`accountId`** `required` The trading account identifier. ##### Body [#body-5] **`order`** `object` The order data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.takeProfit.triggerType`** `string · enum | nullable` The trigger calculation type for Take profit. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`order.takeProfit.triggerSize`** `decimal string | nullable` The trigger value in selected units. **`order.stopLoss.triggerType`** `string · enum | nullable` The trigger calculation type for Stop loss. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`order.stopLoss.triggerSize`** `decimal string | nullable` The trigger value in selected units. **`order.stopLoss.isTrailing`** `boolean | nullable` If `true`, enables Trailing behavior for Stop loss. ```http title="Request example" POST /frontoffice/api/perpetual/v4/order-data HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "order": { "takeProfit": { "triggerSize": "0.01", "triggerType": "rate" }, "stopLoss": { "triggerSize": "-100", "triggerType": "pnl", "isTrailing": false }, "marketId": "perp.btc_usdt", "side": "Buy", "orderType": "Limit", "leverage": 100, "requestedLotAmount": 0.5, "requestedPrice": 118450 } } ``` #### Response [#response-6] In case of success, an object will be returned. Each object contains the following information: **`requiredMarginInRAT`** `decimal string` The required margin amount, in conversion to RAT. **`quoteAmount`** `decimal string` The calculated quote asset amount for the order. **`commissionAmountInRAT`** `decimal string` The estimated commission amount to be charged, in conversion to RAT. **`marginLevel`** `decimal string | nullable` The resulting margin level. **`takeProfit.price`** `decimal string` The calculated Take profit price, based on trigger settings. **`takeProfit.rate`** `decimal string` The calculated Take profit rate. **`takeProfit.points`** `integer · int64` The calculated take profit offset, in points. **`takeProfit.pnl`** `decimal string` The projected PnL at Take profit. **`stopLoss.price`** `decimal string` The calculated Stop loss price, based on trigger settings. **`stopLoss.rate`** `decimal string` The calculated Stop loss rate. **`stopLoss.points`** `integer · int64` The calculated Stop loss offset, in points. **`stopLoss.pnl`** `decimal string` The projected PnL at Stop loss. ```json title="Response example — 200: OK" { "order": { "requiredMarginInRAT": "592.25", "quoteAmount": "59225", "commissionAmountInRAT": "0", "marginLevel": "0.3582", "takeProfit": { "price": "119634.5", "rate": "0.01", "points": 11845, "pnl": "592.25" }, "stopLoss": { "price": "118250", "rate": "-0.0016", "points": -2000, "pnl": "-100" } } } ``` ## Stop orders [#stop-orders] Stop orders are accepted while the market is closed according to its trading calendar. The market's own status must still be `Open` — a `Paused` or `Halted` market rejects Stop orders too. At submission the platform validates the requested and activation price scales, the amount scale, the market minimum amount, and the time in force: a Stop Market order requires `Ioc` or `Fok`, a Stop Limit order requires an explicit value. The stop price is additionally checked against the best bid and ask **only when a price is available** — while the market is closed there may be no top of the book to compare against, in which case the check is skipped. The accepted order is stored with the standard `WaitingForActivation` status — no new status value was introduced — and is evaluated against the first available price when the session opens; if the market gapped past the stop price, it triggers at the open. An order accepted while no price was available first has its internal pricing finalised from the next incoming price, so its activation can take one extra price update. No balance or margin is reserved at submission. The margin check runs at trigger time, and an order that fails it is cancelled with a failure reason rather than dropped. `Cancel Stop order` also works while the market is closed. Market and Limit orders are still rejected during non-trading hours. ### Place SPOT Stop order [#place-spot-stop-order] `POST` `/frontoffice/api/v3/stop-orders` #### Summary [#summary-7] Use this method to create and submit a new Stop order for SPOT markets. #### Request [#request-7] ##### Header parameters [#header-parameters-7] **`accountId`** `required` The trading account identifier. ##### Body [#body-6] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell. For Market orders, this represents the total base amount to fill; the executed amount may be lower if liquidity is insufficient. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`activationPrice`** `decimal string | nullable` The trigger price that activates the Stop order. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/v3/stop-orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "order": { "marketId": "spot.btc_usdt", "side": "Buy", "orderType": "Market", "activationPrice": 128000, "requestedAmount": 0.01, "timeInForce": "Ioc", "comment": "Strategy A" } } ``` #### Response [#response-7] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.marketId`** `string` The market identifier, same as in the request. **`order.marketDisplayName`** `string` The market ticker. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.orderType`** `string` The order type, same as in the request. **`order.side`** `string` The order side, same as in the request. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders, same as in the request; `null` for market orders. **`activationPrice`** `decimal string | nullable` The trigger price that activates the Stop order, same as in the request. **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell, same as in the request. **`order.timeInForce`** `string` The time-in-force policy, same as in the request. **`order.status`** `string` The current [order status](../get-started/order-statuses#stop-orders). Possible values: * `WaitingForActivation` * `Activated` * `Rejected` **`order.createdAt`** `string` The timestamp when the order was created, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.updatedAt`** `string` The timestamp of the most recent update to the order, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.cancellationDate`** `string | nullable` The timestamp when the order was cancelled or expired, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`; `null` if not cancelled. **`order.comment`** `string | nullable` The text note attached to the order, up to 100 characters. ```json title="Response example — 200: OK" { "order": { "marketId": "spot.btc_usdt", "marketDisplayName": "SPOT BTC/USDT", "orderId": "01K2MNC3BVR5WRTBEE9YWAS91K", "orderType": "Market", "side": "Buy", "requestedPrice": "0", "activationPrice": "128000", "requestedAmount": "0.01", "timeInForce": "Ioc", "status": "WaitingForActivation", "createdAt": "2025-08-14T16:07:25.8193038Z", "updatedAt": "2025-08-14T16:07:25.8193044Z", "cancellationDate": null, "comment": null } } ``` ### Place CFD Stop order [#place-cfd-stop-order] `POST` `/frontoffice/api/cfd/v4/stop-orders` #### Summary [#summary-8] Use this method to create and submit a new Stop order for CFD markets. #### Request [#request-8] ##### Header parameters [#header-parameters-8] **`accountId`** `required` The trading account identifier. ##### Body [#body-7] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.activationPrice`** `decimal string | nullable` The trigger price that activates the Stop order. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.stopLoss`** `object` The Stop loss settings. **`order.stopLoss.price`** `decimal string` The Stop loss price. **`order.stopLoss.isTrailing`** `boolean` Indicates if the Stop loss is Trailing. **`order.takeProfit`** `object` The Take profit settings. **`order.takeProfit.price`** `decimal string` The take profit price. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/cfd/v4/stop-orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "order": { "marketId": "cfd.eth_eur", "side": "Sell", "orderType": "Limit", "activationPrice": 3200, "requestedLotAmount": 0.5, "timeInForce": "Gtd", "leverage": 76, "requestedPrice": 3500, "cancellationDate": "2025-08-18T00:00:00Z", "stopLoss": { "price": "3900", "isTrailing": false }, "takeProfit": { "price": "3100" }, "comment": "Strategy A" } } ``` #### Response [#response-8] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.status`** `string` The current [order status](../get-started/order-statuses#stop-orders). Possible values: * `WaitingForActivation` * `Activated` * `Rejected` ```json title="Response example — 200: OK" { "order": { "orderId": "01K2MNRWP2J1S8T9TKTCXWYY87", "status": "WaitingForActivation" } } ``` ### Place PF Stop order [#place-pf-stop-order] `POST` `/frontoffice/api/perpetual/v4/stop-orders` #### Summary [#summary-9] Use this method to create and submit a new Stop order for Perpetual markets. #### Request [#request-9] ##### Header parameters [#header-parameters-9] **`accountId`** `required` The trading account identifier. ##### Body [#body-8] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.activationPrice`** `decimal string | nullable` The trigger price that activates the Stop order. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.stopLoss`** `object` The Stop loss settings. **`order.stopLoss.price`** `decimal string` The Stop loss price. **`order.stopLoss.isTrailing`** `boolean` Indicates if the Stop loss is Trailing. **`order.takeProfit`** `object` The Take profit settings. **`order.takeProfit.price`** `decimal string` The take profit price. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/perpetual/v4/stop-orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "order": { "marketId": "perp.btc_usdt", "side": "Sell", "orderType": "Market", "activationPrice": 115000, "requestedLotAmount": 1, "timeInForce": "Fok", "leverage": 22, "stopLoss": { "price": "118020", "isTrailing": true }, "takeProfit": { "price": "113873" }, "comment": "Strategy A" } } ``` #### Response [#response-9] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.status`** `string` The current [order status](../get-started/order-statuses#stop-orders). Possible values: * `WaitingForActivation` * `Activated` * `Rejected` ```json title="Response example — 200: OK" { "order": { "orderId": "01K2MNM0S8B2R9DS7BWJ8PGYPR", "status": "WaitingForActivation" } } ``` ### Cancel Stop order [#cancel-stop-order] `DELETE` `/frontoffice/api/v3/stop-orders/``{orderId}` #### Summary [#summary-10] Use this method to cancel an active Stop order placed on SPOT, CFD, or Perpetual markets. #### Request [#request-10] ##### Header parameters [#header-parameters-10] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-1] **`orderId`** `required` The Stop order identifier to cancel. ```http title="Request example" DELETE /frontoffice/api/v3/stop-orders/01K2MNGAWPMQJ7WGATFSCAS1G4 HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* ``` #### Response [#response-10] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The canceled order. **`order.marketId`** `string` The market identifier, same as in the request. **`order.marketDisplayName`** `string` The market ticker. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.orderType`** `string` The order type, same as in the request. **`order.side`** `string` The order side, same as in the request. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.activationPrice`** `decimal string | nullable` The trigger price that activates the Stop order. **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell, same as in the request. **`order.timeInForce`** `string` The time-in-force policy, same as in the request. **`order.status`** `string` The current [order status](../get-started/order-statuses#stop-orders). Possible values: * `WaitingForActivation` * `Activated` * `Rejected` **`order.createdAt`** `string` The timestamp when the order was created, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.updatedAt`** `string` The timestamp of the most recent update to the order, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.cancellationDate`** `string | nullable` The timestamp when the order was cancelled or expired, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`; `null` if not cancelled. ```json title="Response example — 200: OK" { "order": { "marketId": "perp.btc_usdt", "marketDisplayName": "Perpetual BTC/USDT", "orderId": "01K2MNGAWPMQJ7WGATFSCAS1G4", "orderType": "Limit", "side": "Sell", "requestedPrice": "115100", "activationPrice": "115000", "requestedAmount": "1", "timeInForce": "Gtc", "status": "Rejected", "createdAt": "2025-08-14T16:09:44.5986099Z", "updatedAt": "2025-08-14T16:09:44.5986103Z", "cancellationDate": null } } ``` ## Positions [#positions] ### Close position [#close-position] `POST` `/frontoffice/api/v4/positions/``{positionId}``/close` #### Summary [#summary-11] Use this method to close a specific position entirely or partially. #### Request [#request-11] ##### Header parameters [#header-parameters-11] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-2] **`positionId`** `required` The position identifier to close. ##### Body [#body-9] **`closePositionLotAmount`** `decimal string | nullable` The portion of the position to close, in lots. ```http title="Request example" POST /frontoffice/api/v4/positions/01K2PFXDP1FWCJSGTX4GJ6JHM0/close HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* ``` #### Response [#response-11] In case of success, an object will be returned. Each object contains the following information: **`positionId`** `string` The position identifier. ```json title="Response example — 200: OK" { "positionId": "01K2PFXDP1FWCJSGTX4GJ6JHM0" } ``` ### Bulk close positions [#bulk-close-positions] `POST` `/frontoffice/api/v4/positions/bulk-close` #### Summary [#summary-12] Use this method to close multiple positions simultaneously based on different criteria such as all positions, positive PnL only, or negative PnL only. #### Request [#request-12] ##### Header parameters [#header-parameters-12] **`accountId`** `required` The trading account identifier. ##### Body [#body-10] **`mode`** `string` `required` The bulk close mode. Possible values: * `AllPositions` — close all positions. * `PositivePnl` — close only positions with positive PnL. * `NegativePnl` — close only positions with negative PnL. ```http title="Request example" POST /frontoffice/api/v4/positions/bulk-close HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "mode": "AllPositions" } ``` #### Response [#response-12] In case of success, an object will be returned containing identifiers of closed positions. ```json title="Response example — 200: OK" { "status": "accepted", "positionIds": [ "01K228VNC2Q7E7K9W8GABWBZ5Z", "01K22BZ2DCETJZKW6MK81N1T8Y", "01K2CXF06A3A5SK2YFJT67CMZ5", "01K2CXF2ZJ6MJYMEK663TBBY8K", "01K2PFXDP1FWCJSGTX4GJ6JHM0" ] } ``` ### Get trigger data [#get-trigger-data] `POST` `/frontoffice/api/v4/positions/``{positionId}``/trigger-data` #### Summary [#summary-13] Use this method to retrieve Stop loss and Take profit settings for an open position. #### Request [#request-13] ##### Header parameters [#header-parameters-13] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-3] **`positionId`** `required` The position identifier. ##### Body [#body-11] **`stopLoss.triggerType`** `string · enum | nullable` The trigger calculation type for Stop loss. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`stopLoss.triggerSize`** `decimal string | nullable` The trigger value in selected units. **`stopLoss.isTrailing`** `boolean | nullable` Indicates if Stop loss is Trailing. **`takeProfit.triggerType`** `string · enum | nullable` The trigger calculation type for Take profit. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`order.takeProfit.triggerSize`** `decimal string | nullable` The trigger value in selected units. ```http title="Request example" POST /frontoffice/api/v4/positions/01K2HYXA7N2G9NHTFEWYVM9SEQ/trigger-data HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "stopLoss": { "triggerSize": "-0.01", "triggerType": "rate", "isTrailing": true }, "takeProfit": { "triggerSize": 2500, "triggerType": "points" } } ``` #### Response [#response-13] In case of success, an object will be returned. Each object contains the following information: **`takeProfit.price`** `decimal string` The calculated Take profit price, based on trigger settings. **`takeProfit.rate`** `decimal string` The calculated Take profit rate. **`takeProfit.points`** `integer · int64` The calculated take profit offset, in points. **`takeProfit.pnl`** `decimal string` The projected PnL at Take profit. **`stopLoss.price`** `decimal string` The calculated Stop loss price, based on trigger settings. **`stopLoss.rate`** `decimal string` The calculated Stop loss rate. **`stopLoss.points`** `integer · int64` The calculated Stop loss offset, in points. **`stopLoss.pnl`** `decimal string` The projected PnL at Stop loss. ```json title="Response example — 200: OK" { "takeProfit": { "price": "248.27", "rate": "0.1119", "points": 2500, "pnl": "21.5" }, "stopLoss": { "price": "221.04", "rate": "-0.01", "points": -223, "pnl": "-1.91" } } ``` ### Submit triggers [#submit-triggers] `PUT` `/frontoffice/api/v4/positions/``{positionId}``/triggers` #### Summary [#summary-14] Use this method to modify Stop loss and Take profit settings for an open position. #### Request [#request-14] ##### Header parameters [#header-parameters-14] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-4] **`positionId`** `required` The position identifier. ##### Body [#body-12] **`stopLoss.price`** `decimal string` The Stop loss trigger price. **`stopLoss.isTrailing`** `boolean` If `true`, enables the Trailing behavior for Stop loss. **`takeProfit.price`** `decimal string` The Take profit trigger price. ```http title="Request example" PUT /frontoffice/api/v4/positions/01K2HYXA7N2G9NHTFEWYVM9SEQ/triggers HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "stopLoss": { "price": "165.13", "isTrailing": true }, "takeProfit": { "price": 250 } } ``` #### Response [#response-14] In case of success, an object will be returned containing the identifier of the updated position. ```json title="Response example — 200: OK" { "positionId": "01K2HYXA7N2G9NHTFEWYVM9SEQ" } ``` ## Commissions [#commissions] ### Get account trading volume [#get-account-trading-volume] `GET` `/frontoffice/api/v3/commission/``{dynamicCommissionGroupId}``/account-trading-volume` #### Summary [#summary-15] Use this method to obtain a cumulative account trading volume used for calculating the commission tier. #### Request [#request-15] ##### Header parameters [#header-parameters-15] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-5] **`dynamicCommissionGroupId`** `required` The dynamic commission group identifier. Use [Get market](settings#get-market) to obtain. ```http title="Request example" GET /frontoffice/api/v3/commission/{dynamicCommissionGroupId}/account-trading-volume HTTP/1.1 Host: {host} Authorization: Bearer JWT Content-Type: application/json; x-api-version=4.0 Accept: */* ``` #### Response [#response-15] In case of success, an object will be returned containing current trading volume, in RAT, for the account. ```json title="Response example — 200: OK" { "currentTradingVolumeInRAT": "string" } ``` ## Get full balance [#get-full-balance] ### Connection [#connection] ```text title="URL" /frontoffice/ws/v3/account?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"FullBalance"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46" ], "invocationId": "0", "target": "FullBalance", "type": 4 } ``` *** ### Message [#message] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `array of objects` The array of balance objects. **`item.assetId`** `string` The asset identifier. **`item.available`** `decimal string` The available asset balance. This value is calculated as *Total balance* – *Locked balance*. **`item.total`** `decimal string` The overall amount of the asset, including locked funds. **`item.locked`** `decimal string` The asset amount locked on the account for execution of all placed Limit orders. ```json title="Example" { "type": 2, "invocationId": "0", "item": [ { "assetId": "eur", "available": "497838.8", "total": "497838.8", "locked": "0" } ] } ``` ## Get margin data [#get-margin-data] ### Connection [#connection-1] ```text title="URL" /frontoffice/ws/v3/account?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"MarginData"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46" ], "invocationId": "0", "target": "MarginData", "type": 4 } ``` *** ### Message [#message-1] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.marginBalanceInRAT`** `decimal string` The total amount of funds that can be used as a collateral for trading, in RAT. This value is calculated as SUM (*TotalAmountX* × *MarginRatioX* × *Rate X/RAT*) Where: * *TotalAmountX* is the the total amount of the asset X, including both available and locked funds. * *MarginRatioX* is the Margin ratio set for the asset X. * *Rate X/RAT* is the constantly updated rate of the asset X to the BP root asset. **`item.creditInRAT`** `decimal string` The promotional trading credit granted to the account by the broker, in RAT. Credit is included in the account equity but excluded from the withdrawable amount. During a rolling deployment, older payloads might omit this field. In that case, default it to `0`. **`item.unrealizedPnlInRAT`** `decimal string` The total potential profit or loss earned from all open positions. This value is calculated as *Σ(Unrealized PnL for Long positions + Unrealized PnL for Short positions)*, where: * *Unrealized PnL for Long positions* = *Position size* × (*Current price* – *Open price*) * *Unrealized PnL for Short positions* = *Position size* × (*Open price* – *Current price*) **`item.equityInRAT`** `decimal string` The potential balance if all open positions were closed right now. This value is calculated as *Margin balance* + *Credit* + *Unrealized PnL*. **`item.usedMarginInRAT`** `decimal string` The amount of funds that is used for maintaining all open positions. Is opposed to the *Free margin*. The Used margin for positions on a specific market is calculated using the maximum value between the total margin of long positions and the total margin of short positions: MAX(*MarketPositionLong*, *MarketPositionShort*). **`item.freeMarginInRAT`** `decimal string` The amount of funds that can be used for opening new positions. **`item.marginLevel`** `decimal string` The ratio of funds to a used collateral, in percents. This value is calculated as *Equity* / *Used margin* × 100%. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "marginBalanceInRAT": "497838.8", "creditInRAT": "0", "unrealizedPnlInRAT": "-5.25", "equityInRAT": "497833.55", "usedMarginInRAT": "100.18", "freeMarginInRAT": "497733.37", "marginLevel": "4969.3905" } } ``` ## Get order book [#get-order-book] ### Connection [#connection] ```text title="URL" /marketdata/v5/info?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. In the second element, provide the `marketId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"Book"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46", "cfd.eur_chf" ], "invocationId": "0", "target": "Book", "type": 4 } ``` *** ### Message [#message] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.instrument`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.askTotalAmount`** `string` The total ask amount. **`item.bidTotalAmount`** `string` The total bid amount. **`item.asks`** `array of objects` The array of ask price objects. **`item.asks.price`** `string` The price, in the quote asset. **`item.asks.amount`** `string` The total amount of the base asset available at a corresponding price level. **`item.asks.total`** `string` The total amount, in the quote asset, required to fully execute the orders at a corresponding price level. **`item.bids`** `array of objects` The array of bid price objects. **`item.bids.price`** `string` The price, in the quote asset. **`item.bids.amount`** `string` The total amount of the base asset available at a corresponding price level. **`item.bids.total`** `string` The total amount, in the quote asset, required to fully execute the orders at a corresponding price level. **`item.version`** `string` The order book version. **`item.snapshot`** `boolean` The data snapshot. If `snapshot: true`, it indicates the message contains the full dataset. Subsequent messages with `snapshot: false` only include updates or changes since the initial snapshot. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "instrument": "cfd.eur_chf", "askTotalAmount": "18700000", "bidTotalAmount": "19100000", "asks": [ { "price": "0.93677", "amount": "5000000", "total": "4683850" }, { "price": "0.93676", "amount": "0", "total": "0" }, { "price": "0.93676", "amount": "0", "total": "0" } ], "bids": [ { "price": "0.93654", "amount": "0", "total": "0" }, { "price": "0.93654", "amount": "0", "total": "0" }, { "price": "0.93655", "amount": "5000000", "total": "4682750" } ], "version": "12498", "snapshot": false } } ``` ## Get trading data [#get-trading-data] ### Connection [#connection-1] ```text title="URL" /marketdata/v5/info?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. In the second element, provide a list of `marketIds` as an array of strings. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"TradingData"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46", [ "spot.bnb_btc" ] ], "invocationId": "0", "target": "TradingData", "type": 4 } ``` *** ### Message [#message-1] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.markets`** `array of objects` The array of market objects. **`item.markets.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.markets.type`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`item.markets.displayName`** `string` The market ticker. **`item.markets.fullName`** `string` The market full name or description (optional). **`item.markets.price`** `decimal string` The current top-of-the-book price, in the quote asset. **`item.markets.priceInRAT`** `decimal string` The current top-of-the-book price, in conversion to the root asset of the platform. **`item.markets.priceChange24hr`** `decimal string` The price change over the last 24 hours, in percents. This value is calculated as ((*Current price* – *Price 24h ago*) / *Current price*) × 100. **`item.markets.priceChangeAbs24hr`** `decimal string` The price change over the last 24 hours. This value is calculated as *Current price* – *Price 24h ago*. **`item.markets.highPrice24hr`** `decimal string` The highest trade price over the last 24 hours. **`item.markets.lowPrice24hr`** `decimal string` The lowest trade price over the last 24 hours. **`item.markets.markPrice`** `decimal string` *Applicable to Perpetual markets only.* The mid-spread price, in conversion to RAT. **`item.markets.fundingRate`** `decimal string` *Applicable to Perpetual markets only.* The current funding rate. **`item.snapshot`** `boolean` The data snapshot. If `snapshot: true`, it indicates the message contains the full dataset. Subsequent messages with `snapshot: false` only include updates or changes since the initial snapshot. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "markets": [ { "marketId": "cfd.eur_chf", "type": "Cfd", "displayName": "cfd.eur_chf", "fullName": "", "price": "0.93586", "priceInRAT": "1", "priceChange24hr": "-0.0006", "priceChangeAbs24hr": "-0.00049", "highPrice24hr": "0.93695", "lowPrice24hr": "0.93134", "markPrice": null, "fundingRate": null } ], "snapshot": false } } ``` ## Get top of the book [#get-top-of-the-book] ### Connection [#connection-2] ```text title="URL" /marketdata/v5/info?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. In the second element, provide a list of `marketIds` as an array of strings. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"Tob"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46", [ "spot.eth_usdt" ] ], "invocationId": "0", "target": "Tob", "type": 4 } ``` *** ### Message [#message-2] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.markets`** `array of objects` The array of market objects. **`item.markets.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.markets.ask`** `decimal string` The top-of-the-book ask price. **`item.markets.bid`** `decimal string` The top-of-the-book bid price. **`item.snapshot`** `boolean` The data snapshot. If `snapshot: true`, it indicates the message contains the full dataset. Subsequent messages with `snapshot: false` only include updates or changes since the initial snapshot. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "markets": [ { "marketId": "spot.eth_usdt", "ask": "2483.82", "bid": "2483.81" } ], "snapshot": false } } ``` ## Get trading chart [#get-trading-chart] ### Connection [#connection-3] ```text title="URL" /marketdata/v5/info?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. In the second element, provide the `marketId` and `timescale` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"Chart"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46", "cfd.eth_eur@15m" ], "invocationId": "0", "target": "Chart", "type": 4 } ``` *** ### Message [#message-3] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.instrument`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.low`** `decimal string` The lowest base asset price within the specified time interval. **`item.high`** `decimal string` The highest base asset price within the specified time interval. **`item.open`** `decimal string` The base asset price at the beginning of the specified time interval. **`item.close`** `decimal string` The base asset price at the end of the specified time interval. **`item.start`** `dateTime` The beginning of the specified time interval, in ISO 8601 format. **`item.end`** `dateTime` The end of the specified time interval, in ISO 8601 format. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "instrument": "cfd.eth_eur", "low": "2240.88", "high": "2270.29", "open": "2265.63", "close": "2255.99", "start": "2025-05-21T15:30:00Z", "end": "2025-05-21T15:45:00Z" } } ``` ## Get market summary [#get-market-summary] ### Connection [#connection-4] ```text title="URL" /marketdata/v5/info?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. In the second element, provide a list of `marketIds` as an array of strings. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"Summary"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46", [ "cfd.eur_chf" ] ], "invocationId": "0", "target": "Summary", "type": 4 } ``` *** ### Message [#message-4] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.items`** `array of objects` The array of data objects. **`item.items.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.items.last`** `decimal string` The price of the last trade. **`item.items.high24hr`** `decimal string` The highest trade price over the last 24 hours. **`item.items.low24hr`** `decimal string` The lowest trade price over the last 24 hours. **`item.items.percentChange`** `decimal string` The price change over the last 24 hours, in percents. This value is calculated as ((*Current price* – *Price 24h ago*) / *Current price*) × 100. **`item.snapshot`** `boolean` The data snapshot. If `snapshot: true`, it indicates the message contains the full dataset. Subsequent messages with `snapshot: false` only include updates or changes since the initial snapshot. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "items": [ { "marketId": "cfd.eur_chf", "last": "0.93597", "high24hr": "0.93695", "low24hr": "0.93134", "percentChange": "-0.02" } ], "snapshot": false } } ``` ## Guest market data [#guest-market-data] Every stream on this page has an anonymous counterpart on a separate hub. Use it to read live market data without an access token — for example, to drive a public dashboard. ### Connection [#connection-5] ```text title="URL" /marketdata/v5/guest ``` No `access_token` query parameter and no `Authorization` header. The connection carries no account, so guest traffic is subject to its own limits, separate from the authenticated ones: a per-instance cap on concurrent connections and a per-client-IP cap on concurrent connections. A connection beyond either cap is rejected with a `GuestConnectionLimitExceeded` hub error. The per-IP cap keys off the real-client-IP header configured for the deployment; connections whose IP cannot be resolved share one fallback bucket. ### Differences from the authenticated hub [#differences-from-the-authenticated-hub] The five stream targets are identical — `Book`, `TradingData`, `Tob`, `Chart`, and `Summary` — and each returns the same message shape as documented above. Two things change: * **`arguments` has one element, not two.** Drop the `accountId` element and pass only what the authenticated hub takes as its second element: | Target | `arguments` | | ------------- | ---------------------------------------- | | `Book` | `[ "cfd.eur_chf" ]` | | `Chart` | `[ "cfd.eth_eur@15m" ]` | | `TradingData` | `[ [ "cfd.eur_chf", "spot.btc_usdt" ] ]` | | `Tob` | `[ [ "cfd.eur_chf", "spot.btc_usdt" ] ]` | | `Summary` | `[ [ "cfd.eur_chf", "spot.btc_usdt" ] ]` | * **Prices are not account-specific.** A guest stream and an authenticated stream on the same instrument can therefore quote different prices. Only markets that are active and well-configured are streamed. A reconnect needs no credentials. ```json title="Example: subscribe to a guest order book" { "arguments": [ "cfd.eur_chf" ], "invocationId": "0", "target": "Book", "type": 4 } ``` For guest snapshots, instrument lists, and candle history over REST, see [Guest](../rest-api/guest). ## Get open orders [#get-open-orders] ### Connection [#connection] ```text title="URL" /frontoffice/ws/v4/account?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"OpenOrders"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46" ], "invocationId": "0", "target": "OpenOrders", "type": 4 } ``` *** ### Message [#message] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `array of objects` The array of market objects. **`item.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.marketType`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`item.marketDisplayName`** `string` The market ticker. **`item.marketFullName`** `string` The market full name or description (optional). **`item.orderId`** `string` The unique identifier of the order assigned by the system. **`item.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`item.status`** `string` The current [order status](../get-started/order-statuses). Possible values: * `Started` * `Pending` * `Working` **`item.source`** `string` The source of the order. Possible values: * `Manual` — the order was created manually via UI or API. **`item.reason`** `string` The reason for placing the order. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`item.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`item.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`item.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell. For market orders, this represents the total base amount to fill; the executed amount may be lower if liquidity is insufficient. **`item.remainingAmount`** `decimal string` The order amount that hasn't yet been filled, in the base asset. **`item.requestedPrice`** `decimal string` The limit price for Limit orders; `null` for Market orders. **`item.executionPrice`** `decimal string` The volume-weighted average price of the order executions. **`item.createdAt`** `dateTime` The timestamp when the order was created, in ISO 8601 format. **`item.updatedAt`** `dateTime` The timestamp of the most recent update to the order, in ISO 8601 format. **`item.cancellationDate`** `dateTime` The timestamp when the order was cancelled or expired, in ISO 8601 format; `null` if not cancelled. **`item.commissionAssetId`** `string` The currency in which the commission was held. **`item.commissionAmount`** `decimal string` The total commissions put on hold for executing the order. **`item.leverage`** `int` *Applicable only to CFD markets.* The leverage ratio used when placing the order. **`item.fillFactor`** `decimal string` The proportion of the order amount filled so far, where `1` represents 100% fulfillment. **`item.comment`** `string | nullable` The text note attached to the order, up to 100 characters. **`item.takeProfit`** `decimal string` The Take Profit price, if set. **`item.stopLoss`** `decimal string` The Stop Loss price, if set. ```json { "type": 2, "invocationId": "0", "item": [ { "marketId": "cfd.eur_chf", "marketType": "Cfd", "marketDisplayName": "EUR/CHF", "marketFullName": "", "orderId": "01JVQBFSTVC40VK03A0AY7K016", "timeInForce": "Gtc", "status": "Pending", "source": "Manual", "reason": "Trader", "side": "Buy", "orderType": "Limit", "requestedAmount": "10000", "remainingAmount": "10000", "requestedPrice": "0.9", "executionPrice": "0", "createdAt": "2025-05-20T17:22:31.899Z", "updatedAt": "2025-05-20T17:22:31.9001213Z", "cancellationDate": null, "commissionAssetId": "eur", "commissionAmount": "0", "leverage": 1, "fillFactor": "0", "takeProfit": null, "stopLoss": null, "comment": null } ] } ``` ## Get open positions [#get-open-positions] ### Connection [#connection-1] ```text title="URL" /frontoffice/ws/v4/account?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"OpenPositions"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46" ], "invocationId": "0", "target": "OpenPositions", "type": 4 } ``` *** ### Message [#message-1] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.item`** `array of objects` The array of position objects. **`item.item.positionId`** `string` The unique identifier of the position assigned by the system. **`item.item.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.item.marketType`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`item.item.marketDisplayName`** `string` The market ticker. **`item.item.marketFullName`** `string` The market full name or description (optional). **`item.item.createdAt`** `dateTime` The timestamp when the position was opened, in ISO 8601 format. **`item.item.updatedAt`** `dateTime` The timestamp of the most recent update to the position, in ISO 8601 format. **`item.item.side`** `string` The position side. Possible values: * `Buy` * `Sell` **`item.item.status`** `string` The current position status. Always `"Open"`. **`item.item.leverage`** `int` *Applicable only to CFD markets.* The leverage ratio used when opening the position. **`item.item.positionLotAmount`** `decimal string` The position volume, in lots. **`item.item.positionPriceInRAT`** `decimal string` The current position price, in conversion to RAT. **`item.item.rateToRAT`** `decimal string` The current exchange rate of a quote asset to RAT. **`item.item.usedMarginInRAT`** `decimal string` The amount of trader’s funds used for maintaining a position, in conversion to RAT. **`item.item.openPrice`** `decimal string` The volume-weighted average price (VWAP) at which the position was opened. **`item.item.currentMarketPrice`** `decimal string` The current market price of the base asset: bid for Long positions and ask for Short positions. **`item.item.unrealizedPnlDayInRAT`** `decimal string` The potential profit or loss earned for a current day, in conversion to RAT. For **Long** positions, this value is calculated as *Position size* × (*Current bid price* – *First bid price for today*). For **Short** positions, this value is calculated as *Position size* × (*First ask price for today* – *Current ask price*). If a position was opened today, then the *Open VWAP* is used instead of the *First price for today*. **`item.item.unrealizedPnlDayPercent`** `decimal string` The potential profit or loss earned for a current day, in percents. **`item.item.unrealizedPnlTotalInRAT`** `decimal string` The potential profit or loss earned for the entire period from the moment the position was opened, in conversion to RAT. For **Long** positions, this value is calculated as *Position size* × (*Current bid price* – *Open VWAP*). For **Short** positions, this value is calculated as *Position size* × (*Open VWAP* – *Current ask price*). **`item.item.unrealizedPnlTotalPercent`** `decimal string` The potential profit or loss earned for the entire period from the moment the position was opened, in conversion to RAT, in percents. **`item.item.takeProfit`** `decimal string` The Take Profit price, if set. **`item.item.stopLoss`** `decimal string` The Stop Loss price, if set. **`item.item.positionModifier`** `string` The reason for the latest position update. **`item.item.comment`** `string | nullable` The text note inherited from the opening order, up to 100 characters. **`snapshot`** `boolean` The data snapshot. If `snapshot: true`, it indicates the message contains the full dataset. Subsequent messages with `snapshot: false` only include updates or changes since the initial snapshot. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "item": [ { "positionId": "01JP4H3AMS7Q1H6Y6H3XJ52JTA", "marketId": "cfd.eur_chf", "marketType": "Cfd", "marketDisplayName": "EUR/CHF", "marketFullName": "", "createdAt": "2025-03-12T06:36:31.257Z", "updatedAt": "2025-03-12T06:36:31.257Z", "side": "Buy", "status": "Open", "leverage": 1, "positionLotAmount": "0.01", "positionPriceInRAT": "1000.46", "rateToRAT": "1.07", "usedMarginInRAT": "1000.53", "openPrice": "0.96304", "currentMarketPrice": "0.93501", "unrealizedPnlDayInRAT": "1.86", "unrealizedPnlDayPercent": "0.0018", "unrealizedPnlTotalInRAT": "-29.93", "unrealizedPnlTotalPercent": "-0.0291", "takeProfit": null, "stopLoss": null, "positionModifier": "Trader", "comment": null }, { "positionId": "01JVQB9ZWJ6G4QV0P98X0QWNA7", "marketId": "cfd.eur_chf", "marketType": "Cfd", "marketDisplayName": "EUR/CHF", "marketFullName": "", "createdAt": "2025-05-20T17:19:21.49Z", "updatedAt": "2025-05-20T17:19:21.491321Z", "side": "Buy", "status": "Open", "leverage": 100, "positionLotAmount": "0.1", "positionPriceInRAT": "10004.6", "rateToRAT": "1.07", "usedMarginInRAT": "100.06", "openPrice": "0.93666", "currentMarketPrice": "0.93501", "unrealizedPnlDayInRAT": "18.61", "unrealizedPnlDayPercent": "0.0018", "unrealizedPnlTotalInRAT": "-17.02", "unrealizedPnlTotalPercent": "-0.0017", "takeProfit": null, "stopLoss": null, "positionModifier": "Trader", "comment": null } ], "snapshot": false } } ``` ## Get closed positions [#get-closed-positions] ### Connection [#connection-2] ```text title="URL" /frontoffice/ws/v4/account?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"ClosePositionsOrders"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46" ], "invocationId": "0", "target": "ClosePositionsOrders", "type": 4 } ``` *** ### Message [#message-2] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `array of objects` The array of position objects. **`item.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.marketType`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`item.marketDisplayName`** `string` The market ticker. **`item.marketFullName`** `string` The market full name or description (optional). **`item.orderId`** `string` The unique identifier of the order assigned by the system. **`item.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`item.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`item.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`item.positionCloseLotAmount`** `decimal string` The closed volume, in lots, which is equivalent to the corresponding filled order volume. **`item.reason`** `string` The reason for position closing. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`item.realizedPnlInRAT`** `decimal string` The actual profit or loss earned, in conversion to RAT. For **Long** positions, this value is calculated as *Position size* × (*Close price* – *Open price*). For **Short** positions, this value is calculated as *Position size* × (*Open price* – *Close price*). **`item.closedAt`** `dateTime` The timestamp when the position was closed, in ISO 8601 format. **`item.positionId`** `string` The unique identifier of the position assigned by the system. **`item.openPrice`** `decimal string` The volume-weighted average price (VWAP) at which the position was opened. **`item.closePrice`** `decimal string` The volume-weighted average price (VWAP) of trades related to a position-closing order. **`item.positionPriceInRAT`** `decimal string` The position price, in conversion to RAT. **`item.rateToRAT`** `decimal string` The conversion rate to RAT. **`item.openedAt`** `dateTime` The timestamp when the position was opened, in ISO 8601 format. ```json title="Example" { "type": 2, "invocationId": "0", "item": [ { "marketId": "cfd.eur_chf", "marketFullName": "", "marketDisplayName": "EUR/CHF", "marketType": "Cfd", "orderId": "01JVSQ8WFA3QZ6AQTKYPXVXDWA", "orderType": "Market", "timeInForce": "Ioc", "side": "Sell", "positionCloseLotAmount": "0.01", "reason": "Trader", "realizedPnlInRAT": "-29.25", "closedAt": "2025-05-21T15:26:57.0027785Z", "positionId": "01JP4H3AMS7Q1H6Y6H3XJ52JTA", "openPrice": "0.96304", "closePrice": "0.93571", "positionPriceInRAT": "1001.2", "rateToRAT": "1.07", "openedAt": "2025-03-12T06:36:31.257Z" } ] } ``` You can connect B2Trader to **ChatGPT** as a **connector**. It uses the same B2Trader MCP URL and OAuth sign-in as every other agent. Pick the surface you need first — see [Overview](overview): * Read-only: `https:///mcp-read-only` * Full access: `https:///mcp-full-access` Ask your broker for the exact base URL for your platform. The read-only connector may also be discoverable directly in ChatGPT's connector directory. Connector availability depends on your ChatGPT plan. ## Connect the B2Trader connector [#connect-the-b2trader-connector] 1. In ChatGPT, open **Settings** → **Connectors**. 2. Choose to add a connector by **URL** (custom connector). 3. Paste the B2Trader MCP **URL** for the surface you want (read-only or full access). 4. Confirm. ChatGPT reads the endpoint's OAuth metadata and opens the sign-in page for your platform in your browser. 5. Sign in with the credentials you normally use. Depending on how your broker set up your platform, this is either the B2Trader sign-in form or the sign-in page of the portal you normally use to access your account. Authentication uses OAuth 2.1 with PKCE — no API key is pasted into ChatGPT. 6. **Full access only:** approve the consent screen (see [The full-access consent screen](#the-full-access-consent-screen)). 7. ChatGPT lists the connector as connected, and the B2Trader tools become available to it. ## The full-access consent screen [#the-full-access-consent-screen] When you connect the **full-access** surface, B2Trader shows an explicit consent screen before issuing a token. It reads: Connecting this AI agent lets it place, cancel and close orders and set triggers on your account directly, with no per-action confirmation. These actions are irreversible. This differs from the in-terminal AI chat, which confirms each trade. * **Approve** — ChatGPT receives a token carrying the `mcp:trade` scope and can trade on your account. * **Decline** — no token is issued and ChatGPT stays disconnected from the full-access surface. The read-only surface does **not** show this screen — it only grants the `mcp:read` scope. Before approving full access, read [Full-access safety](full-access-safety). ## What "connected" looks like [#what-connected-looks-like] * The connector appears as connected in ChatGPT's settings. * B2Trader tools are available to ChatGPT in your chats. * On read-only, no order-placing or position-closing tools appear — they are not part of that surface. ## Disconnecting [#disconnecting] * In ChatGPT, remove the connector to stop it calling B2Trader. * To revoke B2Trader's side of the grant, use the account console — see [How to stop your agent](full-access-safety#how-to-stop-your-agent). You can connect B2Trader to **Claude** in two places: * **claude.ai** (web and desktop app) — add B2Trader as a **custom connector**. * **Claude Desktop** — add B2Trader as an MCP server; the OAuth sign-in completes through Claude's hosted redirect (`https://claude.ai/api/mcp/auth_callback`). Both use the same B2Trader MCP URL and the same OAuth sign-in. Pick the surface you need first — see [Overview](overview): * Read-only: `https:///mcp-read-only` * Full access: `https:///mcp-full-access` Ask your broker for the exact base URL for your platform. The read-only connector may also be discoverable directly in Claude's connector directory. ## Connect on claude.ai [#connect-on-claudeai] 1. Open **Settings** → **Connectors** in claude.ai. 2. Click **Add custom connector**. 3. Paste the B2Trader MCP **URL** for the surface you want (read-only or full access). 4. Click **Add**. Claude reads the endpoint's OAuth metadata and opens the sign-in page for your platform in your browser. 5. Sign in with the credentials you normally use. Depending on how your broker set up your platform, this is either the B2Trader sign-in form or the sign-in page of the portal you normally use to access your account. Authentication uses OAuth 2.1 with PKCE — you are **not** pasting an API key into Claude. 6. **Full access only:** approve the consent screen (see [The full-access consent screen](#the-full-access-consent-screen)). 7. Claude shows the connector as **Connected**, and the B2Trader tools appear in the tool list for your conversations. ## Connect in Claude Desktop [#connect-in-claude-desktop] 1. Open **Claude Desktop** → **Settings** → **Connectors**. 2. Add a new MCP server pointing at the B2Trader MCP URL for your surface. 3. Claude Desktop opens your browser for OAuth sign-in and completes the flow through Claude's **hosted** redirect (`https://claude.ai/api/mcp/auth_callback`), a pre-registered redirect URI. 4. Sign in and — for full access — approve the consent screen. 5. The B2Trader tools appear in Claude Desktop once the connector reports **Connected**. ## The full-access consent screen [#the-full-access-consent-screen] When you connect the **full-access** surface, B2Trader shows an explicit consent screen before issuing a token. It reads: Connecting this AI agent lets it place, cancel and close orders and set triggers on your account directly, with no per-action confirmation. These actions are irreversible. This differs from the in-terminal AI chat, which confirms each trade. * **Approve** — Claude receives a token carrying the `mcp:trade` scope and can trade on your account. * **Decline** — no token is issued and Claude stays disconnected from the full-access surface. The read-only surface does **not** show this screen — it only grants the `mcp:read` scope. Before approving full access, read [Full-access safety](full-access-safety). ## What "connected" looks like [#what-connected-looks-like] * The connector is listed as **Connected** in Claude's settings. * B2Trader tools (for example `trader_get_accounts`, plus platform market-data and portfolio tools) are available to Claude in your conversations. * On read-only, no order-placing or position-closing tools appear — they are not part of that surface. ## Disconnecting [#disconnecting] * In Claude, remove the connector to stop it calling B2Trader. * To revoke B2Trader's side of the grant, use the account console — see [How to stop your agent](full-access-safety#how-to-stop-your-agent). If you are building your own agent (for example with an Agent SDK) or using an MCP client that is not Claude or ChatGPT, you connect to the same two B2Trader endpoints and the same OAuth flow. This page covers the OAuth details a custom client needs. Pick the surface you need first — see [Overview](overview): * Read-only: `https:///mcp-read-only` * Full access: `https:///mcp-full-access` `` is the domain you open your B2Trader terminal on, not a separate API address. ## OAuth discovery [#oauth-discovery] Your client needs no B2Trader-specific configuration beyond the MCP URL. B2Trader is an OAuth 2.1 protected resource and advertises everything a compliant client needs: 1. Your client calls the MCP endpoint without a token and receives `401 Unauthorized` with a `WWW-Authenticate: Bearer resource_metadata="…"` header. 2. That header points at the protected-resource metadata (RFC 9728) for the surface you called — each surface has its own document: `https:///.well-known/oauth-protected-resource/mcp-read-only` and `https:///.well-known/oauth-protected-resource/mcp-full-access`. Fetching it returns the resource identifier, the authorization server (your broker's Keycloak realm), and `scopes_supported` — one scope only, matching the surface: `[mcp:read]` for `/mcp-read-only`, `[mcp:trade]` for `/mcp-full-access`. 3. Your client runs the standard OAuth 2.1 **authorization-code flow with PKCE** against that authorization server, requesting the scope for the surface you want. 4. B2Trader validates the token's audience (`bbp-mcp`) and the required scope (`mcp:read` for read-only, `mcp:trade` for full access) before serving any tool. Use a compliant MCP client library — it performs discovery, PKCE, and token refresh for you. You only supply the MCP URL. ## Pre-registered OAuth clients [#pre-registered-oauth-clients] B2Trader ships two pre-registered public OAuth clients. Use the one matching your surface: | Surface | `client_id` | Scope | Consent | | ----------- | ----------------- | ----------- | ---------------------------- | | Read-only | `mcp-read-only` | `mcp:read` | None | | Full access | `mcp-full-access` | `mcp:trade` | Explicit trade-scope consent | Both are **public** clients (no client secret) and require **PKCE (S256)**. A custom client authenticates as one of these `client_id`s and completes the browser sign-in as any other agent does. Depending on how your broker set up your platform, the page that opens is either the B2Trader sign-in form or the sign-in page of the portal you normally use to access your account — your client behaves the same either way. ## Command-line agents (Codex CLI, Claude Code) [#command-line-agents-codex-cli-claude-code] Command-line MCP clients default to **Dynamic Client Registration (DCR)** — on first connect they try to register a brand-new OAuth client with the authorization server instead of using a fixed `client_id`. The B2Trader Keycloak realm does not permit anonymous DCR, so these tools must be told to use one of the pre-registered `client_id`s above: * **Codex CLI:** ```bash codex mcp add --url --oauth-client-id mcp-full-access codex mcp login ``` Use `mcp-read-only` in place of `mcp-full-access` for the read-only surface. * **Claude Code:** ```bash claude mcp add --transport http --client-id mcp-full-access --callback-port 8080 ``` Without an explicit `client_id`, both tools fall back to anonymous DCR, which the authorization server rejects — the connection fails before you reach the sign-in page. ## Redirect URIs [#redirect-uris] The pre-registered clients accept these redirect URIs: | Redirect URI | Use | | ------------------------------------------------------- | ----------------------------------------------------- | | `https://claude.ai/api/mcp/auth_callback` | Claude (claude.ai) | | `https://chatgpt.com/connector_platform_oauth_redirect` | ChatGPT | | `http://localhost:8080/*` | Claude Code — fixed callback port | | `http://127.0.0.1/*` | Codex CLI and other loopback clients — ephemeral port | If your custom agent runs locally, use one of the loopback redirects above. Most Agent SDKs and MCP client libraries (including Codex CLI) default to an ephemeral-port loopback callback on `127.0.0.1`, matching `http://127.0.0.1/*`, so no configuration change is needed. Claude Code is the exception: it needs a **fixed** callback port to match a registered redirect, so pass `--callback-port 8080` (matching `http://localhost:8080/*`) as shown above. ## Adding a custom redirect URI (broker step) [#adding-a-custom-redirect-uri-broker-step] If your agent runs on a hosted callback URL that is **not** one of the above (for example a server-side agent with its own public redirect), your broker must add that redirect URI to the pre-registered client in Keycloak before sign-in will succeed. A redirect URI that is not registered on the client fails at the sign-in step with an "Invalid redirect URI" error from Keycloak. Send your broker the exact callback URL your agent uses and which surface it needs (read-only or full access). Adding a redirect URI is a broker-side change to the MCP client registration. It requires no product change and is the documented path for onboarding custom, non-marketplace agents. ## Full access [#full-access] If your custom agent uses the full-access surface, the same [full-access safety](full-access-safety) rules apply: no per-action confirmation, irreversible actions, and the prompt-injection risk of an autonomous agent. Read that page before granting `mcp:trade`. The full-access surface (`/mcp-full-access`) lets a connected AI agent trade on your account **directly**. This page explains exactly what that means and how to stay in control. Read it before you approve the full-access consent screen. Connecting this AI agent lets it place, cancel and close orders and set triggers on your account directly, with no per-action confirmation. These actions are irreversible. This differs from the in-terminal AI chat, which confirms each trade. ## No per-action confirmation [#no-per-action-confirmation] The in-terminal **AI Assistant chat** asks you to confirm each trade before it executes. The full-access MCP surface does **not**. Once connected, the agent can place, cancel, and close orders and set price triggers on its own, as fast as it decides to — there is no confirmation dialog and no "are you sure?" step. ## Actions are irreversible [#actions-are-irreversible] Trades execute against the live market. A filled order, a closed position, or a cancelled order **cannot be undone**. If your agent makes a mistake — or is manipulated into one — the market result stands. ## Prompt-injection risk [#prompt-injection-risk] An autonomous agent acts on the text it reads. If your agent processes untrusted content — a web page, an email, a chat message, a document — that content can contain hidden instructions telling the agent to trade against your interest. This is called **prompt injection**. Because the full-access surface has no confirmation gate, a successful injection can move real money before you notice. To reduce the risk: * Prefer the **read-only** surface unless you specifically need the agent to trade. * Only grant full access to agents and workflows you trust and control. * Be cautious about letting a full-access agent read untrusted external content in the same session it can trade. ## How to stop your agent [#how-to-stop-your-agent] You have two independent controls. Use either — or both. 1. **Stop it in the agent (fastest).** Disconnect or remove the B2Trader connector in your agent (Claude, ChatGPT, or your custom client). The agent immediately stops making new calls. 2. **Revoke the grant in B2Trader.** Open your **account console** (your broker's Keycloak account page) → **Applications**, find the connected MCP application, and **revoke** its access. This removes your consent so the agent cannot obtain a new token. There is no broker-side "kill switch" that instantly voids a token already in the agent's hands. A token the agent already holds stays valid until it expires (see [Access tokens are short-lived](#access-tokens-are-short-lived)). Revoking in the account console stops **new** tokens; disconnecting in the agent stops it using the one it has. Do both to be certain. ## You still get execution notifications [#you-still-get-execution-notifications] Every order the agent places, cancels, or closes fires the **same account notifications** you already receive for terminal activity. Your normal notification channels keep working, so a full-access agent cannot act silently — watch them to see what your agent is doing. ## Access tokens are short-lived [#access-tokens-are-short-lived] The agent's access token has a **short lifetime**. If you revoke consent in the account console, the agent can finish using its current token but cannot get a new one once it expires — so a revoked grant fully lapses within the token's short window, without any forced server-side revocation. ## Choosing read-only instead [#choosing-read-only-instead] If you do not need the agent to trade, connect the **read-only** surface (`/mcp-read-only`) instead. Its tools cannot place or change anything — the trading tools are not part of that surface at all. See [Overview](overview) for the comparison. B2Trader can expose your trading account to external AI agents through the **Model Context Protocol (MCP)** — an open standard that lets AI applications such as Claude and ChatGPT call a defined set of tools on your behalf. Once you connect an agent, it can read your market data and portfolio, and — on the full-access surface — place and manage orders directly. This is different from the **in-terminal AI Assistant chat**, which runs inside the B2Trader terminal and confirms each trade with you before it executes. An external MCP agent runs in *its own* application (Claude, ChatGPT, or your own client) and connects to B2Trader over the internet using your account sign-in. Connecting an AI agent is optional — it's your choice whether to use it. The MCP surfaces are available by default, though your broker can restrict or disable them for your platform. The MCP endpoints live on the same domain you use to open your B2Trader terminal, so wherever these pages show `https:///…`, that means your terminal address — not a separate API address. If a connection URL below doesn't work, contact your broker. ## Two surfaces [#two-surfaces] B2Trader publishes **two** separate MCP endpoints. You choose one when you connect your agent. | | Read-only | Full access | | ------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | | **Endpoint path** | `/mcp-read-only` | `/mcp-full-access` | | **What the agent can do** | View market data, your portfolio, order and position history, and analytics | Everything in read-only **plus** place, cancel, and close orders and set price triggers | | **Tools exposed** | 23 | 39 | | **Trading** | None — mutating tools are not present at all | Full trading, with **no per-action confirmation** | | **OAuth scope** | `mcp:read` | `mcp:trade` | | **Consent screen** | No extra consent | Explicit trade-scope consent (see [Full-access safety](full-access-safety)) | | **Marketplace-listed** | Yes | No — connect by URL | The **read-only** surface is the one listed in AI marketplaces (for example the Claude and ChatGPT connector directories). It is safe to connect broadly: the trading tools are **structurally absent** — the agent cannot see or call them. The **full-access** surface is connected by pasting its URL directly. It grants your agent the ability to trade with no confirmation gate. Read [Full-access safety](full-access-safety) before you connect it. ## Tool categories [#tool-categories] Both surfaces expose the same read tools; the full-access surface adds the mutating ones. | Category | Read-only | Full access | | ------------------------------------------------------------------------------ | --------- | ----------- | | Market data — B2Trader platform prices (tickers, order book, market summaries) | Yes | Yes | | Portfolio & account (balances, margin, open positions) | Yes | Yes | | Order & position history | Yes | Yes | | Analytics & reference data | Yes | Yes | | Place / cancel / close orders (single) | No | Yes | | Bulk order / position actions | No | Yes | | Set & edit price triggers, other account mutations | No | Yes | | **Total tools** | **23** | **39** | The 16 tools that the full-access surface adds are the mutating actions: single trading actions, bulk trading actions, and non-trading account mutations. ## Which surface to choose [#which-surface-to-choose] * **Choose read-only** if you want an agent to analyze markets, summarize your portfolio, or answer questions about your trading history. This is the recommended default and the safest option. * **Choose full access** only if you deliberately want your agent to trade for you without confirming each action, and you understand the risks in [Full-access safety](full-access-safety). ## Prerequisites [#prerequisites] Before connecting any agent you need: * A **B2Trader account** on a platform that offers the MCP surfaces. They are available by default; a broker can restrict or disable them. * Your account must be **active** (`bbp.spot.status = Active`) — the same status required to trade in the terminal. A non-active account can sign in, but its tool calls are rejected by the platform. * An AI application that supports MCP with OAuth — for example [Claude](connect-claude), [ChatGPT](connect-chatgpt), or a [custom agent](connect-custom-agent). ## How connecting works [#how-connecting-works] You never paste an API key or password into your agent. Connection uses **OAuth 2.1 with PKCE**: 1. You add the B2Trader MCP URL to your agent. 2. The agent discovers B2Trader's authorization server automatically — it reads the endpoint's protected-resource metadata at `/.well-known/oauth-protected-resource/mcp-read-only` or `/.well-known/oauth-protected-resource/mcp-full-access`, depending on the surface. 3. Your browser opens the sign-in page for your platform, where you sign in with the credentials you normally use. 4. For the full-access surface, you approve an explicit consent screen describing what the agent may do. 5. The agent receives a short-lived access token and is connected. No long-lived secret is stored in the agent. The sign-in page you see depends on how your broker set up your platform: either the B2Trader sign-in form, or the sign-in page of the portal you normally use to access your account, which opens automatically. If you are already signed in there in the same browser, no sign-in prompt appears. The per-client steps are covered in the connection guides: * [Connect Claude](connect-claude) * [Connect ChatGPT](connect-chatgpt) * [Connect a custom agent](connect-custom-agent) * [Full-access safety](full-access-safety) ## Global interface controls [#global-interface-controls] ### Account selection [#account-selection] The **Account select** is located in the topbar and enables you to switch between your trading accounts. Each account shows its type: `H` (Hedging) or `N` (Netting). Once you switch the account, all the widgets automatically adjust to show relevant information for the selected account. Account select #### Account status [#account-status] An account can have a status that limits what you can do with it. When a status applies, a status indicator is shown on the account, and a banner explains the restriction. Account status is managed by your administrator. The following statuses are visible to you: * **Halted**: A banner reads *Account is locked for trading. Contact your administrator.* The trading controls are disabled, but you can still deposit and withdraw funds, and your balances, positions, and history stay visible. * **Frozen**: A banner reads *Account is frozen. Contact your administrator.* The account is view-only. All controls are disabled, while your balances, positions, and history stay visible. To restore trading on an account that is Halted or Frozen, contact your administrator. Archived accounts don't appear in the account list. ### Instrument selection [#instrument-selection] The **Instrument select** is located in the topbar and enables you to switch between various markets and trading pairs. Once you change the market, all the widgets automatically adjust to show relevant information for the selected instrument. Instrument select #### Favorite markets [#favorite-markets] Mark instruments as favorites for quick access. To add or remove a market from favorites, click the **star icon** next to the market name in the instrument selection list. Favorite markets can be accessed in two ways: * **Favorites tab** in the instrument selection panel — filters the list to show only your favorite markets. * **Favorites dropdown** in the topbar — provides quick access to favorite markets from anywhere in the terminal. ### Settings [#settings] Use this control to access interface and system settings. Refer to [Settings](settings) for details. Settings ### Other controls [#other-controls] * **Introduction tour**: Access the interactive platform walkthrough. Introduction tour * **Alerts**: View new system notifications. Unread alerts * **Analytics**: Open the **Account Analytics** view with the **Equity Curve** chart — your account balance and equity dynamics over time (Margin Balance, Equity, Total Equity, Unrealized PnL, Deposits / Withdrawals) for a selected period and granularity. The data updates hourly. Click **Back to Trading** to return to the terminal. Analytics * **Log out**: Log out of the system to securely terminate the session. After that you’re navigated to the Login page. Log out ## Working with widgets [#working-with-widgets] > For more information about available widgets, refer to the **Widgets** section of this guide. ### Add widgets to your workspace [#add-widgets-to-your-workspace] **To add a new widget**: 1. Click the **Add Widget** button. 2. Browse the available widgets. 3. Click any widget to add it to your workspace. Add Widget **To add widgets to existing panels**: 1. Look for the **+** button next to the tabs in a panel's header. 2. Click it to open the widget catalog. 3. Select a widget to add it as a new tab to that panel. Add widget tabs ### Move and position widgets [#move-and-position-widgets] **To move a widget**: 1. Click and hold the **move handle** in the top-right corner of the panel header. 2. Drag it to desired location on the page. 3. Drop it. Move widgets **To rearrange widget tabs within a panel**: 1. Click and hold any widget tab. 2. Drag it left or right to reorder. 3. Release to set the new position. ### Resize widgets [#resize-widgets] **To resize a widget panel**: * **Single edge**: Hover over any edge until you see the resize cursor, then drag. * **Corner resize**: Drag a corner to adjust both width and height simultaneously. * **Precision**: Use edge dragging for fine-tuned sizing. Resize widgets ### Remove widgets and tabs [#remove-widgets-and-tabs] **To remove a tab**: 1. Click the **×** button in the top-right corner of the widget tab. 2. The tab will be removed immediately. 3. When you remove the last tab from a panel, the entire panel disappears. Remove tabs and widget panels ### Link panels to a group [#link-panels-to-a-group] Each panel header has a **Link to group** button — the circle icon **next to the move handle** in the top-right corner. Linking panels to the same colored group keeps them in sync: when you select an instrument in one linked panel, the other panels in the same group switch to it automatically. **To link a panel to a group**: 1. Click the **Link to group** button (next to the move handle) in the panel's top-right corner. 2. Select one of the color groups (Group 1–5). 3. Repeat for other panels, choosing the same group to keep them synchronized. Link to group ### Customize widget content [#customize-widget-content] Certain widgets let you customize which columns to display and their order: Look for the **column settings** button in the widget header. **To customize columns**: 1. Click the **column settings** button. 2. **Show/hide columns**: Check or uncheck boxes (grayed-out columns are required). 3. **Reorder columns**: Drag and drop items in the list. 4. **Reset**: Click *Reset to default* to restore original settings. Configure columns ## Managing workspaces [#managing-workspaces] ### Create new workspaces [#create-new-workspaces] **To create a workspace**: 1. Click the **+** tab next to your existing workspaces. 2. Choose a template: * **Pre-built templates**: Start with common widget combinations. * **Empty**: Build completely from scratch. 3. Enter a name for your workspace. 4. Start customizing. Add a new workspace ### Workspace management [#workspace-management] **To rename or delete a workspace**: 1. Click the menu icon on the workspace tab. 2. Select **Rename** or **Remove**. Workspace menu **To reorder workspaces**: 1. Click and hold any workspace tab. 2. Drag it left or right to reorder. 3. Release to set the new position. ## Market info panel [#market-info-panel] Click the **info icon** next to a market symbol in widgets to view: * Detailed market information. * Trading session schedules. * Leverage details (for CFD and PF markets). * Fee details. * Funding details (for PF markets). Market info ## Pro tips [#pro-tips] ### Efficient layout building [#efficient-layout-building] * Start with a template that is close to your needs, then customize. * Group related widgets in tabs to save screen space. * Use larger panels for charts, smaller ones for order books. ### Layout best practices [#layout-best-practices] * **Save multiple workspaces** for different trading strategies. * **Test your layout** during low-activity periods. * **Keep essential widgets visible** (account info, positions, alerts). Guest mode lets you open the Trading terminal and look around without an account. You get the real interface with live market data, so you can judge the platform and its market coverage before you sign up. Everything that would move money or show someone's balance stays behind login. You do not switch Guest mode on. Open the terminal URL without a session and it loads in Guest mode on its own — there is no redirect to a login page first. On your first visit a short disclaimer appears, stating that the page is for information only and that the instruments actually available for trading are determined by current legislation. Click **OK** to dismiss it; it is remembered in your browser and does not appear again. Your broker can turn the disclaimer off. ## What you can do as a guest [#what-you-can-do-as-a-guest] * Browse the full list of instruments your broker offers, and filter, group, and search it exactly as a logged-in trader would. * Follow live prices, the [Order book](../widgets/order-book), and [Market depth](../widgets/market-depth). * Work with the [Price chart](../widgets/price-chart): change the instrument, change the timeframe, and use the chart tools. * Open the [AI Assistant](../widgets/ai-assistant) widget for market analysis. * Fill in the [Place order](../widgets/place-order) form — order type, side, quantity, price, stop loss, take profit, time in force. The fields behave the same as they do for a logged-in trader, so you can see exactly what placing an order involves. ## What needs logging in [#what-needs-logging-in] In the [Place order](../widgets/place-order) widget the order submit button is replaced by a **Log In** button. You can fill in the whole form and see the calculated figures, but there is no way to submit an order as a guest. Account-related widgets are not hidden either. Each is covered by an overlay with a padlock icon, the message *Log in to unlock all features*, and a **Log In** button, so you can see where your own data will appear once you have an account. The affected widgets are: * [Assets](../widgets/assets) * [Margin](../widgets/margin) * [Open orders](../widgets/open-orders) * [Open positions](../widgets/open-positions) * [Closed positions](../widgets/closed-positions) * [Order history](../widgets/order-history) * [Stop orders](../widgets/stop-orders) * [Messages](../widgets/messages) * [Price control](../widgets/price-control) ## Your guest workspace [#your-guest-workspace] Guest mode opens with a workspace laid out by your broker. It is the same on every visit and it is not saved: rearranging widgets as a guest does not carry over to your next visit, and it never becomes your workspace after you log in. ## Logging in from Guest mode [#logging-in-from-guest-mode] Use **Log In** in the terminal topbar, or the **Log In** button on any account widget overlay or in the Place order widget — they all do the same thing. After you log in, the terminal reloads into the full trading experience and opens your saved workspace. On a first login, when you have no saved workspace yet, it opens the default one. If you are already logged in to your broker's client portal in the same browser, the terminal detects that session on load and takes you straight into the full trading experience — no second login. ## Logging out [#logging-out] Logging out returns you to Guest mode on the same address, not to a login page, so you can keep watching the markets. Your account data is cleared from the browser first, so no balances, positions, orders, or history remain visible. Access settings by clicking the **gear icon** in the topbar of the Trading terminal. Settings Settings are organized into tabs: * [Interface](#interface): Configure language, time display, and visual theme. * [Widgets](#widgets): Customize widget display options. * [Action Confirmation](#action-confirmation): Choose which actions require additional confirmation. * [Account margin](#account-margin): Manage collateral assets for margin trading. * [Trading report](#trading-report): Generate comprehensive trading and account reports. * [API token management](#api-token-management): Generate and manage tokens for accessing the Trading API. * [TradingView Webhooks](#tradingview-webhooks): Configure TradingView webhook alerts for automated order execution. ## Interface [#interface] Configure global interface preferences: **Language** Select the interface language from the dropdown menu. **24 hour mode** * Enable: Display time in 24-hour format. * Disable: Display time in 12-hour format with AM/PM. **Dark theme** * Enable: Apply dark color scheme. * Disable: Apply light color scheme. ## Widgets [#widgets] Configure display options for the following widgets. ### Price chart [#price-chart] **Display positions** When enabled, open positions are shown on the chart along with: * Position size and current PnL. * Quick access to edit price triggers and close positions. * Color coding: Long positions (green), Short positions (red). **Display orders and triggers** When enabled, the following orders and triggers are displayed on the chart: * Active Limit and Stop orders with order type, price, and amount. * Stop loss, Take profit, and Trailing stop triggers. * Quick access to edit triggers and cancel orders. * Color coding: Buy orders (green), Sell orders (red). **Display executed orders** When enabled, executed orders are shown on the chart with order type indicators: * Green `B` tag for Buy orders. * Red `S` tag for Sell orders. Clicking `B` or `S` will open details of one or more orders that were executed during the candle interval. **Market quick trade panel** When enabled, a panel is displayed on the chart for placing Market orders with: * Quick amount selection from preset values. * Leverage ratio input (when applicable). Amount presets can be configured in the corresponding field displayed when the option is enabled. **Limit quick trade panel** When enabled, a panel is displayed on the chart for placing Limit orders with: * Quick amount selection from preset values. * Leverage ratio input (when applicable). Amount presets can be configured in the corresponding field displayed when the option is enabled. ## Action Confirmation [#action-confirmation] Choose which trading actions require an additional confirmation dialog before execution. **Cancel orders** * Enable: A confirmation dialog is displayed before canceling orders. * Disable: Orders are canceled immediately without confirmation. This setting applies to single and bulk order cancellations from the **Open Orders** widget and the **Price chart**. The confirmation dialog includes a **"Don't ask again"** checkbox. To skip the confirmation for future order cancellations, check this box. **Full Close Positions** * Enable: A confirmation dialog is displayed before closing positions. * Disable: Positions are closed immediately without confirmation. This setting applies to single and bulk position closures from the **Open Positions** widget. **Limit order cross-TOB warning** * Enable: A confirmation dialog is displayed before a Limit order is submitted if its price crosses the current top-of-book — that is, when a Buy price is at or above the best ask, or a Sell price is at or below the best bid. The dialog shows the entered price and the current best bid/ask, and includes a **Do not show this warning again** checkbox. * Disable: Crossing Limit orders are submitted immediately without the warning. The warning is enabled by default. The dialog checkbox and this toggle share the same global setting and stay in sync. The warning is informational only — it does not block the order. If you confirm, the order is submitted with the original price. The warning applies only to standard Limit orders; Stop-limit, Take-profit-limit, IOC, FOK, and other order types are not affected. If best bid or best ask data is unavailable (empty book or disconnected feed), the order is submitted without the warning. ## Account margin [#account-margin] Control which assets can be used as collateral for margin trading. ### Asset list [#asset-list] The following information is provided about each asset: **Asset** The alphabetical code of the asset. The first asset in the list is the **root asset** of the platform. *** **Caption** The asset name. *** **Available** The balance available for trading, calculated as *Total – Halted*, where *Halted* represents funds locked for pending Limit orders. *** **Total** The complete asset balance including locked funds. *** **Margin ratio** The percentage of asset value that can be used as collateral for margin trading. *** **Use as margin** Enable this toggle to use the asset as collateral for margin trading. Configure which assets can be used as collateral for margin trading by toggling the **Use as margin** setting for each asset. Only assets with **Margin ratio** greater than 0 (zero) can be enabled. The platform root asset is enabled by default and can't be disabled. ### Filtering options [#filtering-options] Click the **funnel icon** to configure the asset list display: * **Show/Hide zero balances**: Control visibility of assets with zero balance. By default, hidden. * **Show/Hide assets unused as margin**: Control visibility of assets with disabled margin usage. * **Show/Hide assets with zero margin ratio**: Control visibility of assets that can't be used as collateral. By default, hidden. ## Trading report [#trading-report] Generate comprehensive reports containing: * **Trade history** * Closed positions * Executed orders * Individual trades * **Transfers history** * All account transfers * **Account statistics** * Total balance * Realized PnL * Position swaps * Position funding * Commissions To generate a report: 1. Select a custom period of time (UTC time), or generate a report for your entire account history using the **All data** range. The following timeframe presets have been implemented for your convenience: * **Today** * **Current**: week, month, quarter * **Previous**: week, month, quarter * **All data**. 2. Click **Download**. Once generated, the report will be automatically downloaded to your computer as a zipped CSV file. ## API token management [#api-token-management] Generate tokens for accessing the [Trading API](https://api-docs.b2trader.b2broker.com/): * **Limit**: 10 tokens per account * **Validity**: 1 year * **Management**: Can be revoked or deleted at any time To generate a token: 1. Click **+ Create new**. 2. In the **New API token** popup, fill in a **Name** for the token, to help you identify it later. 3. Click **Create**. The newly generated token will be displayed and available for copying, along with its name and expiration date. The token only reveals once in the creation popup. Copy and store it securely before closing the popup. The token can't be retrieved again after closing. ## TradingView Webhooks [#tradingview-webhooks] Use TradingView Webhooks to automatically execute orders on your trading account based on alerts from TradingView. When a TradingView alert triggers, it sends a webhook request to B2TRADER, which places an order according to the parameters specified in the alert message. This feature supports all market types: Spot, CFD, and Perpetual Futures. ### Set up the webhook [#set-up-the-webhook] #### Step 1: Create a webhook API key [#step-1-create-a-webhook-api-key] To create a webhook API key in the Trading terminal: 1. Click the **gear icon** in the topbar to open Settings. 2. Navigate to the **TradingView Webhooks** tab. 3. Click **+ Create new**. 4. In the popup, fill in a **Name** for the key. 5. Click **Create**. The popup displays the generated API key and the webhook URL. Copy both values and store them securely. The API key is shown only once at creation. It can't be retrieved after closing the popup. The following limits apply: * Maximum 10 active keys per user * Each key is valid for 1 year from creation * Keys can be revoked at any time #### Step 2: Configure the alert in TradingView [#step-2-configure-the-alert-in-tradingview] 1. In TradingView, create a new alert or edit an existing one. 2. In the **Notifications** section, enable **Webhook URL**. 3. Paste the webhook URL copied from the terminal. 4. In the **Message** field, enter the alert body in JSON format (see [Alert message format](#alert-message-format)). 5. Save the alert. When the alert triggers, TradingView sends the message to B2TRADER, and the order is placed automatically. ### Alert message format [#alert-message-format] The alert message is a JSON object with the following fields: | Field | Required | Description | | ----------------- | ----------- | -------------------------------------------------------------------------- | | `apiKey` | Yes | Webhook API key generated in the terminal | | `accountId` | Yes | Trading account ID | | `symbol` | Yes | Market symbol with type prefix (see [Symbol format](#symbol-format)) | | `side` | Yes | Order side: `buy` or `sell` | | `quantity` | Yes | Order quantity in base asset | | `orderType` | No | `market` (default), `limit`, `stop`, or `stop_limit` | | `price` | Conditional | Limit price. Required for `limit` and `stop_limit` orders | | `stopPrice` | Conditional | Stop price. Required for `stop` and `stop_limit` orders | | `leverage` | No | Leverage ratio. Applicable to CFD and Perpetual Futures markets only | | `takeProfit` | No | Take profit trigger price | | `stopLoss` | No | Stop loss trigger price | | `timeInForce` | No | `gtc` (default), `ioc`, `fok`, or `day` | | `comment` | No | Custom comment, up to 256 characters | | `deduplicationId` | No | UUID for idempotency. Duplicates within 5 minutes return a cached response | #### Symbol format [#symbol-format] The symbol must include a market type prefix: | Market type | Prefix | Example | | ----------------- | ------- | --------------- | | Spot | `spot.` | `spot.btc_usdt` | | CFD | `cfd.` | `cfd.eur_usd` | | Perpetual Futures | `perp.` | `perp.btc_usdt` | #### Examples [#examples] **Market buy order (Spot):** ```json { "apiKey": "wh_key_your_api_key_here", "accountId": "your_account_id", "symbol": "spot.btc_usdt", "side": "buy", "quantity": "0.01" } ``` **Limit sell order with TP/SL (CFD):** ```json { "apiKey": "wh_key_your_api_key_here", "accountId": "your_account_id", "symbol": "cfd.eur_usd", "side": "sell", "orderType": "limit", "price": "1.0900", "quantity": "1000", "leverage": "10", "takeProfit": "1.0800", "stopLoss": "1.0950", "timeInForce": "gtc" } ``` ### Manage webhook API keys [#manage-webhook-api-keys] To view or manage your webhook API keys, navigate to **Settings** > **TradingView Webhooks**. The following information is provided about each key: | Column | Description | | ----------- | ----------------------------------------------- | | **Name** | The name assigned to the key at creation | | **Status** | Current key status: Active, Revoked, or Expired | | **Created** | The date and time the key was generated | | **Expires** | The date and time the key expires | To revoke a key, click the **Revoke** button next to the key entry. ### Rate limits [#rate-limits] Webhook requests are limited to 5 requests per second per user. If this limit is exceeded, the request returns a `429` error code and the order isn't placed. ### Troubleshooting [#troubleshooting] The following table describes common error scenarios and their solutions: | Issue | Cause | Solution | | -------------------------------- | ------------------------------------------------------------ | --------------------------------------------------- | | `Invalid API key` | The API key is incorrect or wasn't copied in full | Generate a new key and update the TradingView alert | | `API key expired` | The key has passed its 1-year validity period | Generate a new key | | `API key revoked` | The key was manually revoked | Generate a new key | | `Invalid symbol format` | The symbol is missing a market type prefix | Add the prefix: `spot.`, `cfd.`, or `perp.` | | `Price required for limit order` | A `limit` or `stop_limit` order is missing the `price` field | Add the `price` field to the alert message | | `Rate limit exceeded` | More than 5 requests were sent within 1 second | Reduce the alert frequency in TradingView | | `Account not found` | The `accountId` doesn't exist or isn't accessible | Verify the account ID in the terminal | A market can be assigned one of the following statuses: * **Open**: The market is operating properly and accepts orders via Trading terminal and API. Market data for charts is persisted. * **Paused**: The market stops accepting incoming orders via Trading terminal and API (previously placed Limit orders still await execution). Market data for charts is persisted. * **Halted**: The market stops accepting incoming orders via Trading terminal and API. All open Limit orders will be cancelled. Market data for charts is persisted. * **Disabled**: The market stops accepting incoming orders via Trading terminal and API. All open Limit orders will be cancelled. Market data for charts is not persisted. * **Archived**: The market is retired from regular operations. It doesn't accept trading activity, isn't included in market synchronization responses, and its historical chart data is deleted. ## Market and Limit orders [#market-and-limit-orders] Orders can be assigned one of the following statuses: * **Started**: The order has passed preliminary checks. * **Pending**: For Limit orders: the order is waiting for a price trigger. * **Working**: The order is being executed. * **Completed**: The order has been executed in its full amount. * **Cancelled**: The order has been cancelled by a trader. * **Rejected**: The order has been rejected by the system and has never been assigned the *Working* status. * **Expired**: The order has been cancelled due to [Time in force](time-in-force) settings. Some part of it may have already been executed. The status is applicable for GTD and Day orders only. ## Stop orders [#stop-orders] Orders can be assigned one of the following statuses: * **Waiting for activation**: The order awaits the Activation price trigger. * **Activated**: The Activation price has been reached, a new Market or Limit order has been placed. * **Rejected**: The Activation price has been reached, but an issue occurred with placing of a new Market or Limit order. The following order types are supported: * **Market**: An instruction to instantly buy or sell a certain asset amount at a currently best price on the market. Such orders are not listed in the order book. * **Limit**: An instruction to buy or sell a certain asset amount at a specified price. Limit orders are placed in the order book and executed only after the market price reaches the specified limit price (or at a better price). * **Stop Market**: Such an order is not placed unless the current market price meets a specified stop (or trigger) price, after which the order is placed as a regular Market order due to be executed or cancelled, depending on its Time in force. * **Stop Limit**: The order is similar to the Stop Market order in the sense that you need to indicate the stop price at which the order must be placed, after which it becomes a regular Limit order awaiting execution at a specified limit price. For Stop buy orders, the stop price should be above the best ask price; for Stop sell orders, the stop price should be below the best bid price (otherwise, the orders will be activated instantly). Stop Market and Stop Limit orders are accepted while a market is closed according to its trading calendar. The order is stored with the standard **Waiting for activation** status and is evaluated against the first available price when the session opens. Market and Limit orders are still rejected while the market is closed. The market's own status must still be Open — a Paused or Halted market rejects every order type. Refer to [Time in force](time-in-force) to learn about execution parameters that can be specified for different order types. When trading on CFD or Perpetual markets, the following triggers can be enabled to manage investments and mitigate risks: * **Take profit**: A take-profit order is used to sell or buy an asset automatically once it hits a predefined price, ensuring the trader locks in profits. For example, if a trader buys ETH at $2,000 and sets the Take profit at $2,100, the platform will sell the ETH automatically when the market price reaches $2100, securing the trader's profit. * **Stop loss**: A stop-loss order is a tool to limit potential losses. It automatically sells an asset when its price falls to a predetermined level. For example, if a trader buys ETH at $2,000 and sets the Stop loss at $1,900, the asset will be sold if the price drops to $1,900, capping the loss to $100 per ETH. * **Trailing stop**: A trailing-stop order allows a trader to set a Stop price that dynamically adjusts as the market price moves. It's different from a regular stop-loss order because the Stop price isn't stationary but follows the market price by a specified percentage. When the asset price moves favorably, the Stop price updates, securing potential gains. However, if the price falls, the Stop price stays fixed to protect profits or limit losses. For example, a trader buys ETH at $2,000 and sets the Trailing stop at $1900 with a 10% adjustment. If ETH rises to $2,200, the Trailing stop increases to $2,090. A drop to $2,090 triggers the sale, locking in gains. The triggers are applicable to all order types: Market, Limit, Stop Market, and Stop Limit. Multiple triggers can be applied simultaneously. The triggers can be adjusted anytime until a position is fully closed. The Take profit, Stop loss, and Trailing stop always operate with the current position volume. For **buy** orders, the triggers are activated by the top-of-the-book **bid** price. For **sell** orders, the triggers are activated by the top-of-the-book **ask** price. Triggers do not activate if a position is in the *Stop out* state. However, if the position persists after the *Stop out*, triggers can then be activated. The following time-in-force settings can be specified for orders: * **FOK** (fill-or-kill): Such orders are either filled instantly or killed (cancelled). In other words, a fill-or-kill order must be fulfilled instantly or not executed at all. FOK orders are used when partial delivery of assets isn't acceptable for any reason. * **IOC** (immediate-or-cancel): This setting implies that any part of an order that can't be filled instantly must be cancelled. Upon placing an IOC order, an attempt will be made to instantly execute it (in full or in part) at the best possible price, after which any remaining, unfilled part will be cancelled. If no amount is available at a specified price upon placing such order, it's cancelled instantly. * **GTC** (good-‘til-cancelled): The default setting applied to all limit orders. Open GTC orders are awaiting execution until they are cancelled explicitly by a trader or filled. * **GTD** (good-‘til-date): Can be applied to limit and stop limit orders. Such orders remain listed in the order book until a specified date or until they are cancelled by a trader. By that time the order can be partially executed. * **DAY**: Can be applied to limit and stop limit orders. Such orders remain listed in the order book until 23:59 of the current day or until they are cancelled by a trader. By that time the order can be partially executed. * **Retry**: Can be applied to market orders only. A Retry order aims to fill your full volume by repeatedly filling the unfilled remainder at current market prices. The average price may be worse than shown, and in thin markets a remainder may stay unfilled. The order expiration time is defined by the time settings specified for the BP, without taking into account the time settings of the devices from which the BP is accessed. ## iOS v1.35 [#ios-v135] This version includes: * **Account Analytics** A new **Account Analytics** screen displays an equity curve and detailed trading statistics for your account. Select a time period and granularity level to filter performance data, and switch between accounts using the built-in account selector. * **AI Assistant** A new **AI Assistant** widget provides AI-powered market analysis for each instrument, including trade recommendations, market sentiment, signal drivers, suggested actions, and key metrics. * **Quick order from the chart** You can now place orders directly from the **Price chart** by tapping a price pin. The **Quick Order** panel opens pre-filled at the selected price level for faster order placement. * **Customizable workspace** You can now reorder and show or hide bottom tabs in **Settings**, allowing you to tailor the terminal layout to your trading preferences. * **Adaptive interface by market type** Tabs, **Margin Level**, and perpetual funding indicators are now automatically hidden for accounts that do not have access to the corresponding market types, providing a cleaner and more focused interface. * **Landscape mode for the chart** Tapping the **Expand** button on the **Price chart** now automatically rotates the chart to landscape mode for a wider view. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.34 [#ios-v134] This version includes: * **Drag Take Profit and Stop Loss on the chart** **Take Profit** and **Stop Loss** levels can now be adjusted by dragging their lines directly on the **Price chart**. Changes are applied to the order immediately, with automatic rollback if an error occurs. * **Demo accounts** Demo trading accounts are now supported, allowing you to practice trading strategies and explore the platform without risking real funds. * **Favourite markets** You can now mark markets as favourites for quick access. Favourite markets appear as chips in the market list and are indicated with an icon in the terminal. * **Credit in margin details** A dedicated **Credit** row has been added to the margin details section, providing visibility into credit amounts allocated to your trading account. * **Comments for orders, positions, and trades** You can now add a comment when placing an order or managing a position. The comment is visible throughout the trading lifecycle — on open orders, open positions, and in trade history. * **Margin Level display** When **Margin Level** data is unavailable, the field now displays "–" instead of 0% for clearer data visibility. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.33 [#ios-v133] This version includes: * **Navigate to market from alerts** You can now open the market chart directly from the **All Alerts** screen, providing faster access to price data for monitored instruments. * **Quick market navigation from trading widgets** Tapping a market name in **Open orders**, **Stop orders**, **Order history**, **Open positions**, or **Closed positions** now switches to that market directly, enabling faster navigation between instruments. * **Hide zero balances settings relocated** The **Hide zero balances** toggle has been moved to the **Assets** tab for more intuitive access. * **Improved backend error messages** Backend error messages are now mapped to user-friendly descriptions, providing clearer feedback when issues occur. * **Improved RAT rounding** All Rate to RAT and margin-related values now display according to the root asset scale rules, ensuring consistent and accurate financial data across the app. * **Corrected Stop Market order calculations** **Value** and **Amount** calculations for **Stop Market** orders have been updated for improved accuracy. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.32 [#ios-v132] This version includes: * **Quick close button for open positions** The **Open positions** widget now features a quick **Close** button on each position card, allowing you to close individual positions with a single tap without opening position details. * **Quick cancel button for open orders** The **Open orders** widget now features a quick **Cancel** button on each order card, enabling faster order cancellation directly from the list view. * **Click-to-fill price from Order book** Tapping a price level in the **Order book** widget now automatically fills the selected price into the **Place order** form, streamlining the order placement process. * **Hide zero balances** A new **Hide zero balances** toggle has been added to the **Assets** widget, allowing you to filter out assets with zero balance for a cleaner portfolio overview. * **Deposit and transfer options** A new **Deposit** button has been added to the account screen, providing quick access to deposit and transfer options. The available actions depend on your platform configuration. * **Redesigned account selection header** The account selection section in the terminal header has been redesigned for improved navigation and a cleaner appearance. * **Updated closed positions design** The **Closed positions** widget has been updated with a refreshed layout for better readability and consistency with other trading widgets. * **Confirmation bottom sheet** Order and position actions now display a confirmation bottom sheet, helping to prevent accidental trades and providing a clearer review step before execution. * **Settings button relocated** The **Settings** button has been moved from the **Price chart** widget to the terminal header for easier access across all views. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.31 [#ios-v131] This version includes: Experience an advanced trading workflow with the introduction of our new **tiered leverage system**, offering dynamic leverage based on position size and enhanced margin visibility. This update also brings improved commission transparency with a dedicated Fees tab, enhanced market info, a new deposit shortcut, and updated screens for tiered commissions. We've also refined formatters to respect your selected app language for a more consistent experience. *** ## iOS v1.30 [#ios-v130] This version includes: * **Notifications widget** A new **Notifications** widget has been implemented providing quick access to system notifications related to price changes, Margin calls, Stop outs, Take profit and Stop loss triggers. * **Closing open positions from the Price chart** Open positions can now be closed directly on the **Price chart** screen ensuring quick reaction to volatile market conditions and efficient trade management. This feature is available if the **Display positions** setting is activated for the Price chart. * **Closing all open positions** The **Open positions** tab now features the **Close all** button that liquidates all open positions at once. This allows you to react immediately to sharp price moves, limiting losses, and removes the necessity to close positions individually. * **Canceling all active orders** The **Open orders** tab now features the **Cancel all** button allowing to close all *Pending* and *Working* orders at once. This reduces reaction time in volatile markets and removes the necessity to close orders individually. * **Market details in Place order** The market name and last price values have been added to the **Advanced** mode of the **Place order** widget. The price is updated in real time. * **Asset balance in RAT** The **Assets** list now displays **Available** and **Total** balance equivalents in RAT for better portfolio overview and value tracking. * **Simplified Markets list** The market full names have been removed from the **Markets** list for cleaner appearance. * **Trading session status** The **Trading session status** in the **Position details** is now accompanied by an info icon and an explanatory tooltip. * **Automatic horizontal scrolling for tabs** The horizontal auto scroll has been added to tabs. Active tabs are now automatically centered for optimal visibility and better accessibility to all available tabs. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.29 [#ios-v129] This version includes: * **Perpetual Futures (PF) trading now available in the app** PF trading is now supported in the app, introducing a new market type and expanding trading opportunities. To support this, the following features have been added for perpetual markets: * The **Funding**/**Countdown** information, including a countdown timer and current funding rate, helping traders stay informed about upcoming settlements. * A new **Funding** tab that displays the current funding rate, a historical chart, and detailed rate and settlement information. * **Updated account creation process** When creating a trading account in the app, the **account type** can now be selected: **Hedging** or **Netting**, enabling traders to plan and adjust their trading strategies to maximize profit or reduce risk. Depending on the platform settings, the option may be prefilled or require manual selection. The account type can’t be changed after the account is created. * **Support for Take Profit, Stop Loss, and Trailing Stop** The **Take Profit**, **Stop Loss**, and **Trailing Stop** triggers are now supported in the app for CFD and PF trading. They can be applied to Market, Limit, and Stop orders, as well as to currently open positions. * **Support for price alerts** Price alerts are now fully supported in the app: * Multiple alerts can be added to monitor different price levels for any instrument. * Configure alerts based on a fixed price or a percentage change. * View a list of all configured alerts for each instrument. * Adjust or delete existing alerts as needed. * Triggered alerts are automatically removed to keep the list up to date. * **Enhanced Price chart widget** Several visual enhancements have been added to the Price chart widget to provide greater clarity and deeper trading insights: * Active **Limit** and **Stop orders** that aren’t yet in final status are now visually represented using horizontal lines – green for buy orders and red for sell orders. This enables traders to view active orders in real time on the chart, relative to current market price movements. This feature can be turned on or off in the Price chart settings. * **Executed orders** are now visually represented using arrow icons – green for buy orders and red for sell orders. This feature is available for the **Line** and **Candles** chart display options and can also be turned on or off in the Price chart settings. * **Stop Loss** (SL) and **Take Profit** (TP) levels are now visually displayed as color-coded horizontal lines, labeled with their abbreviations. Tap on a line to reveal the exact price on the Y-axis and access the option to delete the level. * **Improved filtering** To help traders quickly find the necessary data, advanced filtering options have been added to the following widgets: **Open positions**, **Closed positions**, **Open orders**, **Stop orders**, and **Order history**. New filters include: * **Market options**, such as All Markets, Current Market, Spot, CFD, and Perpetual. * **Time period** selectors specific to each widget. * **Status** filters for the Order history widget. * **Admin-managed orders and positions** On the **Open positions**, **Closed positions**, and **Order history** widgets, if BP Admins have managed positions or orders, this is now indicated in the **Reason** field within the position or order details. Admins may manage these to assist traders upon request, address suspicious activity, mitigate risks, or resolve outstanding positions before account termination. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.28 [#ios-v128] This version includes: * **Performance upgrade** Streamlined top-of-the-book ask and bid prices in the Place Order widget are now received through a dedicated socket for faster obtaining and display. * **Mobile and Web Consistency** Unified colors and naming for a consistent experience across platforms. * **User experience enhancements** Placeholders are now displayed for empty fields and widgets for improved UX clarity. * **Internal improvements** Enhanced system logs for better diagnostics. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. ## Android v2.12.0 [#android-v2120] This version includes: * **AI Assistant** A new **AI Assistant** provides AI-powered market analysis for each market, including trade recommendations, a 12-month price forecast, market sentiment, signal drivers, suggested actions, and key metrics. * **Account Analytics** A new **Account Analytics** screen displays an equity curve and detailed trading statistics for your account. * **Account status indicators** Account statuses such as **Halted** and **Frozen** are now shown with badges and a warning banner, and the related trading actions are restricted accordingly. * **Quick order from the chart** You can now place orders directly from the **Price chart**, enabling faster reaction to market movements. * **Take Profit / Stop Loss on the chart** **Take Profit** and **Stop Loss** levels can now be set by dragging their lines directly on the **Price chart**, with support for trailing Stop Loss. * **Cross-price limit order warning** A warning is now displayed before you place a **Limit** order whose price crosses the top of the **Order book**. This warning can be enabled or disabled in **Settings**. * **Customizable trading terminal** You can now customize the trading terminal layout and tab order from the new **Workspace** settings. * **Adaptive interface by market type** Margin- and perpetual-related tabs and indicators are now hidden for accounts with access to **Spot** markets only, providing a cleaner interface tailored to the account type. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## Android v2.11.0 [#android-v2110] This version includes: * **Comment field in Place Order** An optional **Comment** field has been added to the **Place order** form in **Advanced Mode**. The field supports up to 100 characters and is available for all order types across Spot, CFD, and Perpetual markets. * **Full-screen chart mode** The **Price chart** widget now supports full-screen mode. Tap the **Expand** button to switch to a landscape view for a more detailed chart analysis. * **Credit information in margin details** A **Credit** row has been added to the margin section, providing visibility into credit amounts allocated to trading accounts. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## Android v2.10.0 [#android-v2100] This version includes: * **Quick close button for open positions** The **Open positions** widget now features a quick **Close** button on each position card, allowing you to close individual positions with a single tap without opening position details. * **Demo accounts** Demo trading accounts are now supported in the app, allowing you to practice trading strategies and explore the platform without risking real funds. * **Favourite markets** You can now mark markets as favourites for quick access. Favourite markets are synchronized between the web and mobile terminals. * **Click-to-fill price from Order book** Tapping a price level in the **Order book** widget now automatically fills the selected price into the **Place order** form, streamlining the order placement process. * **Hide zero balances** A new **Hide zero balances** toggle has been added to the **Assets** widget, allowing you to filter out assets with zero balance for a cleaner portfolio overview. * **Deposit and transfer options** A new **Deposit** button has been added to the account screen, providing quick access to deposit and transfer options. The available actions depend on your platform configuration. * **Navigate to market from alerts** You can now open the market chart directly from the **All Alerts** screen, providing faster access to price data for monitored instruments. * **Quick market navigation from trading widgets** Tapping a market name in **Open orders**, **Stop orders**, **Order history**, **Open positions**, or **Closed positions** now switches to that market directly, enabling faster navigation between instruments. * **Improved RAT rounding** All Rate to RAT and margin-related values now display according to the root asset scale rules, ensuring consistent and accurate financial data across the app. * **Improved market status display** The **Market Closed** label is now automatically removed once live data starts updating, providing a more accurate representation of market availability. * **Corrected Stop Market order calculations** **Value** and **Amount** calculations for **Stop Market** orders have been updated for improved accuracy. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## Android v2.9.0 [#android-v290] This version includes: This update introduces the new **tiered leverage system**, enhanced fee transparency and fully redesigned Fees tab, quick Deposit/Trade shortcuts on account cards for faster navigation and various UI improvements across the app. *** ## Android v2.8.0 [#android-v280] This version includes: * **Asset balance in RAT** The **Assets** list now displays **Available** and **Total** balance equivalents in RAT for better portfolio overview and value tracking. * **Simplified Markets list** The market full names have been removed from the **Markets** list for cleaner appearance. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. *** ## Android v2.7.0 [#android-v270] This version includes: * **Key position parameters on the TP/SL editing** Key position parameters, such as **Name**, **Side**, **Amount**, **Open price**, **Current price**, and **Leverage** are displayed at the top of the Take Profit/Stop Loss configuration screen to give you immediate, accurate context and reduce input errors. Values are updated in real time. * **Closing positions on the Price chart** You can now close positions directly on the **Price chart** widget, by tapping a position indicator. * **Canceling all active orders** The **Open orders** widget now features the **Cancel all** button allowing to close all *Pending* and *Working* orders at once. This reduces reaction time in volatile markets and removes the necessity to close orders individually. * **Closing all open positions** The **Open positions** widget now features the **Close all** button allowing to liquidate all open positions at once. This allows you to react immediately to sharp price moves, limiting losses, and removes the necessity to close positions individually. * **Closed position details** The **Order type** and **Time in force** values are now displayed for every closed position to improve trade execution transparency. * **Price chart settings saved** The **Price chart** widget now remembers your preferred timeframe and chart type settings. Each time you open the terminal, it displays the chart with your last selected settings. * **Market details in Place order** The market name and last price values have been added to the **Advanced** mode of the **Place order** widget. The price is updated in real time. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. *** ## Android v2.6.0 [#android-v260] This version includes: * **Perpetual Futures (PF) trading now available in the app** PF trading is now supported in the app, introducing a new market type and expanding trading opportunities. To support this, the following features have been added for perpetual markets: * The **Funding/Countdown** information, including a countdown timer and current funding rate, helping traders stay informed about upcoming settlements. * A new **Funding** tab that displays the current funding rate, a historical chart, and detailed rate and settlement information. * **Improved filtering** To help traders quickly find the necessary data, advanced filtering options have been added to the following widgets: **Open positions**, **Closed positions**, **Open orders**, **Stop orders**, and **Order history**. New filters include: * **Market options**, such as All Markets, Current Market, Spot, CFD, and Perpetual. * **Time period** selectors specific to each widget. * **Status** filters for the Order History widget. * **Enhanced Price chart widget** Several visual enhancements have been added to the Price chart widget to provide greater clarity and deeper trading insights: * Active **Limit** and **Stop orders** that aren’t yet in final status are now visually represented using horizontal lines – green for buy orders and red for sell orders. This enables traders to view active orders in real time on the chart, relative to current market price movements. This feature can be turned on or off in the Price chart settings. * **Executed orders** are now visually represented using arrow icons – green for buy orders and red for sell orders. This feature is available for the **Line** and **Candles** chart display options and can also be turned on or off in the Price chart settings. * **Stop Loss** (SL) and **Take Profit** (TP) levels are now visually displayed as color-coded horizontal lines, labeled with their abbreviations. Tap on a line to reveal the exact price on the Y-axis and access the option to delete the level. * Expanded capabilities for account administration and risk management for Brokers have been added. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. *** ## Android v2.5.0 [#android-v250] This version includes: * **Stop Loss and Take Profit on the Price chart widget** * Introduction of Stop-Loss (SL) and Take-Profit (TP) lines on the Price chart for enhanced trading insights. * TP and SL are displayed as color-coded lines with only abbreviations visible. * Tap to view prices on the Y-axis and access deletion options. * **Full support for price alerts in the app** * Alerts can be set for specific price levels. * Alerts can be configured based on either a set price or a percentage change. * A list of configured alerts is available for each instrument. * Options to delete or adjust alerts are provided. * Triggered alerts are automatically removed from the list. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. *** ## Android v2.4.0 [#android-v240] This version includes: * **New mobile features** * Introduction of Take Profit, Stop Loss, and Trailing Stop functionalities in the Mobile app. * Support for Netting accounts in the Mobile app. * **Mobile and Web consistency** Unified colors and naming for a consistent experience across platforms. * **User experience enhancements** For order lists, the All/Spot/CFD filter is only displayed when there are both Spot and CFD orders, for improved UX clarity. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. ## June 10, 2026 [#june-10-2026] ### New features [#new-features] #### Guest mode [#guest-mode] A new **Guest mode** lets you explore the Trading terminal without signing in. As a guest you can browse markets and market categories, follow live price streams and interactive charts, and open the **AI Assistant** widget for market analysis. A dedicated guest workspace is provided, and the [Place order](../widgets/place-order) panel opens in the advanced view by default. A **Sign in** action is always available so you can switch to a full trading session at any time. ## June 2, 2026 [#june-2-2026] ### Improvements [#improvements] #### Full account history in Trading reports [#full-account-history-in-trading-reports] You can now generate [Trading reports](../get-started/settings) for your entire account history. The previous **92-day** limit has been removed, and a new **All data** range has been added to the report period selector alongside the existing presets. #### Stop orders during closed market sessions [#stop-orders-during-closed-market-sessions] You can now place **Stop** orders while a market is closed according to its trading schedule. The order is accepted and activates automatically once the market reopens, instead of being rejected at placement. #### More accurate unrealized PnL [#more-accurate-unrealized-pnl] Unrealized PnL is now calculated using the correct order book side for each position direction, improving the accuracy of the PnL shown across your widgets. #### Limit price crossing warning [#limit-price-crossing-warning] When you place a limit order at a price that crosses the current top of book, the terminal now shows a warning, helping you avoid an unintended immediate execution. ## April 9, 2026 [#april-9-2026] ### New features [#new-features-1] #### Trading credit [#trading-credit] Your broker can now grant you **trading credit** — a promotional bonus balance you can use for trading. Credit appears as a separate **Credit Balance** alongside your own funds and becomes available for placing trades immediately upon issuance. You are notified when credit is granted or revoked. Trading credit is a trading-only bonus and cannot be withdrawn as cash, so it is excluded from your withdrawable balance. *** ### Improvements [#improvements-1] #### Fee-aware 100% allocation [#fee-aware-100-allocation] The **100%** button in the [Place order](../widgets/place-order) widget now accounts for commissions and margin requirements when allocating funds, so the calculated amount reflects what is actually available for the trade. #### Faster price updates [#faster-price-updates] The price update frequency in terminal widgets has been increased, providing more responsive market data across your workspace. ## March 18, 2026 [#march-18-2026] ### New features [#new-features-2] #### Webhook API for TradingView alerts [#webhook-api-for-tradingview-alerts] A new **Webhook API** has been added, enabling you to connect **TradingView** alerts to your trading workflow. You can generate and copy authentication tokens directly from the Trading terminal to configure webhook-based alerts in **TradingView**. *** ### Resolved issues [#resolved-issues] There have been no customer-facing issues reported in this release. ## March 3, 2026 [#march-3-2026] ### New features [#new-features-3] #### Long-term trading data history [#long-term-trading-data-history] The three-month limit on trading data history has been removed. You can now access the full history of your orders, positions, and trades without time restrictions, enabling deeper analysis of past trading activity. #### AI Assistant widget [#ai-assistant-widget] A new **AI Assistant** widget is now available in the Trading terminal. The widget provides AI-powered market analysis for the selected instrument, including: * A recommendation gauge displaying a score from **Strong Sell** to **Strong Buy** * A 12-month price forecast with target price and percentage change * A market sentiment bar showing the bullish/bearish ratio * Signal drivers section with technical, on-chain, and sentiment factors * Suggested trading actions and key market metrics The widget can be added to any workspace like other terminal widgets. *** ### Improvements [#improvements-2] #### Updated order cancellation confirmation [#updated-order-cancellation-confirmation] The order cancellation confirmation dialog now includes a **Don't ask again** checkbox when canceling triggers from the **TradingView** chart. This allows you to skip the confirmation step for future trigger cancellations, streamlining the trading workflow. *** ### Resolved issues [#resolved-issues-1] There have been no customer-facing issues reported in this release. ## February 25, 2026 [#february-25-2026] ### New features [#new-features-4] #### Redesigned Market Depth widget [#redesigned-market-depth-widget] The [Market Depth](../widgets/market-depth) widget has been completely redesigned with an updated visual layout. Bid and ask labels are now displayed when hovering over a price level, providing better visibility into the order book at a glance. #### Redesigned widget adding experience [#redesigned-widget-adding-experience] The process of adding widgets to workspaces has been redesigned with a more intuitive and streamlined flow. The new interface makes it easier to customize your trading workspace layout by providing a clearer visual selection of available widgets. #### Order and position comments [#order-and-position-comments] A new **Comment** field has been added to orders, positions, and trades throughout the Trading terminal. You can now attach notes directly to your trading activities, making it easier to annotate trading decisions and keep records of your reasoning. #### Favorites [#favorites] You can now mark instruments as favorites for quick access across the Trading terminal. The [Favorite markets](../get-started/customizing-your-terminal#favorite-markets) feature integrates with the instrument selection panel, making it faster to locate and trade your preferred instruments. #### Multi-language support [#multi-language-support] The Trading terminal now supports additional languages: **Chinese (Simplified)**, **Spanish**, **Portuguese**, **French**, **Turkish**, and **Farsi**. Existing translations have also been updated to reflect the latest interface changes. *** ### Improvements [#improvements-3] #### Updated order calculations [#updated-order-calculations] The **Value** and **Amount** calculation logic has been improved for more accurate order handling: * For **Stop Market** orders, the estimated values are now calculated using updated formulas that align with the actual execution logic. * For **Spot** market orders, the **Slippage Rate** is now correctly applied only to buy orders and has been removed from sell order calculations. * The **Slippage Rate** attribute has been removed from **CFD** and **PF** market forms and information displays, as it is not applicable to these market types. #### Improved TP/SL trigger management [#improved-tpsl-trigger-management] Removing Take Profit and Stop Loss triggers is now easier in the TradingView charting widget. Instead of opening a dialog and unchecking the trigger, you can now click the close button directly on the trigger to remove it immediately. #### Updated default columns [#updated-default-columns] The default columns displayed in the [Open positions](../widgets/open-positions) and [Open orders](../widgets/open-orders) widgets have been updated to show the most relevant information by default, reducing the need for manual customization. #### Account margin value formatting [#account-margin-value-formatting] Account margin values such as **Balance**, **Equity**, **Margin**, and **Free margin** in the [Margin](../widgets/margin) widget are now formatted according to the **Root Asset Scale**. This ensures that numerical precision matches the asset's defined scale, eliminating misleading decimal places. #### Updated Settings experience [#updated-settings-experience] The [Settings](../get-started/settings) experience has been improved: * The **Action Confirmation** section text has been rewritten for clarity. The description now reads: "Choose which actions will require additional confirmation," making the toggle behavior immediately clear. * The **One-click trading** configuration has been updated with improved toggle controls and clearer options for enabling or disabling confirmation dialogs on trading actions. #### Improved order validation [#improved-order-validation] Order validation logic has been updated across the Trading terminal, providing clearer feedback on invalid inputs and reducing errors during order placement and management. #### Workspace tab styling [#workspace-tab-styling] Visual improvements have been applied to workspace tabs: gaps have been added between tabs for better visual separation, tab padding has been corrected, and hovered tabs now display a proper card-style fill matching the updated design system. ## December 19, 2025 [#december-19-2025] ### New features [#new-features-5] #### Volume-based tiered commissions [#volume-based-tiered-commissions] You can now benefit from **volume-based commission tiers** that automatically reduce your trading fees as your monthly volume grows. **Key points**: * **Trade more, pay less**: For markets with tiered fees, your 30‑day trading volume (in the root asset, for example USD) is tracked across all markets included in the same group. As you move into higher tiers, your commission percentage decreases. * **Clear fee overview**: Open [Market info](../get-started/customizing-your-terminal#market-info-panel) and switch to the **Fees** tab to see your **Current volume** for the month, the configured **Min. fee**, and the full **Commission tiers** table with volume ranges and fee %. A check mark highlights the tier you are currently in. * **Grouped volume**: Your traded volume is aggregated across markets to which the dynamic commission is applied. * **No surprises**: Orders on markets without tiered fees continue to use the existing flat commission model. Tiered markets simply adjust your fee according to the tier that matches your current trading volume. #### New settings [#new-settings] The [Settings](../get-started/settings) menu has been enriched with the following configuration options: * **Widgets**: This updated section now provides access to multiple widgets’ display settings. Along with existing [Price chart](../widgets/price-chart), you can now configure: * One-click trading for [Open positions](../widgets/open-positions): When enabled, single and bulk position closing are executed immediately, without going through additional confirmation dialogs. * One-click trading for [Open orders](../widgets/open-orders): When enabled, single and bulk order cancellations are executed immediately, without going through additional confirmation dialogs. * **API token management**: This new section allows you to generate and manage tokens for accessing the [Trading API](https://api-docs.b2trader.b2broker.com/). Up to 10 tokens can be generated per account. The validity period for each token is one year. The tokens can be revoked or deleted anytime. *** ### Improvements [#improvements-4] #### Responsive widget layout [#responsive-widget-layout] Widget content now adapts dynamically to the available space, ensuring that key information such as primary values, titles, and critical actions remains visible even when widgets are resized or minimized. Layouts have been refined to avoid unnecessary empty areas while preventing clipping of important elements, delivering a more readable and informative experience across all widget sizes. #### Clearer margin level display [#clearer-margin-level-display] The [Margin](../widgets/margin) widget has been updated to provide a clearer signal. Now, whenever no margin is used (for example, when you have no open positions), the **used margin** value displays **–** instead of 0%. This aligns with common brokerage practices and helps you better understand the current risk state at a glance. #### Smarter default filters for Assets and Account margin [#smarter-default-filters-for-assets-and-account-margin] Certain default filters are now applied automatically when the Trading terminal is opened for the first time. In the [Assets](../widgets/assets) widget, **Hide zero balances** is enabled by default, so assets with zero balance are not shown. In the [Account margin](../get-started/settings#account-margin) settings, **Hide zero balances** and **Hide assets with zero margin ratio** are enabled by default, hiding assets that carry no margin or balance. If you change any of these filters, the platform remembers their states. #### Improved quick trade panels [#improved-quick-trade-panels] The **Market quick trade panel** has been moved not to cover the important controls of the [Price chart](../widgets/price-chart). Additionally, it now displays the **cross icon** to quickly close the panel if needed. *** ### Resolved issues [#resolved-issues-2] There have been no customer-facing issues reported in this release. ## November 7, 2025 [#november-7-2025] ### New features [#new-features-6] #### Tiered leverage system [#tiered-leverage-system] With this release, we're excited to introduce the **tiered leverage system** that provides more sophisticated leverage options based on your position sizes, offering better risk management. **Key points:** * **Dynamic leverage tiers**: Markets can now offer tiered leverage where your maximum available leverage decreases as your position size increases. This allows you to access higher leverage on smaller positions while maintaining appropriate risk controls on larger trades. * **Enhanced market information**: Markets with tiered leverage now display comprehensive leverage information in the **Market info** panel. A new **Leverage** tab shows all available tiers, including the notional value ranges and maximum leverage for each tier. * **Improved position tracking**: Your open positions now display both the leverage you selected when opening the position (**Requested leverage**) and the actual leverage being applied (**Leverage**). Detailed tooltips explain how these values are calculated, giving you better visibility into your margin usage. * **Smart leverage selection**: When placing orders on markets with tiered leverage, the system automatically calculates your margin requirements across all applicable tiers. You can see the exact margin required before placing your order. **How it works** For markets with dynamic leverage, your position is allocated across different tiers based on its notional value. Each tier has its own maximum leverage limit, typically starting with higher leverage for smaller positions and decreasing as position size grows. This allows you to maintain appropriate risk management. **Order placement** When trading on tiered markets, you can still select your preferred leverage (up to the maximum allowed for the first tier), and the system will automatically apply the appropriate leverage limits. The margin calculator shows you the exact requirements before you place your order. All existing positions continue to operate normally with no changes to your current trading experience. Markets without tiered leverage continue to work exactly as before. *** ### Improvements [#improvements-5] #### Improved documentation experience [#improved-documentation-experience] The documentation window is now fully resizable, allowing traders to adjust both vertical and horizontal dimensions independently. All screenshots can now be zoomed, making detailed interface elements clearly visible. #### Streamlined market selection [#streamlined-market-selection] The market selection control is now displayed as the **chevron icon** directly next to the market name in widgets. The magnifying glass icon has been removed. Both the market name and chevron are now clickable and open the market selector. #### Reorganized market information access [#reorganized-market-information-access] The market info popover has been relocated under the **info icon** in the widget header to maintain accessibility while keeping the market name area focused solely on selection functionality, creating a cleaner and more consistent user interface. #### Enhanced workspace tab design [#enhanced-workspace-tab-design] A clear distinction between active and inactive workspace tabs has been achieved due to intuitive styling. Workspace option buttons are now hidden by default to reduce visual clutter and only appear when tabs are active or being hovered over. This applies to both default and custom workspace tabs, creating a cleaner interface while maintaining full functionality when needed. *** ### Resolved issues [#resolved-issues-3] There have been no customer-facing issues reported in this release. ## October 9, 2025 [#october-9-2025] ### New features [#new-features-7] #### Placing orders from the Price chart [#placing-orders-from-the-price-chart] The [Price chart](../widgets/price-chart) widget now supports direct order placement with two new quick trading panels. The **Market quick trade panel** provides a persistent interface for instant buy/sell orders, while the **Limit quick trade panel** allows hover-based order placement at specific price levels. When enabled through **Price chart settings**, both panels offer configurable amount presets and leverage ratio selection for margin trading (when applicable), creating a seamless trading experience without leaving the chart view. #### Bulk order canceling [#bulk-order-canceling] The [Open orders](../widgets/open-orders) widget introduces a **Cancel all** button that closes all active orders simultaneously. This feature provides better risk management capabilities during volatile market conditions. #### In-platform documentation [#in-platform-documentation] User documentation is now integrated directly within the Trading terminal interface. This eliminates the need to switch between applications when accessing help materials or reference guides, keeping essential information readily available during trading sessions. #### New market subtype [#new-market-subtype] The new **Commodities** subtype has been added for CFD markets, enhancing the market categorization system. *** ### Improvements [#improvements-6] #### Enhanced position tracking [#enhanced-position-tracking] A new **Direction** column has been added to **Trades** info in the [Open positions](../widgets/open-positions) and [Closed positions](../widgets/closed-positions) widgets. It indicates whether a position size increased (In) or decreased (Out) as a result of each trade. This enhancement provides clearer visibility into position movement patterns. #### Cross rates calculation precision [#cross-rates-calculation-precision] Accuracy for cross-rate calculations has been improved by introducing a new cross-rate scale parameter. It has a default value of 8 and can be adjusted in configuration files. This addresses the previous limitation where cross rates were rounded to the root asset type scale (typically 2 decimal places), causing incorrect zero values in certain scenarios. The improvement ensures accurate cross-rate calculations across all currency and cryptocurrency pairs, regardless of their relative values. #### Redesigned Settings interface [#redesigned-settings-interface] The **Settings** menu has been restructured with a new tabbed popup interface. Related configuration options are now logically grouped, making settings easier to navigate and manage. #### Pre-filled Limit order price [#pre-filled-limit-order-price] Limit order placement now includes automatic price pre-population using the best bid or ask price from the order book. This static pre-fill reduces manual entry requirements and helps prevent pricing errors during order submission. #### Updated sorting of open positions [#updated-sorting-of-open-positions] [Open positions](../widgets/open-positions) are now sorted chronologically with the newest positions displayed at the top, improving visibility of recent trading activity. #### Improved messages [#improved-messages] User communications have been updated throughout the platform, including improved Introduction tour messaging for better onboarding and clearer system notifications. #### UI enhancements [#ui-enhancements] UI improvements for this release include: * **Support for dynamic resizing of the trading interface layout**: The trading interface now features a responsive layout system that dynamically adjusts to browser window resizing. Widgets automatically scale and reposition to maintain optimal viewing regardless of screen size changes. * **Loader**: [Order history](../widgets/order-history) and [Closed positions](../widgets/closed-positions) widgets now display loading indicators when fetching additional data. * **Improved PnL representation**: When displayed on charts, the PnL values are now accompanied by "+" or "–" signs for immediate profit/loss recognition. * **Improved scrollbars**: Scrollbar positioning has been refined to prevent overlay of table content, ensuring all data remains visible and accessible. *** ### Resolved issues [#resolved-issues-4] There have been no customer-facing issues reported in this release. ## July 2, 2025 [#july-2-2025] ### New features [#new-features-8] #### Trading reports [#trading-reports] We've implemented a new feature enabling you to generate trading reports for a specific period of time and download them as zipped CSV files to your computer. The report includes a detailed information on: * **Trade history** * Closed positions * Executed orders * Trades * **Transfers history** * **Account statistics** * Total balance * Realized PnL * Swaps * Funding * Commissions The data is available for any period within the last **92 days** (UTC time). The following timeframe presets have been implemented for your convenience: * Today * Current: week, month, quarter * Previous: week, month, quarter Access the new **Trading report** menu under the **Settings** icon on the topbar of the Trading terminal. *** ### Improvements [#improvements-7] #### Admin-managed orders and positions [#admin-managed-orders-and-positions] In the [Open positions](../widgets/open-positions), [Closed positions](../widgets/closed-positions), and [Order history](../widgets/order-history) widgets, if BP Admins have managed positions or orders, this is now indicated in the Reason field within the position or order details. Admins may manage these to assist traders upon request, address suspicious activity, and mitigate risks. *** ### Resolved issues [#resolved-issues-5] There have been no customer-facing issues reported in this release. ## May 30, 2025 [#may-30-2025] ### New features [#new-features-9] #### PF trading [#pf-trading] We are excited to introduce **Perpetual Futures (PF) trading** on our platform. These contracts feature a funding fee mechanism based on the Mark price and Funding rate. A positive rate means Long positions pay Shorts, and a negative rate means the reverse. You can see the countdown to the next funding fee settlement in the [Market summary](../widgets/market-summary) widget. This update also includes a new market type — Perpetual — enhancing your trading opportunities. *** ### Improvements [#improvements-8] #### Price chart setting [#price-chart-setting] The [Price chart](../widgets/price-chart) widget now supports displaying of open positions, as well as open and executed orders. Click the **gear icon** in the topbar to access Price chart settings and enable desired options. #### Close all positions [#close-all-positions] The [Open positions](../widgets/open-positions) widget now features a new **Close all** option, offering enhanced management capabilities. This update provides a more efficient way to handle multiple positions by allowing you to simultaneously close: * All open positions * All open positions with positive PnL * All open positions with negative PnL #### Enhanced price control [#enhanced-price-control] The following enhancements have been implemented for the [Price control](../widgets/price-control) widget: * **Editable price alerts**: You can now adjust existing price alerts by clicking a price. * **Enhanced market additions**: Price and percentage fields now automatically open for editing when a new market is added to the widget. * **Visual indicators**: Arrows near price triggers aren’t shown if the price feed is unavailable, reducing clutter and potential confusion. #### Historical data limits [#historical-data-limits] The [Order history](../widgets/order-history) and [Closed positions](../widgets/closed-positions) widgets now provide historical data with a limit of **92 days**. *** ### Resolved issues [#resolved-issues-6] There have been no customer-facing issues reported in this release. ## April 17, 2025 [#april-17-2025] ### New features [#new-features-10] #### Netting account type [#netting-account-type] With this release, a new **Netting** account type has been enabled. It intelligently consolidates all orders placed on the same market into a single position. Previously, the system supported only Hedging, where each order opens a separate position. **Key points of netting** * **Reduced margin requirements**: Instead of calculating margin requirements separately for each position, netting combines them, lowering overall capital needs. * **Lower trading costs**: By holding opposing positions, traders often incur double position swaps. Netting treats these positions as one, reducing unnecessary costs. * **Streamlined position management**: Managing multiple positions manually can become complicated, especially when balancing between different trade sizes, directions, leverages and margin requirements. Netting helps with it by combining positions into a single one. **Netting VS Hedging** Netting may sometimes lack the flexibility required for complex hedging strategies. In contrast, hedging excels by allowing traders to hold both long and short positions simultaneously without offsetting them. This enhances the ability to track and adjust individual trades easily while permitting precise margin management for separate positions. The Hedging type is perfectly suited for traders seeking detailed control over their positions. On the other hand, the Netting type ensures simplicity and reduced margin requirements, making it the perfect choice for straightforward trading strategies. **Workflow changes** When opening a new trading account, you must now choose its type: either Hedging or Netting. This choice is permanent and influences all future trades in the account. In the account selection interface, each account displays its type: `H` for Hedging or `N` for Netting. All existing accounts are automatically assigned to the Hedging type. *** ### Improvements [#improvements-9] #### Improved widget control [#improved-widget-control] With this release, you now have enhanced control over the viewing experience: * **Configuring widget columns**: Certain widgets allow you to configure widget columns in a way that best suits your needs, offering you the flexibility to select which columns you wish to display or hide. Additionally, you can arrange the order of these columns for your convenience, ensuring that the information you prioritize is always at your fingertips. * **Rearranging widget tabs**: All widgets now feature drag-and-drop functionality for rearranging tabs effortlessly. This user-friendly feature offers a more customized and organized interface, making it easier than ever to personalize your widget experience. #### Enhanced Order book [#enhanced-order-book] The Order book widget has been upgraded with new customizable settings. This update introduces intuitive controls, empowering you to adjust the widget view according to your preference: * **Full view**: Shows both buy and sell orders along with the market spread. * **Buy only view**: Displays only buy orders and the market spread. * **Sell only view**: Displays only sell orders and the market spread. *** ### Resolved issues [#resolved-issues-7] There have been no customer-facing issues reported in this release. ## January 15, 2025 [#january-15-2025] ### New features [#new-features-11] #### Take profit, Stop loss, Trailing stop [#take-profit-stop-loss-trailing-stop] With this release, the following new triggers for open positions have been implemented on the platform: * **Take profit**: A take-profit trigger is used to close a position automatically once the market hits a predefined price, ensuring the trader locks in profits. * **Stop loss**: A stop-loss order is a trigger to limit potential losses. It automatically closes a position when its price changes to a predetermined level. * **Trailing stop**: A trailing-stop order allows a trader to set a Stop price that dynamically adjusts as the market price moves. It's different from a regular stop-loss order because the Stop price isn't stationary but follows the market price by a specified value. When the asset price moves favorably, the Stop price updates, securing potential gains. However, if the price falls, the Stop price stays fixed to protect profits or limit losses. These settings can be used when trading on CFD markets and can be applied to Market, Limit, and Stop orders, as well as for currently open positions. The new settings can be enabled when placing an order via the [Place order](../widgets/place-order) widget (Advanced mode). Until a position is fully closed, they can also be adjusted or canceled via the [Open positions](../widgets/open-positions) widget. The information about applied settings is also available in the corresponding widgets: [Closed positions](../widgets/closed-positions), [Open orders](../widgets/open-orders), and [Order history](../widgets/order-history). *** ### Resolved issues [#resolved-issues-8] There have been no customer-facing issues reported in this release. *** ## Past releases [#past-releases] ### December, 2024 [#december-2024] #### New features [#new-features-12] ##### CFD trading [#cfd-trading] With this release, we're excited to announce the support for CFD (Contract for Difference) trading on our brokerage platform. This empowers you to trade with dynamic leverage, using your funds as collateral to secure positions confidently. Enjoy the flexibility to go both long and short, capitalizing on both bullish and bearish markets. Our CFD trading support boasts an intuitive interface, robust risk management tools, and real-time data. ##### Innovative market approach and instrument picker [#innovative-market-approach-and-instrument-picker] * **Market type**: Markets are now classified into Spot and CFD, reflecting their differing parameters. A panel indicating CFD or Spot is now included in all widgets. * **Market parameters and trading schedule**: Click a market name to access its key parameters and scheduled trading sessions. * **Market categories**: Now accessible via the top bar, offering a hierarchical view for easier selection and switching between markets. ##### Account margin settings [#account-margin-settings] Access the new [Account margin settings](../get-started/settings) to monitor your balances and configure assets to be used as collateral for CFD trading. ##### Reworked Place order widget [#reworked-place-order-widget] Place any order with a [single widget](../widgets/place-order) now. Choose Quick IOC Market or Stop with adjusted leverage — all conveniently in one place, along with an order summary. ##### Positions [#positions] Discover two new widgets for position monitoring: * [Open positions](../widgets/open-positions): Offers real-time monitoring of currently open positions with price changes, PnL, used margin, and other parameters. * [Closed positions](../widgets/closed-positions): Provides historical data on position details, prices, and realized PnL. ##### Risk management [#risk-management] You now have three essential widgets to maintain control: * [Margin](../widgets/margin): Monitor your margin account parameters in real time and respond swiftly to changes. * [Price control](../widgets/price-control): Set price alerts tailored to your specific needs and parameters. * [Messages](../widgets/messages): Receive system notifications and price alerts directly. ##### Market data [#market-data] Two new widgets have been introduced to enhance market monitoring: * [Market summary](../widgets/market-summary): Provides detailed information and updates on price changes for a specific market. * [All markets](../widgets/all-markets): Displays price change statistics across all markets simultaneously. #### Improvements [#improvements-10] * Performance has increased significantly, allowing each trader to hold up to 1,000 CFD positions open. * Limits have been increased to 3,000 requests per second. #### Resolved issues [#resolved-issues-9] There have been no customer-facing issues reported in this release. *** ### June 20, 2024 [#june-20-2024] #### Improvements [#improvements-11] * Account selection is now available from the topbar of the Trading terminal. Once you change your account, all the widgets will automatically adjust to show relevant information for the selected account. * Tabs are now available in the Trading terminal. You can place up to 10 tabs to open multiple workspaces simultaneously for better information organization. You can utilize pre-configured layouts for your workspaces or create custom ones. *** ### June 13, 2024 [#june-13-2024] #### New features [#new-features-13] ##### iOS mobile application [#ios-mobile-application] With this release, our team is thrilled to announce the launch of the brand-new iOS mobile app. The mobile app is closely integrated with B2CORE mobile. Along with single sign-on implemented, it allows you to seamlessly navigate between the apps, without re-entering credentials. In the mobile app, just like in the web version of the Trading terminal, you can access all of your BP accounts, place orders, monitor market data, and so on. For your convenience, it all can be done in a very similar way as in the web version. A consistent and user-friendly interface makes using the app easy and intuitive. Among the key features and services that the new BP mobile offers: * The account list with detailed balances, to always keep your funds under control. Creation and renaming of accounts, to keep your funds well organized. * Asset balances screen, with the amounts of free and frozen funds specified and with the possibility to hide assets with zero balances. * The Order book and price chart, to monitor and analyze trading data and make buy or sell decisions, with a quick and easy jump to the order placing screen. * Candles and line charts, with easy switching and the possibility to scroll the data for historical values. * Limit & Market order placing, with all time in force options supported in the Web version (Market: IOC, FOK; Limit: IOC, FOK, GTC, GTD, Day). * Open and history orders lists, with easy access to order parameters and details, quick canceling or repeating an order. * Light and dark themes and many more. ### October 18, 2023 [#october-18-2023] #### New features [#new-features-14] With this initial release, our team is happy to announce the launch of our new Trading terminal. ##### Placing orders [#placing-orders] The platform currently supports placing Market, Limit, Stop Market, and Stop Limit orders (refer to [Order types](../knowledge-base/order-types)). You can also choose from various [Time in force](../knowledge-base/time-in-force) options such as FOK, IOC, GTC, GTD, and DAY. ##### Widgets [#widgets] The platform provides you with enhanced widgets that are specifically designed for convenient trading. These widgets allow you to easily place orders, access the Order book, monitor open orders and order history, and much more. Refer to [Place order](../widgets/place-order) and the other pages of the Widgets section for more information. ##### Dashboard [#dashboard] The customizable dashboard allows you to personalize the layout to suit your needs and keep you focused on what's important. Refer to [Interface overview](../get-started/customizing-your-terminal) to learn more about workspace customization. ## Summary [#summary] This widget provides AI-powered market analysis and trading recommendations for the selected market. AI Assistant The widget is organized into the following sections: * [AI Recommendation](#ai-recommendation): Overall recommendation score. * [Forecast](#forecast): Price target and market sentiment. * [Signal Drivers](#signal-drivers): Technical, on-chain, and sentiment signals. * [Suggested Actions](#suggested-actions): AI-generated trading suggestions. * [Key Metrics](#key-metrics): Market data overview. ## AI Recommendation [#ai-recommendation] Displays a numeric score from 0 to 100 representing the overall AI assessment of the market, along with a label such as **Strong Buy**, **Buy**, **Neutral**, **Sell**, or **Strong Sell**. A higher score indicates a more favorable outlook. ## Forecast [#forecast] **1Y Price Target** The forecasted price in one year and the expected percentage change from the current price. *** **Market Sentiment** A visual bar showing the ratio between bullish and bearish sentiment among market participants. ## Signal Drivers [#signal-drivers] Signals that influence the AI recommendation, categorized into three types: * **Technical**: Signals based on technical analysis indicators such as RSI and Moving Averages. * **On-Chain**: Signals based on blockchain data such as ETF inflows, active addresses, and total value locked (TVL). * **Sentiment**: Signals based on community and analyst opinions. Each signal includes a description and an impact assessment: **Bullish**, **Bearish**, or **Neutral**. ## Suggested Actions [#suggested-actions] A list of AI-generated trading suggestions based on the current market conditions. These are informational recommendations, not automated trading signals. ## Key Metrics [#key-metrics] The following market data is displayed: **All-Time High** The highest price ever recorded for the asset (in USD) and the percentage difference from the current price. *** **All-Time Low** The lowest price ever recorded for the asset (in USD) and the percentage difference from the current price. *** **24h Volume** The total trading volume over the last 24 hours in USD. *** **Market Cap** The total market capitalization of the asset in USD. ## In Guest mode [#in-guest-mode] The widget works in Guest mode too, with the same sections, so you can read the analysis for any instrument your broker offers before you have an account. AI-generated insights are for informational purposes only. The AI Assistant widget can be enabled or disabled by the platform administrator. If the widget isn't available in the **Add Widget** menu, contact your broker. ## Summary [#summary] Use this widget to monitor price data on all markets available on the platform. The widget is dynamic and is continuously updated in real time. All markets ## Fields [#fields] The following information is provided about each market: **Market** The market type (Spot, CFD, or Perpetual), market ticker and full name of the market. *** **Current price** The current market price, in the quote asset and in the platform root asset. This value is green if the price is rising and red if it's falling. *** **24h change** The price change over the last 24 hours, in absolute and percentage values. This value is calculated as *Current price* – *Price 24h ago*. This value is green if the price is rising and red if it's falling. A dash in this field means that there is no *Price 24h ago* data available. ## Summary [#summary] This widget displays the list of all asset balances on your account. Assets ## Settings [#settings] ### Hide zero balances [#hide-zero-balances] Use this option to hide all assets with zero balances from the list. It's enabled by default. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ## Fields [#fields] The following information is provided about each asset: **Asset** The alphabetical code of the asset. The first asset in the list is the **root asset** of the platform. *** **Caption** The asset name. *** **Available** The balance at your disposal, meaning the difference between your total assets and a sum of all limit orders placed by this time. This value is calculated as *Total – Halted*, where *Halted* is the asset amount frozen on the account for execution of placed Limit orders. *** **Available, \{RAT}** The available balance, in conversion to the platform root asset. *** **Total** The overall amount of the asset available in your wallet, including locked funds. *** **Total, \{RAT}** The total balance, in conversion to the platform root asset. ## Summary [#summary] This widget displays a list of your closed positions on the selected account. The entire history of your closed positions is available. Closed positions The widget lists only closed positions. For a list of currently open positions, use the [Open positions](open-positions) widget. ## Settings [#settings] ### Adjust the time period [#adjust-the-time-period] By default, the widget lists closed positions for the last three months. To display positions closed during a specific time period, use the **Select date range** field. The most recently closed positions appears at the top of the list. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ### View related orders [#view-related-orders] Click the **chevron icon** in a position row to expand a list of position-closing orders. As positions can be partially closed, there may be more than one line. For each executed position-closing order, a separate line is added. ## Fields [#fields] The following information is provided about each position: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Position ID** The position identifier. *** **Side** The position side: Buy or Sell. *** **Order type** The [order type](../knowledge-base/order-types). *** **Time in force** The [Time in force](../knowledge-base/time-in-force). *** **Pos. closed size** The closed volume, in lots, which is equivalent to the corresponding filled order volume. *** **Open price** The volume-weighted average price (VWAP) at which the position was opened. *** **Close price** The volume-weighted average price (VWAP) of trades related to a position-closing order. *** **Close order ID** The identifier of an order closing the position. *** **Realized PnL, \{RAT}** The actual profit or loss earned, in conversion to the platform root asset. For **Long** positions, this value is calculated as *Position size* × (*Close price* – *Open price*). For **Short** positions, this value is calculated as *Position size* × (*Open price* – *Close price*). *** **\{RAT} notional** The equivalent of the closed volume in the platform root asset. *** **History rate to \{RAT}** The rate to the platform root asset at the moment of position closing. *** **Reason** The reason for closing a position. Possible values: * **Trader**: The position was closed by you. * **Admin**: The position was closed by an Admin. * **Stop-out**: The position was automatically closed by the system, as a result of Stop out. * **Stop loss**: The position was closed by the [Stop loss](../knowledge-base/price-triggers) trigger. * **Take profit**: The position was closed by the [Take profit](../knowledge-base/price-triggers) trigger. * **Webhook alert**: The position was closed via a [TradingView webhook](../get-started/settings#tradingview-webhooks). *** **Comment** The text note inherited from the opening order. Up to 100 characters. The comment can't be edited after the order is placed. *** **Open date, time** The date and time when a position was opened. *** **Closed date, time** The date and time when a position-closing order was last updated (fully executed). ## Summary [#summary] This widget helps you monitor margin parameters and statistics. Margin ## Fields [#fields] All values are in displayed in conversion to the platform root asset: **Your margin level** The ratio of your funds to a used collateral, in percents. This value is calculated as *Equity* / *Used margin* × 100%. Possible values: * **Empty**: No open positions. * **Low risk**: Everything is ok. * **Margin call**: Your margin level fell below the set Margin call value. You received a notification urging you to increase the margin level to avoid a Stop out. Remember that if you ignore this warning, the margin level may continue to decrease. During the Margin call, you can only close existing positions; opening new positions isn’t possible. * **Stop out level**: Your margin level fell below the set Stop out value; the platform started a process of liquidating your positions. This process continues until the margin level exceeds this required value. **ANY** currently open position can be closed regardless of its side and volume. *** **Margin balance** The total amount of your funds that can be used as a collateral for CFD trading. It’s calculated as Σ(*TotalAmountX* × *MarginRatioX* × *Rate X/RAT*), where: * *TotalAmountX* is the the total amount of the asset X, including both available and locked funds. * *MarginRatioX* is the Margin ratio set for the asset X. * *Rate X/RAT* is the constantly updated rate of the asset X to the platform root asset. The Margin balance is continually recalculated based on price fluctuations. An increase in the prices of assets boosts available Balance & Free margin. Conversely, a decrease in asset prices may reduce the available Balance and Free margin. Additionally, a decline in the prices of assets with open positions may trigger Margin calls and Stop outs. *** **Credit** A promotional bonus granted by your broker for margin (CFD and Perpetual) trading, shown in the platform root asset (RAT). When you have no credit, this row shows 0. Credit increases your Equity and Free margin and can be used as collateral to open positions. It becomes available immediately when granted and never expires. However, credit cannot be withdrawn as cash, so it is excluded from your withdrawable balance. Your broker can revoke credit at any time, and the row updates in real time when this happens. The row includes an info tooltip that reads: *Promotional credit for margin trading only. Cannot be withdrawn.* *** **Equity** The potential balance of your account if all your positions were closed right now. This value is calculated as *Margin balance* + *Credit* + *Unrealized PnL*. *** **Used margin** The amount of funds that is used for maintaining all your open positions. Is opposed to the *Free margin*. The Used margin for positions on a specific market is calculated using the maximum value between the total margin of long positions and the total margin of short positions: MAX(*MarketPositionLong*, *MarketPositionShort*). **Example** **Step 1: Initial balance** * Margin balance: $10,000 * Opened positions: 0 * Free margin: $10,000 * Used margin: $0 **Step 2: Open a long position (Leverage 1:100)** * Market: CFD EUR/USD * Position size: 1 lot (100,000 units) * Current price: $1.001 * Required margin: $(100,000 × 1.001) / 100 = $1,001 * After opening: * Free margin: $8,999 * Used margin: $1,001 **Step 3: Open a long position (Leverage 1:20)** * Market: CFD EUR/USD * Position size: 1 lot (100,000 units) * Current price: $1.001 * Required margin: $(100,000 × 1.001) / 20 = $5,005 * After opening: * Free margin: $3,994 * Used margin: $6,006 **Step 4: Open a short position (Leverage 1:100)** * Market: CFD EUR/USD * Position size: 9 lots (900,000 units) * Current price: $1 * Required margin: $(900,000 × 1.001) / 100 = $9,009. The system verifies that upon opening this position, the MarketUsedMargin remains valid by satisfying the condition: **MarketUsedMargin** = MAX(*MarketPositionLong*, *MarketPositionShort*) = MAX(6,006, 9,009) = 9,009. Since the condition is met, the position opens. * After opening: * Free margin: $991 * Used margin: $9,009 As a result, you can open multiple opposite positions without significantly increasing the Used margin. Furthermore, closing positions never increases the Used margin. *** **Free margin** The amount of funds that can be used for opening new positions. *** **Unrealized PnL** The total potential profit or loss earned from all open positions. This value is calculated as *Σ(Unrealized PnL for Long positions + Unrealized PnL for Short positions)*, where: * *Unrealized PnL for Long positions* = *Position size* × (*Current price* – *Open price*) * *Unrealized PnL for Short positions* = *Position size* × (*Open price* – *Current price*) ## Summary [#summary] Use this widget to assess the current market depth indicating the actual liquidity of an asset, which is evaluated based on the number of currently open orders to buy and sell it as well asset prices and volumes at various price levels. Market depth The widget is dynamic and is continuously updated in real time. The widget displays a chart indicating the overall volume of buy (green) and sell (red) orders at various price levels awaiting execution at the moment. You can hover the mouse pointer over the chart to learn the exact price and volume of an asset traded at a specific price level. ## Settings [#settings] ### Select a market [#select-a-market] The current market is displayed in the widget header. To change the market, click the market symbol and select a different one from the list. ## Summary [#summary] Use this widget to monitor statistics on a specific instrument. The widget is dynamic and is continuously updated in real time. Market summary To monitor multiple instruments at a time, use the [Watch list](watch-list) widget. ## Settings [#settings] ### Select a market [#select-a-market] The current market is displayed in the first column. To change the market, click the market symbol and select a different one from the list. ## Fields [#fields] The following information is provided about each instrument: **Market** The market type (Spot, CFD, or Perpetual), market ticker and full name of the market. *** **Current price** The current top-of-the-book price, in the quote asset. *** **Current price, \{RAT}** The current top-of-the-book price, in conversion to the platform root asset. *** **24h change** The price change over the last 24 hours. This value is calculated as *Current price* – *Price 24h ago*. This value is green if the price is rising and red if it's falling. A dash in this field means that there is no *Price 24h ago* data available. *** **24h change, %** The price change over the last 24 hours, in percents. This value is calculated as ((*Current price* – *Price 24h ago*) / *Current price*) × 100. This value is green if the price is rising and red if it's falling. A dash in this field means that there is no *Price 24h ago* data available. *** **24h high** The highest trade price over the last 24 hours. This value is always green. *** **24h low** The lowest trade price over the last 24 hours. This value is always red. *** **Info icon** Click this icon to view market details and trading sessions schedule. ## Summary [#summary] This widget displays a list of received notifications, both system and configured via the [Price control](price-control) widget. Messages ## Settings [#settings] ### Mark as read [#mark-as-read] Unread alerts are marked with a red dot in the list: * Click the dot to mark the notification as read. * Click **Mark all as read** to mark all new notifications as read at once. * Click the **three dots** icon in the upper right corner of the widget to access the **Hide read notifications option**. The counter of unread alerts is also displayed on the **bell icon** in the topbar. ## Summary [#summary] This widget displays a list of Limit orders that have been placed from this specific account and are currently open and assigned one of the following [statuses](../knowledge-base/order-statuses): *Started*, *Pending*, or *Working*. Open orders The widget lists only open orders, that are currently not filled or partially filled. For a list of orders in the final statuses, use the [Order history](order-history) widget. ## Settings [#settings] ### Adjust the time period [#adjust-the-time-period] By default, the widget lists the orders for all the time. To display orders for a specific time period, use the **Select date range** field. The most recent order appears at the top of the list. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ## Fields [#fields] The following information is provided about each order: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Side** The order side: Buy or Sell. *** **Order type** The [order type](../knowledge-base/order-types). *** **Time in force** The [Time in force](../knowledge-base/time-in-force). *** **Amount** The order amount, in the base currency. *** **Filled** The order amount that has been filled so far. *** **Fee** The total commission paid for executing an order and the currency in which the commission was paid. *** **Remaining** The order amount that hasn’t yet been filled. *** **Limit price** For Limit orders, the Limit price set when placing the order. *** **Avg execution price** The order execution price, as an average price of all trades executed while filling the order. *** **Take profit** The [Take profit](../knowledge-base/price-triggers) value, if set. *** **Stop loss** The [Stop loss](../knowledge-base/price-triggers) value, if set. *** **Used leverage** For margin trading, the leverage ratio used when placing an order. *** **Status** The current order [status](../knowledge-base/order-statuses): *Started*, *Pending*, or *Working*. *** **Created at** The date and time when an order was placed. *** **Updated at** The date and time of the latest update to the order. *** **Valid until** The date and time when an order expires. *** **Order ID** The system identifier of an order. *** **Comment** The text note attached to the order when it was placed. Up to 100 characters. The comment can't be edited after the order is placed. *** **Reason** The reason for placing the order: * **Trader**: The order was placed by you. * **Admin**: The order was placed by an Admin. * **Stop-out**: The order was placed by the system, to close positions as a result of Stop out. * **Webhook alert**: The order was placed via a [TradingView webhook](../get-started/settings#tradingview-webhooks). ## Cancel orders [#cancel-orders] To cancel an order, click the **×** in the corresponding row. To cancel all active orders at once, click the **Cancel all** button in the widget header. ## Summary [#summary] This widget displays a list of your positions currently open on the selected account. Open positions The widget lists only open positions. For a list of closed positions, use the [Closed positions](closed-positions) widget. ## Settings [#settings] ### Adjust the time period [#adjust-the-time-period] By default, the widget lists open positions for all the time. To display positions opened during a specific time period, use the **Select date range** field. The most recent position appears at the top of the list. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ### View related trades [#view-related-trades] Click the **chevron icon** in a position row to expand a list of related trades. ### Close positions [#close-positions] To close a position, hover over it and click the **CLOSE** button that appears. To close all/multiple positions at once, click **Close all** and select the desired option: close all positions or close positions with positive/negative PnL. ## Fields [#fields] The following information is provided about each position: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Position ID** The position identifier. *** **Side** The position side: Buy or Sell. *** **Position size** The current position volume, in lots. *** **Open price** The volume-weighted average price (VWAP) at which the position was opened. *** **Current price** The current market price of the base asset: bid for Long positions and ask for Short positions. *** **Stop loss** The [Stop loss](../knowledge-base/price-triggers) value, if set when placing the order. If the value wasn't set, you can use the **Add** button to configure it. *** **Take profit** The [Take profit](../knowledge-base/price-triggers) value, if set when placing the order. If the value wasn't set, you can use the **Add** button to configure it. *** **Unrealized PnL, DAY, \{RAT}** The potential profit or loss earned for a current day, in conversion to the platform root asset. For **Long** positions, this value is calculated as *Position size* × (*Current bid price* – *First bid price for today*). For **Short** positions, this value is calculated as *Position size* × (*First ask price for today* – *Current ask price*). If a position was opened today, then the *Open VWAP* is used instead of the *First price for today*. *** **Unrealized PnL, DAY, %** The potential profit or loss earned for a current day, in percents. *** **Unrealized PnL, Total, \{RAT}** The potential profit or loss earned for the entire period from the moment the position was opened, in conversion to the platform root asset. For **Long** positions, this value is calculated as *Position size* × (*Current bid price* – *Open VWAP*). For **Short** positions, this value is calculated as *Position size* × (*Open VWAP* – *Current ask price*). *** **Unrealized PnL, Total, %** The potential profit or loss earned for the entire period from the moment the position was opened, in conversion to the platform root asset, in percents. *** **Used margin, \{RAT}** The amount of your funds used for maintaining a position, in conversion to the platform root asset. *** **Leverage** The actual leverage ratio used for opening a position. *** **Req. leverage** The leverage ratio you requested when opening a position. *** **\{RAT} notional** The current position size equivalent in the platform root asset. *** **Rate to \{RAT}** The current exchange rate of a quote asset to the platform root asset. *** **Open date, time** The date and time when a position was opened. *** **Updated date, time** The date and time of the latest position-related trade. *** **Reason** The reason for opening a position: * **Trader**: The position was opened by you. * **Admin**: The position was opened by an Admin. * **Webhook alert**: The position was opened via a [TradingView webhook](../get-started/settings#tradingview-webhooks). *** **Comment** The text note inherited from the opening order. Up to 100 characters. The comment can't be edited after the order is placed. ## Summary [#summary] This widget displays a list of currently open buy and sell limit orders for a selected asset along with the current bid-ask spread. Order book The widget is dynamic and is continuously updated in real time. It provides three different sections displaying the following information: * Open sell orders are highlighted in red and listed in the top section. The best ask, which is the sell order with the lowest price, is displayed at the bottom of this list. * Open buy orders are highlighted in green and listed in the bottom section. The best bid, which is the buy order with the highest price, is displayed at the top of this list. * The middle section displays the current bid-ask spread indicating the gap between the best ask and bid prices declared for an asset. ## Settings [#settings] ### Select a market [#select-a-market] The current market is displayed in the widget header. To change the market, click the market symbol and select a different one from the list. ### Display only asks/bids [#display-only-asksbids] In the upper part of the widget, you can choose how to display the Order book: * Full view. * Buy orders only + spread. * Sell orders only + spread. ## Fields [#fields] Each row of the Order book provides the following information about a selected market: **Price, \{QUOTE}** The price, in the quote asset. *** **Amount, \{BASE}** The total amount of the base asset available at a corresponding price level. *** **Total** The total amount, in the quote asset, required to fully execute the orders at a corresponding price level. In addition, you can use the [Market depth](market-depth) widget to evaluate the liquidity of a specific asset based on the overall volume of orders traded at various price levels. For Spot markets, hover over Order book rows to view additional information and buy or sell assets in click: **Average price** The average price, in the quote asset. *** **Total volume** The total amount of the base asset available at a corresponding price level. *** **Grand total** The total amount, in the quote asset, required to fully execute the orders at a corresponding price level. *** **Buy** / **Sell** Click the button to instantly place a Market order to buy or sell the asset at the selected price level. ## Summary [#summary] This widget provides up-to-date information about the orders executed on a selected market partially or in full, as well as the orders that were canceled, rejected, and expired. The entire order history of your account is available. Order history The widget lists only the orders to which final statuses are assigned. For a list of orders that are still being executed, use the [Open orders](open-orders) widget. ## Settings [#settings] ### Adjust the time period [#adjust-the-time-period] By default, the widget lists the orders with the *Completed* status for the last three months. To display orders for a specific time period, use the **Select date range** field. To display orders with specific statuses, select one or more from the dropdown above the list. The most recent order appears at the top of the list. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ## Fields [#fields] The following information is provided about each order: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Side** The order side: Buy or Sell. *** **Order type** The [order type](../knowledge-base/order-types). *** **Time in force** The [Time in force](../knowledge-base/time-in-force). *** **Amount** The order amount, in the base currency. *** **Filled** The order amount that has been filled. *** **Fee** The total commissions paid for executing an order and the currency in which the commission was paid. *** **Remaining** The order amount that wasn't filled. *** **Avg execution price** The order execution price, as an average price of all trades executed while filling the order. *** **Used leverage** For CFD trading, the leverage ratio used when placing an order. *** **Status** The current order [status](../knowledge-base/order-statuses): *Completed*, *Cancelled*, *Rejected*, or *Expired*. *** **Created at** The date and time when an order was placed. *** **Updated at** The date and time of the latest update to the order. *** **Order ID** The system identifier of an order. *** **Comment** The text note attached to the order when it was placed. Up to 100 characters. The comment can't be edited after the order is placed. *** **Reason** The reason for placing the order: * **Trader**: The order was placed by you. * **Stop-out**: The order was placed by the system, to close positions as a result of Stop out. * **Stop loss**: The order was placed by the [Stop loss](../knowledge-base/price-triggers) trigger. * **Take profit**: The order was placed by the [Take profit](../knowledge-base/price-triggers) trigger. * **Webhook alert**: The order was placed via a [TradingView webhook](../get-started/settings#tradingview-webhooks). ## Summary [#summary] Use this widget to place new orders. Place order The widget has two states: ### The PRO toggle is disabled [#the-pro-toggle-is-disabled] In this state, you can quickly place **IOC Market** and **GTC Limit** orders by selecting the order side (Buy/Sell) and type (Market/Limit), and specifying the order size (in lots) and price (for Limit orders). You can also place orders on CFD markets with the maximum leverage automatically applied. ### The PRO toggle is enabled [#the-pro-toggle-is-enabled] In this state, you get access to more precise order settings, such as: * **Stop orders** * **Time in force** * **Leverage** * **Take profit, Stop loss, Trailing stop** * **Comment** * **Complete order information** The **Comment** field allows you to attach a text note to the order (up to 100 characters). The comment is inherited by the resulting position and can't be edited after the order is placed. ## Settings [#settings] ### Select a market [#select-a-market] The market on which the order will be placed is displayed in the widget header. To change the market, click the market symbol and select a different one from the list. ### Place an order [#place-an-order] To place an order, fill in the parameters, review order details and preliminary calculated values, and then confirm the order by clicking the **Place** button. For a Limit order whose price crosses the current top-of-book — Buy at or above the best ask, or Sell at or below the best bid — the platform shows a confirmation dialog before submission. The dialog shows the entered price and the current best bid/ask, and lets you confirm or cancel the order. This warning is enabled by default; you can disable it from the dialog (**Do not show this warning again**) or from the **Limit order cross-TOB warning** toggle in [Settings](../get-started/settings#action-confirmation). ### Set price triggers [#set-price-triggers] If using **Take profit, Stop loss, Trailing stop**, set the prices in consideration of the current highest market bid/ask or a specified Limit price: These values can be adjusted any time until the position is fully closed via the [Open positions](open-positions) widget. During non-trading hours, according to the trading calendar schedule, you can place only Stop Market and Stop Limit orders. The **Place** button stays enabled when the order type is Stop and is disabled for Market and Limit. A Stop order placed outside trading hours is accepted immediately and starts watching for its stop price when the market reopens. For details, see [Stop orders](stop-orders). The order controls are disabled when the selected account is Halted or Frozen. For more information, see [Account status](../get-started/customizing-your-terminal#account-status). You will not be able to place an order if the execution of the order causes your margin level to fall below the *Margin call* level. The same conditions apply to withdrawal operations. ## Summary [#summary] This widget displays a price chart showing fluctuation of prices for a selected market over a certain time period. Price chart The horizontal axis (X-axis) represents the time scale, and the vertical axis (Y-axis) indicates the price level. ## Settings [#settings] ### Select a market [#select-a-market] The current market is displayed in the widget header. To change the market, click the market symbol and select a different one from the list. ### Customization [#customization] Multiple customization options are provided, allowing you to configure the chart according to your preferences. You can switch between bar, candle, Heikin Ashi, line, area and baseline views, as well as specify the time period for which data should be displayed. The chart supports numerous financial indicators, such as moving averages and regressions, and can feature a variety of custom shapes, including arrows and lines, pitchforks, and various ranges, allowing you to perform an in-depth market analysis. ### Display options [#display-options] The widget supports displaying of open positions, price triggers, open and executed orders. Click the **gear icon** in the topbar and access [Price chart settings](../get-started/settings#price-chart) to enable desired options. ## Placing orders [#placing-orders] ### Enable placing orders [#enable-placing-orders] To enable placing orders directly from the Price chart, you need to activate the corresponding settings: 1. Click the **gear icon** in the topbar and access [Price chart settings](../get-started/settings#price-chart). 2. Activate the **Market quick trade panel** or **Limit quick trade panel** toggle, or both. 3. If needed, adjust the amount presets. These amounts will be available for quick selection when placing an order. ### Market quick trade panel [#market-quick-trade-panel] If the corresponding setting is activated, the draggable **Market quick trade panel** is constantly displayed on the Price chart. ### Limit quick trade panel [#limit-quick-trade-panel] If the corresponding setting is activated, the **+** will appear when hovering over price levels on the chart. Clicking it will open the **Limit quick trade panel**: * in the upper half of the chart — to sell; * in the lower half of the chart — to buy. ### Place a new order [#place-a-new-order] To place a new Market or Limit order from the Price chart, when a corresponding panel is displayed: 1. Select the **amount** from configured presets. 2. Select a **leverage** ratio, if trading on CFD or PF markets. 3. Click **Buy** or **Sell**. The order will be placed according to the selected type. ## Summary [#summary] Use this widget to configure alerts that will be delivered to the [Messages](messages) widget when an instrument price reaches the specified level. Price control ## Settings [#settings] ### Configure a new alert [#configure-a-new-alert] To configure a new alert: 1. Click the **Add market** button to select a required market from the list. 2. Click the **+** icon below the instrument name to add a new alert trigger. 3. In the displayed fields, specify the exact price or the price change in percents (positive or negative). The other value will be calculated automatically. 4. Click the **check mark icon** to add the trigger. Now you will receive a notification in the [Messages](messages) widget, once the instrument price hits the specified level. You can configure multiple triggers for each instrument. ### Edit alerts [#edit-alerts] Click the price to edit the existing alert. ### Remove alerts [#remove-alerts] Click the **×** button on the trigger panel to remove it and stop receiving corresponding notifications. Click the **×** button in the instrument row to remove it from the list and stop monitoring. ## Summary [#summary] This widget displays a list of untriggered Stop orders created on the selected account. Once a market price reaches your predetermined Stop price, the Stop order is activated and submitted as either a Market or Limit order. It's then removed from this widget. You can now find it in either the [Open orders](open-orders) or [Order history](order-history) widget, depending on its current status. Stop orders ## Stop orders outside trading hours [#stop-orders-outside-trading-hours] You can place Stop Market and Stop Limit orders while a market is closed according to its trading calendar, so you can prepare an entry or a protective level before the session opens. This applies to every channel: the Trading terminal, the REST API, the FIX API, and TradingView. An order placed this way behaves as follows: * It is accepted right away and appears in this widget with the standard **Waiting for activation** status. No new status was introduced for orders placed outside trading hours. * It is validated at placement against the price and amount scales and the market minimum amount. The stop price is also checked against the best bid and ask whenever a price is available — while the market is closed there may be no live price to check it against. * No balance or margin is reserved at placement. The margin check happens when the order triggers. * It stays Waiting for activation across sessions until it triggers, you cancel it, or it expires under its [Time in force](../knowledge-base/time-in-force). A Stop order placed on Friday evening is still there on Monday, and an unexpected holiday does not cancel it. * You can view and cancel it while the market is still closed. When the session opens, the order is evaluated against the first available price. If the market gapped past your stop price while it was closed, the order triggers at the open. For an order placed while no price was available, the first incoming price is used to finalise the order's internal pricing before it can trigger, so activation can take one extra price update. If the margin check fails when the order triggers, the order is cancelled and you receive the failure reason — it is never dropped silently. Market and Limit orders are still rejected while the market is closed. Only the two Stop order types are accepted — and the market itself must still be Open: a Paused or Halted market accepts no orders at all, Stop orders included. ## Settings [#settings] ### Adjust the time period [#adjust-the-time-period] By default, the widget lists the Stop Market and Stop Limit orders for all the time. The most recent order appears at the top of the list. To display orders for a specific time period, use the **Select date range** field. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ## Fields [#fields] The following information is provided about each order: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Side** The order side: Buy or Sell. *** **Order type** The [order type](../knowledge-base/order-types): Stop Market or Stop Limit. *** **Time in force** The [Time in force](../knowledge-base/time-in-force). *** **Amount** The order amount, in the base currency. *** **Stop price** The stop price specified when creating an order. When the market reaches this price, the Stop order will be placed (as a Market or Limit order. *** **Limit price** The price of a Limit order that will be placed when the Stop price is triggered. *** **Used leverage** For CFD trading, the leverage ratio used when placing an order. *** **Created at** The date and time when an order was placed. *** **Updated at** The date and time of the latest update to the order. *** **Comment** The text note attached to the order when it was placed. Up to 100 characters. The comment can't be edited after the order is placed. *** **Order ID** The system identifier of an order. ## Summary [#summary] Use this widget to monitor statistics on multiple instruments at a time. The widget is dynamic and is continuously updated in real time. Watch list ## Settings [#settings] ### Add/remove instruments [#addremove-instruments] Click the **Add market** button to select a required market from the list. Click the **×** button in the instrument row to remove it from the list and stop monitoring. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ## Fields [#fields] The following information is provided about each instrument: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Last price** The price of the last trade. *** **24h change, %** The price change over the last 24 hours, in percents. This value is calculated as ((*Current price* – *Price 24h ago*) / *Current price*) × 100. This value is green if the price is rising and red if it's falling. A dash in this field means that there is no *Price 24h ago* data available. *** **24h low** The lowest trade price over the last 24 hours. *** **24h high** The highest trade price over the last 24 hours. Welcome to **B2TRANSLATE**, a comprehensive web-based localization tool integrated with B2BROKER products. This tool enables you to efficiently translate your product's web user interfaces (WebUIs) into multiple languages, ensuring global accessibility for your applications. B2TRANSLATE organizes translations using a clear hierarchy that makes managing complex localization projects intuitive: 1. **Project types**: Your B2BROKER products. 2. **Projects**: Individual WebUIs within each product, such as test and production websites. 3. **Keys and translations**: Specific UI elements and their localized texts. Let's explore each component in more detail. ## Project types [#project-types] **Project types** correspond directly to your purchased B2BROKER products. They're automatically added to your B2TRANSLATE. If you have multiple products, all of them can be accessed on a single page for your convenience. Each product may have one or more WebUIs, for example if you have several instances. In this case, the project type encompasses different **projects** that represent these WebUIs. If you need any adjustments in the project types, contact your account manager. ## Projects [#projects] **Projects** are separate WebUIs of your products. Each project type includes a **DEMO** project, featuring a full set of categories, languages, and translations. The keys in this project aren't associated with any specific WebUI and serve only for demonstration. While you can't modify translations within the DEMO project, you can copy them to your other projects. Besides DEMO, each project type includes one or more "real" projects. These projects are linked to the WebUIs of your product and are under your full control. You can set and edit translations for the keys within such projects. If you need any adjustments in the projects, contact your account manager. ## Keys and translations [#keys-and-translations] **Keys** are identifiers that reference specific UI elements. **Translations** are text strings in various languages that are assigned to these keys. For example, the key `MyProject.CreateNewDeposit` can be assigned the English translation "Deposit funds", which will appear as the caption for the related UI element in the WebUI. The key list is product-specific and may be updated with product releases. B2TRANSLATE provides you with flexible filters to detect new and empty keys, ensuring your WebUIs remain up-to-date. Refer to [Filter keys](../user-guide/filter-keys) to learn more. ### Default and custom translations [#default-and-custom-translations] Each key has the following translation fields: * **Source** (read-only): A pre-defined translation to English, provided by B2TRANSLATE. This field can't be edited. * **B2TRANSLATE** (read-only): A pre-defined translation to a selected language (if distinct from English), provided by B2TRANSLATE. This field can't be edited. * **Custom translation** (user-editable): A user-provided custom translation to a selected language. This value is initially empty and can be edited anytime. Refer to [Add or modify translations](../user-guide/manage-translations/add-or-modify-translations) to learn more about customizing translations. ### Display logic in WebUI [#display-logic-in-webui] B2TRANSLATE follows an intelligent fallback system for displaying translations: 1. Custom translation (if exists) ↓ (if empty) 2. Default translation in a selected language (if exists) ↓ (if empty) 3. Source English translation ↓ (if explicitly set to empty) 4. No translation (blank) * **Key**: `MyProject.Button.BuyNow` * **Language**: Spanish * **Source English translation**: Buy Now * **Default Spanish translation**: Comprar Ahora * **Custom Spanish translation**: ¡Comprar Ya! → **Display result**: ¡Comprar Ya! (Custom Spanish translation) *** * **Key**: `MyProject.Button.BuyNow` * **Language**: Spanish * **Source English translation**: Buy Now * **Default Spanish translation**: Comprar Ahora * **Custom Spanish translation**: – → **Display result**: Comprar Ahora (Default Spanish translation) *** * **Key**: `MyProject.Button.BuyNow` * **Language**: Spanish * **Source English translation**: Buy Now * **Default Spanish translation**: – * **Custom Spanish translation**: ¡Comprar Ya! → **Display result**: ¡Comprar Ya! (Custom Spanish translation) *** * **Key**: `MyProject.Button.BuyNow` * **Language**: Spanish * **Source English translation**: Buy Now * **Default Spanish translation**: – * **Custom Spanish translation**: – → **Display result**: Buy Now (Source English translation) ### Categories [#categories] **Categories** represent separate functional modules of products and are used to group keys. You can filter keys by a specific category. Each project includes the **default** category that contains the keys used throughout the product, such as error messages or names of UI elements. These keys are translated into English and any other languages selected during purchase. The set of categories depends on the product and can't be edited. ## Main features [#main-features] B2TRANSLATE offers you a comprehensive toolkit for efficient translation management. ### Progress tracking and quality control [#progress-tracking-and-quality-control] * **Completion monitoring**: Track translation progress by language or project. * **Smart filtering**: Identify new keys and missing translations instantly. * **Quality assurance**: Ensure complete coverage across all WebUI elements. ### Efficiency and automation tools [#efficiency-and-automation-tools] * **Translation reuse**: Copy translations between projects to reduce redundant work. * **AI-powered translations**: Integrate with ChatGPT for automated translation assistance (contact your account manager for access). * **Bulk operations**: Export/import via CSV for large-scale editing workflows. ### Advanced localization features [#advanced-localization-features] * **Plural form handling**: Support complex grammatical rules for accurate translations. * **Real-time updates**: Changes reflect immediately in connected WebUIs. * **Collaborative workflows**: Team-friendly interface for multi-user translation projects. ### Support and feedback [#support-and-feedback] * **Integrated feedback system**: Submit suggestions and report issues directly within the platform. * **Dedicated support**: Contact your account managers for technical assistance. Ready to start translating? Explore the **User guide** to master B2TRANSLATE's translation management capabilities. Your personal controls in B2TRANSLATE are grouped in two places: * The **Account** page, opened from the gear icon in the sidebar, where you change your password and manage personal API tokens. * The control row at the bottom of the sidebar, where you switch the interface language, open your notifications, and sign out. The B2TRANSLATE sidebar with navigation items, the Account entry, and the footer controls ## Open your account settings [#open-your-account-settings] To open your account settings, click **Account** (the gear icon) in the sidebar. The **Settings** page opens with two tabs: * **Personal API tokens** — create and revoke tokens for programmatic API access. * **Change password** — update the password you use to sign in. These settings apply to your own account only. ## Change your password [#change-your-password] ### Open the password form [#open-the-password-form] Go to **Account** > **Change password**. ### Enter your passwords [#enter-your-passwords] Enter your **Current password**, and then enter and confirm your **New password**. A strength meter indicates how strong the new password is. ### Save the change [#save-the-change] Click **Save**. You'll use the new password the next time you sign in. The new password must meet the following requirements: * At least eight characters long * At least one letter, one digit, and one special character * Different from your current password If the **Current password** you enter is incorrect, B2TRANSLATE reports an error and the password isn't changed. The Change password tab on the Settings page ## Manage personal API tokens [#manage-personal-api-tokens] Personal API tokens are an authentication method for programmatic access to the B2TRANSLATE API, useful for integrations and automation workflows. A token acts on your behalf, so you don't need to share your sign-in credentials. Personal API tokens have moved from the former profile menu to **Account** > **Personal API tokens**. The Personal API tokens tab listing existing tokens ### Create a token [#create-a-token] ### Open the tokens tab [#open-the-tokens-tab] Go to **Account** > **Personal API tokens**, and then click **Create Token**. ### Name the token and set the expiration [#name-the-token-and-set-the-expiration] Enter a **Token name** that helps you recognize where the token is used. Set an **Expiration date** with the calendar, or click one of the quick options — **30 days**, **60 days**, or **90 days**. ### Copy the token [#copy-the-token] Click **Create Token**. The token value appears once. Copy it and store it in a safe place. The token value is shown only once and can't be retrieved later. If you lose it, delete the token and create a new one. The Create Token dialog with a name field and expiration date ### Revoke a token [#revoke-a-token] To revoke a token you no longer need, find it in the list on the **Personal API tokens** tab and click **Delete**. Any integration that uses the token stops working immediately. ## View your notifications [#view-your-notifications] B2TRANSLATE keeps you informed about background events — such as a finished AI translation, a ready export, or a completed import — through the notification bell at the bottom of the sidebar. * A red badge on the bell shows the number of unread notifications. * To see your most recent notifications, click the bell. * Mark a notification as read to clear it, or click **Mark all as read** to clear them all at once. * When you have more than five notifications, click **All notifications** to open the full history. Besides the in-app bell, notifications can also be delivered to **Email**, **Slack**, or **Telegram**. A workspace administrator configures these delivery channels and chooses who receives each type of event. The notifications panel opened from the sidebar bell ## Change the interface language [#change-the-interface-language] B2TRANSLATE is available in multiple languages. To change the language of the interface, click the language selector (the globe icon) at the bottom-left of the sidebar, and then select a language from the list. Your choice is saved for the next time you sign in. ## Sign out [#sign-out] To sign out, click the log-out icon at the bottom of the sidebar. B2TRANSLATE ends your session and returns you to the **Sign in** page. The credentials for signing in to B2TRANSLATE are sent to you after setting up the product you have purchased. To access your B2TRANSLATE account, go to the **Sign in** page, enter your email and password, and click **Sign in**. If you forgot your password, click the **Forgot password?** link and follow the instructions. **Two-factor authentication (2FA)** For security purposes, 2FA using codes generated by an authenticator app is obligatory for all B2TRANSLATE accounts. * If 2FA is enabled for your B2TRANSLATE account, complete the sign-in process by entering a 2FA code from an app, such as **Google Authenticator** or **Twilio Authy**. * If 2FA hasn't yet been enabled for your account, you'll be prompted to set it up during sign-in. Follow the on-screen instructions to install an authenticator app on your phone and set it up to generate 2FA codes for B2TRANSLATE. To filter keys, while on the **Translations** page, click the **Filters** button in the upper-right page corner. Filters You can filter keys by the following parameters: **Filter by** Select one of the following: * **Empty keys**: To filter keys for which empty translations are saved. For such keys, an empty string is displayed in the WebUI. * **No translation**: To filter keys with no custom translations. For such keys, a default translation is displayed in the WebUI. * **New keys in the last 2 weeks**: To filter keys that have been added within the previous 2 weeks. * **New keys in the last 4 weeks**: To filter keys that have been added within the previous 4 weeks. *** **Created between** Pick up a date range to filter keys added during it. *** **Updated between** Pick up a date range to filter keys modified during it. *** **Category** Select a category to filter keys included in it. *** **Key** Enter a key identifier or a keyword to filter keys with matching identifiers. *** **Source** Enter a translation or a keyword to filter keys with the matching default English translations. *** **Custom translation** Enter a translation or a keyword to filter keys with matching custom translations. *** Click **Apply** to filter keys. To reset filters, click **Clear all**. Apply filters On this page, you can view a list of languages available for your projects. Languages View the following information about each language: **Language** The name of a language. *** **Code** The two-letter code of a language, as per ISO 639-1. *** **Projects** The number of projects where the language is added and used. ## Project list [#project-list] On this page, you can view a list of your projects. Projects are grouped under project types, that are displayed as tabs above the project list. Projects The following information is provided about each project: **Name** The project name. Click it to navigate to the list of project categories. *** **Languages** The number of languages available for a project. *** **All keys** The total number of keys in a project, both translated and untranslated. *** **UUID** The system identifier of a project, in the UUID format. *** **Actions** Click the **three dots** in a project row to access [Download and upload translations](manage-translations/download-and-upload-translations) functionality. ## Translations [#translations] To open the translation view for a project, click its name in the project list. Keys and translations ### Available controls [#available-controls] Above the table, you can find: * The **environment** dropdown: For the *Customer* role, only `production` is available. * The **language** dropdown: Use it to quickly switch between languages available for you project. * The **quick search** field: Click the **magnifying glass icon** to search keys by identifier or translations. * The **Filters** button: Click it to open filter panel. For more details, refer to [Filter keys](filter-keys). For certain project types, the platforms are available above the table, such as *Web*, *iOS*, *Android*, and so on. In the upper‑right page corner, you can find: * The **Import keys** button: Use it to [copy translations from another project](manage-translations/copy-translations). * The **Upload CSV** button: Use it to [upload translations as a CSV file](manage-translations/download-and-upload-translations). * The **Settings** button: Use it to choose which languages are shown in the translation view (**Languages**) and their display order (**Language order**). Pagination controls and the **Rows** selector are available at the bottom of the page. ### Translations table [#translations-table] Each row in the table represents a single key and its translations: **Key** * The **category** badge. * The **key identifier**. * The **Copy** button to quickly copy the key identifier to the clipboard. * The **Created** / **Updated** info: the date the key was created or, once its **Custom translation** has been edited, the date it was last changed. Key *** **Translations** * **Source**: The pre-defined translation to English. This column is read‑only and helps you understand the meaning and context of the key. * **B2TRANSLATE**: The pre-defined translation to a selected language, if distinct from English. This column is read-only. * **Custom translation**: The custom translation to a selected language. This field is initially empty and editable at any time. For keys containing plural forms, this value displays [the Other form](manage-translations/handle-plural-forms#the-other-form). Each column displays a badge with the corresponding language code. Refer to [Display logic in WebUI](../get-started/introduction-to-b2translate#display-logic-in-webui) to understand the translation priorities. For step-by-step instructions on managing translations, refer to the [Manage translations](manage-translations) section of this guide. Translations *** **Actions** * **Translate with AI**: Translate the source English translation to a selected language using ChatGPT. For details, refer to [Translate with AI](manage-translations/translate-with-ai). * **Reset to source translation**: Revert the custom translation to a pre-defined one — either to a selected language (if the default translation for this language is provided) or to English. * **Save as empty**: Explicitly set an empty translation for this key. * **Show history**: View the change history of the translation. Saving an explicitly empty custom translation results in no text being displayed in the WebUI. Use this option carefully and only when this behavior is intentional. Actions *** **Details** Click the **three dots** to open details: * **Info** tab: It's displayed for any key and contains information on when the custom translation was added and when it was last modified. * **Pluralization** tab: It's displayed for keys containing plural forms. Refer to [Handle plural forms](manage-translations/handle-plural-forms) to learn how to properly configure quantity-dependent content based on grammatical requirements of the selected language. Details On this page, you can view a full list of bonuses credited to clients, monitor bonus statuses, and manually credit bonuses to clients as needed. For details of the process of awarding bonuses to clients, refer to [Introduction to bonuses](./#introduction-to-bonuses). ## General information [#general-information] The following information is provided about each bonus: **ID** The bonus identifier. *** **Client ID** The client identifier. *** **Client name** The client’s name. *** **Client email** The client’s email address. *** **Tags** The tags assigned to a client, which are used to sort the client list displayed to [Back Office administrators](../system/users/users). *** **Account** The number of a trading account to which a bonus is credited. *** **Current amount** The current bonus amount. *** **Initial amount** The initial bonus amount. *** **Bonus name** The bonus name, displayed to a client in the B2CORE UI. For temporary bonuses, the default name is the name of a temporary bonus program from which a bonus was claimed. To display a different name in the B2CORE UI, enter the desired name in the **Caption** field within the [bonus details](#details). For manually credited bonuses, the bonus name is the value specified in the **Caption** field when [manually adding bonuses to clients](../../how-to-articles/manage-bonuses/how-to-manually-credit-bonuses-to-clients). *** **State** The bonus status: * `Queued` — a bonus was awarded to a client trading account, but hasn’t yet been added to the account as credit. * `Pending` — a bonus was added to a client trading account as credit, and the required volume that must be traded by the client was calculated. * `Processing` — a bonus is currently being processed for burning. * `Completed` — bonus requirements were successfully met, indicating that the required volume was achieved by the client within the specified number of days, and the bonus credit has been received on the account balance. * `On completing` — the bonus credit is being added to the account balance. * `Expired` — bonus requirements weren’t met, resulting in the bonus credit being revoked from the account. * `Error` — an error occurred while processing a bonus. *** **Created by** The email address and ID of a Back Office user who created a bonus for a client. Clicking the ID opens the profile of the respective Back Office user. *** **Created at** The date and time when a bonus was credited to a client trading account. To view bonus details, click view-button (**View**). If any transaction related to crediting or deducting a specific bonus on the client's trading account fails, the respective bonus row is highlighted, and the **exclamation** icon appears next to the **View** button. You can view the bonus transaction history on the [Bonus transactions tab](#bonus-transactions) in the bonus details. *** **Expired at** The date and time when a credited bonus is scheduled to expire or has already expired. ## Details [#details] The details page is divided into two tabs: * [Bonus details](#bonus-details) * [Bonus transactions](#bonus-transactions) ### Bonus details [#bonus-details] On the details tab, you can view the bonus setting and requirements that a client must meet to receive a bonus credit on their account balance. Additionally, you can reactivate bonuses that have the `Expired` status and revoke bonuses with the `Pending` status. To do this, click the **Actions** button in the upper-right page corner and select the appropriate option in the dropdown. The following information is provided on the tab: **Created at** The date and time when a bonus was credited to a client trading account. *** **Amount** The bonus amount. *** **State** The bonus status. *** **Volume closed** The volume of closed positions counted towards the required volume that a client must achieve to receive a bonus credit on their account balance. *** **Temporary Bonus**\ *Applicable for temporary bonuses only* The name of a temporary bonus program from which a bonus was claimed. *** **Activated at** The date and time when a bonus amount was added to a client trading account as credit. *** **Client** The client’s email address. *** **Account** The number of a trading account to which a bonus was credited. *** **Fictive Volume** This field is used for reactivation of the expired bonus. *** **Caption** The bonus name, displayed to a client in the B2CORE UI. If this field is empty: * For temporary bonuses, the name of a temporary bonus program from which a bonus was claimed will be displayed to the client in the B2CORE UI. * For manually credited bonuses, the name of the platform associated with the account receiving a bonus will be displayed to the client in the B2CORE UI. *** **Lifetime (days)** The number of days to fulfill the bonus requirements. After the bonus amount is added to a client trading account as credit, the client must trade the required volume within the specified number of days to receive the bonus credit on the account balance. *** **Lot per unit** The ratio applied to the bonus amount to determine the volume that must be traded by a client to receive the bonus credit on their account balance: `Required volume = Bonus amount / Lot per unit` Suppose that the bonus amount is 100 USD and the **Lot per unit** option is set to 2. In order to receive the bonus credit of 100 USD to their account balance, a client must trade the following volume: `100 / 2 = 50 lots`. *** **Set credit immediately** * If **Enabled**, when a client claims bonuses from multiple programs at a time using the same trading account, all claimed bonuses are immediately added to their account as credit, enabling the client to use credit funds for trading. * If **Disabled**, when a client claims bonuses from multiple programs at a time using the same trading account, the claimed bonuses are added to their account one after another. Only after the first claimed bonus is processed and assigned the final status (`Completed` or `Expired`), the second claimed bonus is added to the client trading account as credit, and so on. *** **Ignored open/close interval (sec)** The minimum duration, in seconds, for which a client must keep a position open for it to be counted towards the traded volume of the bonus program. *** **Autoenable trading if balance > 0** When the account balance changes from zero or negative to positive, the permission named `Trade Enabled` is either automatically restored for the account or not, depending on this setting: * If **Enabled**, when the account balance becomes positive, the `Trade Enabled` permission is automatically restored, enabling the client to resume trading on their account, including the use of the bonus credit. * If **Disabled**, when the account balance becomes positive, the `Trade Enabled` permission isn’t automatically restored. *** **Ignored symbol groups** One or more symbol groups in which trades aren't counted towards the traded volume of the bonus program. For cTrader, individual symbols must be selected in this field instead of symbol groups, even though symbol groups are available on the cTrader platform. This field is optional and can be empty. ### Bonus transactions [#bonus-transactions] On the transactions tab, you can view the history of transactions related to crediting or deducting a specific bonus on the client's trading account, check their statuses, and retry failed transactions if necessary. For failed transactions with the `Error` status, retry button (**Retry**) is displayed. Click the button to attempt processing the transaction again. The **Retry** button is available only to the Back Office users who are assigned the [permission](../system/users/groups) to `Retry bonus operation`. If you don't have this permission, the button will be hidden. To update the transaction information displayed on the tab, click refresh button (**Refresh**) displayed in the upper-right corner. The following information is provided on the tab: **Operation ID** The identifier assigned to the bonus transaction. *** **Oder ID** The identifier of the order associated with the bonus transaction, if applicable. *** **Amount** The bonus amount. *** **Status** The transaction status: * `New` — the transaction has been initiated. * `In progress` — the transaction is being processed. The `New` and `In progress` statuses are intermediate and appear only for a very brief moment. * `Success` — the transaction was successfully executed. * `Error` — the transaction failed due to an issue. *** **Num of attempts** The number of attempts made to execute the transaction. *** **Last attempt date** The date and time of the most recent attempt to process the transaction. *** **Comment** A description identifying the transaction: * **Credit accrued** — the bonus amount is added to the client’s trading account as credit. * **Credit cleared** — the credited bonus is deducted from the account once the bonus requirements have been met. This occurs just before adding the bonus amount to the account balance. * **Balance accrued** — the credited bonus is added to the account balance after the bonus requirements have been met. * **Credit expired** — the credited bonus has expired and is deducted from the account. * **Bonus cancelled** — the credited bonus is revoked when funds are withdrawn from the account. *** **Error message** For transactions with the `Error` status, this field displays details about the error. *** **Creation date** The date and time when the transaction was initiated. **See also** [How to manually credit bonuses to clients](../../how-to-articles/manage-bonuses/how-to-manually-credit-bonuses-to-clients) [How to automatically credit bonuses to clients upon deposits](../../how-to-articles/manage-bonuses/how-to-automatically-credit-bonuses-to-clients-upon-deposits) On this page, you can manage existing bonus presets and create new ones. **Bonus presets** include pre-configured settings that streamline bonus configuration in the following scenarios: * for temporary bonus programs, eliminating the need to manually specify all bonus program settings (for details, refer to [How to create a temporary bonus program](../../how-to-articles/manage-bonuses/how-to-create-a-temporary-bonus-program)) * for manual bonuses when the admin awards bonuses to clients on the [Bonus distribution](bonus-distribution) page (for details, refer to [How to manually credit bonuses to clients](../../how-to-articles/manage-bonuses/how-to-manually-credit-bonuses-to-clients)) * for the automatic process of crediting bonuses to clients upon deposits (for details, refer to [How to automatically credit bonuses to clients upon deposits](../../how-to-articles/manage-bonuses/how-to-automatically-credit-bonuses-to-clients-upon-deposits)) ## General information [#general-information] The following information is provided about each preset: **ID** The identifier of a bonus preset. *** **Platform** The [trading platform](../products/platforms) to which a bonus preset can be applied. *** **Name** The name of a bonus preset. *** **Priority** The priority index assigned to the bonus preset. Multiple presets can be created for each trading platform that supports bonuses, such as **MT4/5** and **cTrader**. The preset with **lowest** index, created for a specific platform, will be used for automatic crediting of bonuses to clients upon deposits. *** **Lifetime** The number of days within which a client must fulfill the bonus requirements. After a bonus amount is added to a client trading account as credit, the client must trade the required volume within the specified number of days to receive the bonus credit on the account balance. *** **Lot per unit** The ratio applied to a bonus amount to determine the volume that must be traded by a client to receive the bonus credit on their account balance: `Required volume = Bonus amount / Lot per unit` Suppose that the bonus amount is 100 USD and the **Lot per unit** option is set to 2. In order to receive the bonus of 100 USD on their account balance, a client must trade the following volume: `100 / 2 = 50 lots`. *** **Set credit immediately** * If **Enabled**, when a client claims bonuses from multiple programs at a time using the same trading account, all claimed bonuses are immediately added to their account as credit, enabling the client to use credit funds for trading. * If **Disabled**, when a client claims bonuses from multiple programs at a time using the same trading account, the claimed bonuses are added to their account one after another. Only after the first claimed bonus is processed and assigned the final status (`Completed` or `Expired`), the second claimed bonus is added to the client trading account as credit, and so on. *** **Ignored open/close interval** The minimum duration, in seconds, for which clients must keep positions open for them to be counted towards the traded volume. *** **Ignored symbol groups** One or more symbol groups in which trades aren't counted towards the traded volume. For cTrader, individual symbols must be selected in this field instead of symbol groups, even though symbol groups are available on the cTrader platform. This field is optional and can be empty. *** **Autoenable trading if balance > 0** When the account balance changes from zero or negative to positive, the permission named `Trade Enabled` is either automatically restored for the account or not, depending on this setting: * If `Enabled`, when the account balance becomes positive, the `Trade Enabled` permission is automatically restored, enabling the client to resume trading on their account, including the use of the bonus credit. * If `Disabled`, when the account balance becomes positive, the `Trade Enabled` permission isn’t automatically restored. ## Details [#details] On the details page, you can modify parameters of a selected bonus preset and apply restrictions to it. To apply restrictions, click the **Actions** button in the upper-right page corner. The following types of restrictions can be applied to the bonus preset, either individually or in combination: * **Country restrictions** — to make the preset available only to client from specific countries. * **Client type restrictions** — to make the preset available only to clients of selected types, such as Corporate or Individual. * **Verification level restrictions** — to make the program available only to clients with specific verification levels. * **Jurisdiction restrictions** — to make the preset available only to clients under selected jurisdictions. * **Introducing broker restrictions** — to make the preset available only to clients who are referrals of the specified IBs. * **Product restrictions** — to make the preset available for use only with specific [products](../products/products). For example, you can use this restriction to prevent a preset from being applied to products that manage cent trading accounts. If the preset is used for automatic bonuses upon deposits, these bonuses won’t be credited to cent accounts. However, the preset can still be applied to other products that meet the restriction criteria. If a client or product doesn't meet the restriction criteria, the preset can't be used to credit bonuses. This also applies to the [automatic process of crediting bonuses upon deposits](../../how-to-articles/manage-bonuses/how-to-automatically-credit-bonuses-to-clients-upon-deposits) if the preset is used for automatic bonuses. **See also** [How to create a bonus preset](../../how-to-articles/manage-bonuses/how-to-create-a-bonus-preset) ## Introduction to bonuses [#introduction-to-bonuses] Bonuses offer additional financial incentives and benefits to clients actively involved in trading. They can also serve as a tool for attracting new clients, retain existing ones, or encouraging trading using specific instruments. Bonuses are supported for **MetaTrader 4/5** and **cTrader**. The process of awarding bonuses to clients involves two steps: 1. Initially, a bonus amount is added to a client trading account as credit funds. These credit funds increase the client’s trading capital, allowing the client to trade on the account with positions of larger sizes. 2. The ultimate goal for the client is to convert the bonus amount from credit funds to their account balance, which represents real funds that can be withdrawn from the account. To achieve this, the client must fulfill specific bonus requirements and trade the required volume within a specified period. If the client fails to meet the bonus requirements, the bonus credit is revoked from the client account. On this page, you can view a list of created temporary bonus programs and create new ones. **Temporary bonus programs** are time-limited offers that are displayed to clients on the **Bonuses** page in the B2CORE UI, where clients can claim bonuses from desired programs. For details of the process of awarding bonuses to clients, refer to [Introduction to bonuses](./#introduction-to-bonuses). ## General information [#general-information] The following information is provided about each temporary bonus program: **ID** The bonus program identifier. *** **Name** The bonus program name displayed to clients in the B2CORE UI. *** **Amount** The bonus amount. *** **Currency** The bonus program currency. Only trading accounts denominated in the specified currency can be used to claim the bonus from the given program. *** **Lot per unit** The ratio applied to the specified bonus amount to determine the volume that must be traded by a client: `Required volume = Bonus amount / Lot per unit` Suppose that the **Amount** field is set to 100 USD and the **Lot per unit** option is set to 2. In order to receive the bonus of 100 USD on their account balance, a client must trade the following volume: `100 / 2 = 50 lots`. *** **Created at** The date and time when a bonus program was created. *** **Expired** The end date and time of the bonus program, after which clients are no longer able to claim bonuses from the program. To view bonus program details, click the **Edit** button. ## Details [#details] On the details page, you can view the additional program settings and requirements: **Platform** The [trading platform](../products/platforms) on which the bonus program is available. Only trading accounts opened on the specified platform can be used to claim the bonus from the given program. *** **Name** The bonus program name displayed to clients in the B2CORE UI. *** **Amount** The bonus amount. *** **Currency** The bonus program currency. Only trading accounts denominated in the specified currency can be used to claim the bonus from the given program. *** **Expired** The end date and time of the bonus program, after which clients are no longer able to claim bonuses from the program. *** **Platform Groups** One or more groups created on the trading platform, in which trades are counted towards the traded volume of the bonus program. *** **Lifetime (days)** The number of days to fulfill the program requirements. After the bonus amount is claimed and added to a client trading account as credit, the client must trade the required volume within the specified number of days to receive the bonus credit on the account balance. *** **Lot per unit** The ratio applied to the specified bonus amount to determine the volume that must be traded by a client to receive the bonus credit on their account balance. *** **Set credit immediately** * If **Enabled**, when a client claims bonuses from multiple programs at a time using the same trading account, all claimed bonuses are immediately added to their account as credit, enabling the client to use credit funds for trading. * If **Disabled**, when a client claims bonuses from multiple programs at a time using the same trading account, the claimed bonuses are added to their account one after another. Only after the first claimed bonus is processed and assigned the final status (`Completed` or `Expired`), the second claimed bonus is added to the client trading account as credit, and so on. *** **Ignored open/close interval (sec)** The minimum duration, in seconds, for which a client must keep a position open for it to be counted towards the traded volume of the bonus program. *** **Autoenable trading if balance > 0** When the account balance changes from zero or negative to positive, the permission named `Trade Enabled` is either automatically restored for the account or not, depending on this setting: * If **Enabled**, when the account balance becomes positive, the `Trade Enabled` permission is automatically restored, enabling the client to resume trading on their account, including the use of the bonus credit. * If **Disabled**, when the account balance becomes positive, the `Trade Enabled` permission isn’t automatically restored. *** **Ignored symbol groups** One or more symbol groups in which trades aren't counted towards the traded volume of the bonus program. For cTrader, individual symbols must be selected in this field instead of symbol groups, even though symbol groups are available on the cTrader platform. This field is optional and can be empty. *** To apply restrictions to a selected temporary bonus program, click the **Actions** button in the upper-right page corner. The following types of restrictions can be applied to bonus programs, either individually or in combination: * **Country restrictions** — to make the program available only to client from specific countries. * **Client type restrictions** — to make the program available only to clients of selected types, such as Corporate or Individual. * **Verification level restrictions** — to make the program available only to clients with specific verification levels. * **Jurisdiction restrictions** — to make the program available only to clients under selected jurisdictions. * **Introducing broker restrictions** — to make the program available only to clients who are referrals of the specified IBs. If a client doesn't meet the restriction criteria, the temporary bonus program won't be visible to that client in the B2CORE UI, and the client won't have the option to claim the bonus. **See also** [How to create a temporary bonus program](../../how-to-articles/manage-bonuses/how-to-create-a-temporary-bonus-program) On this page, you can find a complete list of client accounts. To view the accounts of a specific client, go to the [Accounts tab](general/accounts-tab) on the client details page. ## General information [#general-information] The following information is provided about each client account: **Account ID** The identifier of an account in the system. *** **Account number** The account number. *** **Display Number** The account number displayed to a client in the B2CORE UI. *** **Client ID** The identifier of an account owner. *** **Client name** The name of an account owner. *** **Client status** The [current status](../references/client-statuses) of an account owner’s profile in the B2CORE UI. *** **Email** The email address of an account owner. *** **Tags** The tags assigned to an account owner that are used to navigate the client list displayed to [Back Office administrators](../system/users/). *** **Country** The account owner’s [country](../system/countries). *** **Company** The account owner’s company. *** **Product** The [product](../products/products) specified for an account. *** **Platform** The [platform](../products/platforms) on which an account is opened. *** **Type** The account type: * **Personal** * **Trade** * **Demo** * **Partner** * **External** *** **Currency** The account currency. *** **Leverage** The account leverage. *** **Balance** The total balance on an account, in the account currency. *** **Balance (USD)** The total balance on an account, in USD. *** **Balance (EUR)** The total balance on an account, in EUR. *** **Credit** The credit funds available on an account. *** **Hold amount** The amount of locked funds on an account. *** **Free funds** The amount of available funds on an account. *** **Equity** For MetaTrader accounts, the account equity. *** **Equity (excl. Credit)** For MetaTrader accounts, the account equity excluding credit funds. *** **Equity (excl. Credit) in USD** For MetaTrader accounts, the account equity excluding credit funds, in USD. *** **Free margin** For MetaTrader accounts, the account available margin. *** **Created** The date and time when an account was created. *** **Internal client type** For internal use: the internal category assigned to a client. *** **Client verification level** The verification level obtained by an account owner. ## Actions [#actions] To create a new account for a client, click the **Create** button in the upper-right corner of the page. *** To deposit funds to multiple client accounts at once, click the **+Update balances** button in the upper-right corner of the page, and then upload a CSV file including the required data (for details, refer to [How to update balances](../../how-to-articles/manage-finances/how-to-update-balances)). *** To export data from the page, click the **Export** button in the upper-right corner of the page, and then select the desired file format. The exported file will reflect your current visibility settings as well as any applied sorting and filtering criteria. Balances of both live and demo trading accounts may not be as up-to-date as those shown on the respective trading platforms. To view the account details, select an account and click the **Edit** button. ## Details [#details] The detail page contains the following tabs: * **Account** — on this tab, you can find the details about an account, assigned access permissions and the account owner * **Transactions** — on this tab, you can filter transactions by their type (the fields displayed on this tab are described in the corresponding sections of this guide) To learn about transactions made on a specific client account, go to the [Transactions tab](general/transactions-tab) on the client details page. On this page, you can create, view, and manage jurisdictions to which clients can be automatically assigned after registration. Jurisdictions help segment clients by region or regulatory needs, ensuring efficient operations and compliance. Jurisdiction-based restrictions can be used to control access to specific products, deposit and withdrawal methods, or verification levels, making them available to clients from certain jurisdictions while restricting access for others. Jurisdictions are assigned to clients based on a combination of the client’s **country** and **client type**. ## Key points [#key-points] * If a client registers with a country and client type that match an existing jurisdiction, the jurisdiction is assigned to the client automatically. * If no matching country and client type combination is found during registration, the jurisdiction isn’t assigned to the client. * If a client isn’t required to select their country during registration, the jurisdiction is assigned automatically after the country is set through the KYC process, taking the client type into account. * When the client’s country changes, the jurisdiction is automatically updated if a matching one exists, taking the client type into account. * Jurisdictions can also be manually assigned or changed in the client details without changing the country. The following information is provided about each jurisdiction: **ID** The jurisdiction identifier. *** **Caption** The jurisdiction name. *** **Description** The description providing additional details about the jurisdiction. *** **Countries** The list of countries included in the jurisdiction. *** **Client types** The list of [client types](types) associated with the jurisdiction. *** **Tags** One or more [client tags](../system/users/client-tags) associated with the jurisdiction. These tags are automatically assigned to clients along with the respective jurisdiction. **See also** [How to create a jurisdiction](../../how-to-articles/manage-clients/how-to-create-a-jurisdiction) [How to edit a jurisdiction](../../how-to-articles/manage-clients/how-to-create-a-jurisdiction#how-to-edit-a-jurisdiction) On this page, you can find a list of all managers and add new ones. Managers are users with access to the Back Office, responsible for organizing work and communicating with clients registered in B2CORE. Upon registration, clients are automatically distributed among the existing managers according to country restrictions. Additionally, you can configure managers to view only specific clients, for example, those assigned to them using [client tags](../system/users/client-tags). ## General information [#general-information] The following information is provided about each manager: **Name** The manager’s name. *** **Email** The manager’s email address. *** **Title** The manager’s title (such as `Mr` or `Mrs`). *** **Enabled** The status of a manager’s profile. Clients can be assigned only to `Enabled` managers. *** **Default** If a manager is set as the default, all new clients will automatically be assigned to that manager, considering country restrictions. Only one manager can be set as the default at a time. It is also possible to have no default manager. In this case, new clients will be assigned to existing managers sequentially, still considering country restrictions. If no manager meets the country restrictions for a client, the client won't be assigned a manager. For more information on the assignment process, refer to [Example](#Example) below. To view details of the manager's profile, click the **Edit** button. ## Details [#details] On the details page, you can additionally view the manager's phone number and edit their profile. To apply country restrictions to a selected manager, click the **Actions** button in the upper-right page corner and select **Country restrictions** in the dropdown: * **Deny only** — the manager can be assigned to all clients, except for those from the selected countries. * **Allow only** — the manager can only be assigned to clients from the specified countries. * **Rules** — a list of countries to which either the **Deny only** or **Allow only** rule is applied. ## Example [#example] This example illustrates the process of assigning new clients to managers. Suppose we have the **Default manager** with the country restriction **Allow only** set to `Vietnam`, meaning that the **Default manager** can be assigned only to clients from Vietnam. In addition to the **Default manager**, there are two non-default managers: * **Manager 1** with the country restriction **Deny only** set to `Germany`, meaning that this manager can be assigned to all clients except for those from Germany. * **Manager 2** without country restrictions. The assignment process works as follows: A client from `Vietnam` — the client will be assigned to the **Default manager** since the country restriction is met in this case. A client from `Germany` — the client can't be assigned to the **Default manager** due to the country restriction and can't be assigned to **Manager 1** either due to the same reason. Therefore, the client will be assigned to **Manager 2**. A client from `China` — the client can't be assigned to the **Default manager** due to the country restriction. The client will be randomly assigned to **Manager 1** or **Manager 2**. In this case, suppose the client is assigned to **Manager 1**. A client from `UAE` — the client can't be assigned to the **Default manager** due to the country restriction. Sequentially, the client will be assigned to **Manager 2** as the previous client was assigned to **Manager 1**. **See also** [How to add a manager](../../how-to-articles/manage-system-settings/how-to-add-a-manager) When your client creates a new request, it appears in the request list. All incoming requests are assigned the **Pending** status and must be resolved on an individual basis (approved or rejected). By default, only pending requests are listed on this page. The **bell** icon displayed in the top panel indicates the total number of pending requests. You can export page data to a CSV or XLSX file. To do this, click the **Export** button in the upper-right page corner, choose a file format, and then select whether to download the data to your computer or deliver it to an email address from your profile. The data in a resulting file matches both the current visibility settings and the applied sorting and filtering parameters. ## General information [#general-information] The following information is provided about each client request: **№** The sequence number of a request. *** **Client ID** The identifier of a client who submitted a request. *** **Client name** The name of a client who submitted a request. *** **Client email** The email address of a client who submitted a request. *** **Tags** The tags assigned to a client that are used to sort the client list displayed to [Back Office administrators](../system/users/). *** **Type** The request type: * **Account** — a request to create an account (when such a request is required for a specific product) * **Address** — a request to update the **Residential** address of an `individual` client. * **Archive** — a request to archive a trading account * **Avatar** — a request to upload a client profile picture * **Deleting Account** — a request to delete an account * **Deposit** — a request to deposit funds * **Exchange** — a request to exchange funds (when such a request is required for a specific currency pair) * **Payout** — a request to withdraw funds * **Profile** — a request to update client profile information * **Transfer** — a request to transfer funds between accounts of the same client * **Internal transfer** — a request to transfer funds from one client to another within the same B2CORE system * **Verification** — a request to update a client’s verification level based on submitted documents * **Client tests** — a request to check the results of a client accreditation test * **Introducing brokers** — a request to join an IB program * **PaymentSystem Deposit Assistance** and **PaymentSystem Withdrawal Assistance** — requests created when the status of a deposit or withdrawal initiated through [PSS-connected](../../integrations/payment-systems#payment-system-service-pss) methods can’t be determined automatically. In such cases, the transaction is assigned the `Assistance` status in the B2CORE Back Office. The admin must review the transaction details and decide whether to continue syncing the status with the external payment system or mark it as failed (for details, refer to [How to process transactions with the Assistance status](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-assistance-status)). * **Static Deposit Assistance** — a request created when the status of a deposit made through a [static deposit](../finance/static-deposit) method can’t be determined automatically *** **Internal client type** For internal use: the internal category assigned to a client. *** **Status** The current status of a request: * **Pending** — the request was submitted but has not yet been resolved by the administrator * **Approved** — the request was approved by the administrator * **Rejected** — the request was rejected by the administrator * **Canceled** — the request was canceled *** **Verification Level** The verification level obtained by a client. *** **Date** The date and time when a request was submitted. *** **Processing date** The date and time when a request was resolved (approved or rejected), helping you evaluate the processing time by comparing it to when the request was created. *** **Processed by** The email address of the [Back Office user](../system/users/users) who resolved the request. *** **Country** The client's country. *** **Account number** The identifier of a client’s account. *** **Amount** The transaction amount. *** **Currency** The transaction currency. *** **Method** The method used to [deposit](../system/deposit-system#deposit-methods) or [withdraw](../system/payout-system#payout-methods) funds. *** **Transaction ID** The transaction identifier in the system. *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **Dealing approved** An internal status indicating whether a transaction was approved by the Finance Department. *** **Compliance approved** An internal status indicating whether a withdrawal has passed a compliance check. To view request details, click the **Edit** button. ## Details [#details] In the request details, you can view all relevant information associated with the specific request type. The **Transaction monitoring** section displays the results (`green` or `red`) of the KYT check for deposits and withdrawals, performed via **SumSub**. To use this feature, you must have an active **SumSub** account with **Fraud Prevention** enabled and properly configured, along with the corresponding **SumSub** external connection enabled in the B2CORE Back Office. The following actions are available in the request details: Click the **Add comment** button to add a comment to a request. Click the **Options** button to set the color with which a request is highlighted in the list. The admins with the `Update requests` permission can also check a transaction by clicking the **Audit** button. The system will then summarize all incoming transactions on a corresponding account and show a notification if a significant discrepancy is found on the balance. For some payment systems, it is also possible to change the amount to be deposited or withdrawn directly, by editing a corresponding request. To resolve a request, click **Approve** or **Reject**. **See also** [Resolutions](../system/requests#resolutions) [How to create a request resolution type](../../how-to-articles/manage-system-settings/how-to-create-a-request-resolution-type) [How to create a request resolution](../../how-to-articles/manage-system-settings/how-to-create-a-request-resolution) [How to enable requests for exchanges in specific currency pairs](../../how-to-articles/manage-currencies/how-to-enable-requests-for-exchanges-in-specific-currency-pairs) [How to update rates in exchange requests](../../how-to-articles/manage-currencies/how-to-update-rates-in-exchange-requests) On this page, you can view and manage the categories which can be assigned to clients. The following data is provided about each client category: **ID** The category identifier. *** **Name** The category name. *** **Caption** The category description. *** **Enabled** If `Yes`, this client category is available for selection. *** **Default** If `Yes`, this is the default category that is assigned to new clients. *** **Num. of clients** The total number of clients in this category. On this page, you can view a list of available currencies, add new currencies, and configure their settings. **Code** The numeric code that is used as a unique currency identifier. *** **Caption** The currency name displayed in the B2CORE UI. *** **Alpha** The alphabetic code of a currency (which is set by an admin when adding a currency to the system). *** **Markup: Sell** The sell commission markup specified as a percentage. *** **Markup: Buy** The buy commission markup specified as a percentage. *** **Precision** The number of decimal places displayed when representing amounts in a currency. You can set the same sell/buy markup for all currencies by clicking the **Change options** button in the upper-right page corner and specifying the required values. To modify currency settings, navigate to the currency details by clicking the **Edit** button located in the currency row. **See also** [How to add a currency](../../how-to-articles/manage-currencies/how-to-add-a-currency) On this page, you can view a list of available currency pairs and add new pairs. **From currency** The alphabetic code of a base currency. *** **To currency** The alphabetic code of a quote currency. *** **Enabled for client** If `Yes`, a currency pair can be exchanged by clients in the B2CORE UI; otherwise, `No`. By default, this option is set to `Yes`. *** **Rates Custom Priority** The order in which exchange rates are obtained from exchange rate providers for this currency pair. *** **Updated** The date and time when a currency pair was last updated. *** **Max amount** The maximum allowed amount per exchange operation in a currency pair. *** **Step** The minimum increment by which an amount can be changed at a time. *** **Enabled for admin** If `Yes`, a currency pair can be exchanged via the Back Office; otherwise, `No`. By default, this option is set to `Yes`. *** **Request required** * If `Yes`, requests for admin approval are created when clients initiate exchanges in a currency pair in the B2CORE UI. After approval, exchanges are executed using the rates specified in the approved requests. * If `No`, exchanges in this currency pair are executed without admin approval. By default, this option is set to `No`. **See also** [How to add an exchange currency pair](../../how-to-articles/manage-currencies/how-to-add-an-exchange-currency-pair) [How to set priorities for exchange rate providers](../../how-to-articles/manage-currencies/how-to-set-priorities-for-exchange-rate-providers) [How to enable requests for exchanges in specific currency pairs](../../how-to-articles/manage-currencies/how-to-enable-requests-for-exchanges-in-specific-currency-pairs) This page displays the configured exchange rate providers used to ensure accurate currency conversions during transaction processing when required. ## General information [#general-information] The following information is displayed for each rate provider: **Priority** The priority index assigned to the rate provider. The order of receiving exchange rates depends on the priority indexes assigned to providers. A lower index means higher priority. For example, a provider with index `1` is used first to receive rates. You can change the priority in the rate provider details or by dragging and dropping providers into the required order. *** **Provider** The name of the rate provider: * B2BINPAY * BTC-Alpha * CBRF * CoinGecko * CoinMarketCap * Coinsbuy * CryptoCompare * CryptoWatch * ECB Rates * Fixer * WazirX * Xe * custom *** **Name** The name assigned to the exchange rate configuration, which is used in the Back Office. *** **From currencies** One or more base currencies for which the rates are configured. *** **To currencies** One or more quote currencies to which the rates apply. *** **Enabled** If **Yes**, the rate provider is enabled and can be used for supplying rates. To view the rate provider details, click the **Edit** button. ## Details [#details] On the details page, you can view and configure additional settings required for the provider. **Options** This section includes the connection settings required for establishing a connection with specific providers. *** When using the **custom** provider, the following settings are displayed: * **Rate** — the fixed rate that is used for conversions. * **Base currency** — the currency that serves as the base for all conversions using the specified fixed rate. **See also** [How to configure currency exchange rates](../../how-to-articles/manage-currencies/how-to-configure-currency-exchange-rates) On this page, you can view a list of client cryptocurrency wallets. To view the wallets of a particular client, go to the [Finance tab](../clients/general/finance-tab) on the client details page, and then select **Deposit wallets**. The following information is provided about each deposit wallet: **ID** The identifier of a wallet in the system. *** **Client ID** The identifier of a wallet owner. *** **Client** The name of a wallet owner. *** **Tags** The tags assigned to a wallet owner that are used to sort the list of wallets displayed to [Back Office administrators](../system/users/). *** **Address** The public wallet address. *** **Destination tag** Applicable only for certain currencies (XRP, XLM, BNB, and XEM). *** **Blockchain** The blockchain network on which a wallet is created. *** **Method** The link to the details of a [method](../system/deposit-system#deposit-methods) used to deposit funds. *** **Currencies** The currencies enabled for a wallet. On this page, you can view all deposits made to client accounts and wallets, which allows you to track, review, and manage deposit activity. To view deposits for a specific client, go to the [Transactions tab](../clients/general/transactions-tab) on the client details page. ## General information [#general-information] The following information is provided about each deposit: **Deposit number** The sequence number assigned to a deposit in B2CORE. Click it to open the deposit details. *** **Client ID** The client identifier. *** **Client** The client’s name. *** **Email** The client’s email address. *** **Tags** The tags assigned to a client, used to sort a list of deposits displayed to [Back Office administrators](../system/users/users). *** **Country** The client’s [country](../system/countries) (if specified during registration or KYC verification process). *** **Jurisdiction** The [jurisdiction](../clients/jurisdictions) to which the client is assigned. *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **Account number** The number of a client account or wallet to which funds are deposited. *** **Payment method** The [method](../system/deposit-system#deposit-methods) used to deposit funds. *** **Payment name** The deposit method name used in the B2CORE Back Office. *** **Groups of method** The [group](../system/deposit-system#deposit-groups) to which a deposit method belongs. *** **KYT status** The Know Your Transaction status returned by **SumSub Fraud Prevention**, indicating whether the transaction has passed compliance checks, shown as either `green` or `red`. Deposit monitoring is performed; however, because deposits are processed via external payment systems, transactions may still be completed successfully regardless of whether the SumSub response is `green` or `red`. *** **Amount** The deposit amount. *** **Currency** The currency in which a deposit amount is specified. *** **Vendor Commission** The commission charged by a broker. *** **Provider Commission** The commission charged by a payment system. *** **Commission currency** The currency in which commissions are charged. *** **Final amount** The deposit amount (less commissions), in the final currency. *** **Final currency** The currency in which a deposit amount is processed and credited to a client account or wallet. *** **Exchange rate** The actual rate used to convert a deposit amount into the final currency at the moment of transaction execution. This rate may differ from the one displayed to the client in the B2CORE UI before the transaction is submitted. The rate displayed in the B2CORE UI is indicative and may not reflect the final value applied during deposit execution. *** **Rate currency** The currency in which the deposit is processed. *** **Rate (USD)** The exchange rate applied to convert a deposit amount to USD. *** **Final amount (USD)** The deposit amount (less commissions), in USD. *** **Created** The date and time when a deposit was initiated. *** **Processed** The date and time when a deposit was processed. *** **Status** The current [transaction status](../references/transaction-statuses). *** **Fin verified** For internal use only. The result of a check made by the Finance Department. *** **Account type** The [type of a product](../products/products) based on which a client account or wallet was created. *** **Internal client type** For internal use only. The internal client profile category. *** **Invoice** The unique identifier of a payment operation in the related payment system. *** **Transaction** The unique address of a transaction on a blockchain. *** **Internal comment** For internal use only. An optional note about a deposit. To view deposit details, click the **Edit** button or the number displayed in the **Deposit number** column. ## Details [#details] The details page shows the **Trader room** tab, which contains the deposit details listed below. For deposits via [PSS-connected](../../how-to-articles/manage-payment-methods/how-to-add-deposit-and-withdrawal-methods-through-pss) methods, an additional **Payment system** tab is available and provides extended [payment details](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-assistance-status#payment-details-structure). **ID** The sequence number assigned to a deposit in B2CORE (the same as the one displayed in the **Deposit number** column). **Status** The current [transaction status](../references/transaction-statuses). *** **Invoice** The unique identifier of a payment operation in the related payment system. *** **Deposit method** The [method](../system/deposit-system) used to deposit funds. *** **Date** The date when a deposit was initiated. *** **Invoice date** The date when an invoice was created. *** **Result date** The date when a deposit was credited. *** **Fin verified** For internal use only. The result of a check made by the Finance Department. *** **Amount** The deposit amount. *** **Currency** The currency in which a deposit amount is specified. *** **Vendor Commission** The commission charged by a broker. *** **Provider Commission** The commission charged by a payment system. *** **Final amount** The deposit amount (less commissions), in the final currency in which the deposit is processed and credited to a client account or wallet. *** **Transaction** The unique address of a transaction on a blockchain. *** **Rate (USD)** The exchange rate applied to convert a deposit amount to USD. *** **Internal comment** An optional note about a deposit. Enter a note or edit the existing one, and then click **Save**. ### Info [#info] This section displays information about a client account or wallet to which funds are deposited. **Account number** The number of a client account or wallet to which funds are deposited. *** **Account balance** The current balance on an account or a wallet. *** **Account type** The [type of a product](../products/products) based on which the account or wallet is created. *** **Client** The client’s name. *** **Email** The client’s email address. ### Transaction monitoring [#transaction-monitoring] This section displays the results (`green` or `red`) of the KYT check performed via **SumSub**. To use this feature, you must have an active **SumSub** account with **Fraud Prevention** enabled and properly configured, along with the corresponding **SumSub** external connection enabled in the B2CORE Back Office. If no results are displayed, click the **Check transaction** button. This button is unavailable if the transaction has already been checked. **See also** [How to create a deposit](../../how-to-articles/manage-finances/how-to-create-a-deposit) On this page, you can view a list of exchange transactions made on client accounts. To view exchanges made on accounts of a particular client, go to the [Transactions tab](../clients/general/transactions-tab) on the client details page. The following information is provided about each exchange transaction: **Transaction ID** The identifier of an exchange transaction in the system. *** **Client ID** The client identifier. *** **Client** The client’s name. *** **Email** The client’s email address. *** **Jurisdiction** The [jurisdiction](../clients/jurisdictions) to which the client is assigned. *** **Tags** The tags assigned to a client that are used to sort a list of exchange transactions displayed to [Back Office administrators](../system/users/). *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **From account** The number of a source account from which the exchanged asset amount is withdrawn. *** **Source amount** The amount that was exchanged, in the currency of a source account. *** **Source currency** The currency in which a source account is denominated. *** **To account** The number of a destination account to which the exchanged asset amount is deposited. *** **Destination amount** The amount that was exchanged, in the currency of a destination account. *** **Destination currency** The currency in which a destination account is denominated. *** **Commission** The amount earned from an exchange transaction as a result of the markup applied to the base exchange rate. This reflects the profit generated by adding a markup percentage to the rate. *** **Rate** The final exchange rate applied to a transaction, including the added markup percentage. *** **Status** The current [transaction status](../references/transaction-statuses). *** **Created** The date and time when an exchange transaction was made. *** **Exchanged By** Indicates if an exchange was made by a client in the B2CORE UI or by an admin in the Back Office. **See also** [How to exchange funds](../../how-to-articles/manage-finances/how-to-exchange-funds) On this page, you can view all withdrawals made from client accounts and wallets, which allows you to track, review, and manage withdrawal activity. To view withdrawals for a specific client, go to the [Transactions tab](../clients/general/transactions-tab) on the client details page. ## General information [#general-information] The following information is provided about each withdrawal: **Withdrawal number** The sequence number assigned to a withdrawal in B2CORE. Click it to open the withdrawal details. *** **Client ID** The client identifier. *** **Client** The client’s name. *** **Email** The client’s email address. *** **Tags** The tags assigned to a client, used to sort a list of withdrawals displayed to [Back Office administrators](../system/users/users). *** **Country** The client’s [country](../system/countries) (if specified during registration or KYC verification process). *** **Jurisdiction** The [jurisdiction](../clients/jurisdictions) to which the client is assigned. *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **Account** The number of a client account or wallet from which funds are withdrawn. *** **Method** The [method](../system/payout-system#payout-methods) used to withdraw funds. *** **Name** The withdrawal method name used in the B2CORE Back Office. *** **Groups of method** The [group](../system/payout-system#payout-groups) to which a withdrawal method belongs. *** **KYT status** The Know Your Transaction status returned by **SumSub Fraud Prevention**, indicating whether the transaction has passed compliance checks, shown as either `green` or `red`. *** **Amount** The withdrawal amount. *** **Currency** The currency in which a withdrawal amount is specified. *** **Vendor Commission** The commission charged by a broker. *** **Provider Commission** The commission charged by a payment system. *** **Commission currency** The currency in which commissions are charged. *** **Final amount** The withdrawal amount (less commissions), in the final currency. *** **Final currency** The currency in which the withdrawal is processed. *** **Exchange rate** The actual rate applied to convert a withdrawal amount into the final currency at the moment of transaction execution. This rate may differ from the one displayed to the client in the B2CORE UI before the transaction is submitted. The rate displayed in the B2CORE UI is indicative and may not reflect the final value applied during withdrawal execution. *** **Rate currency** The currency to which a withdrawal amount is converted during processing. *** **Rate (USD)** The exchange rate applied to convert a withdrawal amount to USD. *** **Final amount (USD)** The withdrawal amount (less commissions), in USD. *** **Status** The current [transaction status](../references/transaction-statuses). *** **Created** The date and time when a withdrawal was initiated. *** **Processed** The date and time when a withdrawal was processed. *** **Account type** The [type of a product](../products/products) based on which a client account or wallet was created. *** **Internal client type** For internal use only. The internal client profile category. *** **Invoice** The unique identifier of a payment operation in the related payment system. *** **Transaction** The unique address of a transaction on a blockchain. *** **Blockchain fee** The blockchain commission. *** **Wallet** The public address of a wallet to which funds are withdrawn. *** **Destination Tag** Applicable only to XRP, XLM, BNB, and XEM. *** **Dealing approved** For internal use only. The result of a check made by the Finance Department. *** **Compliance approved** For internal use only. The result of a check made by the Legal Department. *** **Internal comment** For internal use only. An optional note about a withdrawal. To view withdrawal details, click the **Edit** button or the number displayed in the **Withdrawal number** column. ## Details [#details] The details page shows the **Trader room** tab, which contains the withdrawal details listed below. For withdrawals via [PSS-connected](../../how-to-articles/manage-payment-methods/how-to-add-deposit-and-withdrawal-methods-through-pss) methods, an additional **Payment system** tab is available and provides extended [payment details](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-assistance-status#payment-details-structure). **ID** The sequence number assigned to a withdrawal in B2CORE (the same as the one displayed in the **Withdrawal number** column). *** **Status** The current [transaction status](../references/transaction-statuses). *** **Invoice** The unique identifier of a payment operation in the related payment system. *** **Date** The date when a withdrawal was initiated. *** **Invoice date** The date when an invoice was created. *** **Result date** The date when a withdrawal was debited. *** **Method** The [method](../system/payout-system) used to withdraw funds. *** **Amount** The withdrawal amount. *** **Currency** The currency in which a withdrawal amount is specified. *** **Vendor Commission** The commission charged by a broker. *** **Provider Commission** The commission charged by a payment system. *** **Final amount** The withdrawal amount (less commissions), in the final currency in which the withdrawal is processed. *** **Transaction** The unique address of a transaction on a blockchain. *** **Exchange rate** The actual rate applied to convert a withdrawal amount into the final currency at the moment of transaction execution. *** **USD Exchange Rate** The exchange rate applied to convert a withdrawal amount to USD. *** **Internal comment** An optional note about a withdrawal. Enter a note or edit the existing one, and then click **Save**. *** **Dealing approved** For internal use only. The result of a check made by the Finance Department. *** **Compliance approved** For internal use only. The result of a check made by the Legal Department. ### Request info [#request-info] This section displays information related to a client withdrawal request that requires approval or rejection by the [Back Office administrator](../system/users/users). **Request ID** The identifier of a client request to withdraw funds. Click it to open the request details. *** **Resolution** The [request status](../references/client-request-statuses). *** **Reason** For rejected requests, the reason the request was rejected. ### Info [#info] This section displays information about a client account or wallet from which funds are withdrawn. **Account** The number of a client account or wallet from which funds are withdrawn. *** **Account balance** The current balance on an account or a wallet. *** **Account type** The [type of a product](../products/products) based on which the account or wallet is created. *** **Client** The client’s name. *** **Email** The client’s email address. ### Transaction monitoring [#transaction-monitoring] This section displays the results (`green` or `red`) of the KYT check performed via **SumSub**. To use this feature, you must have an active **SumSub** account with **Fraud Prevention** enabled and properly configured, along with the corresponding **SumSub** external connection enabled in the B2CORE Back Office. If no results are displayed, click the **Check transaction** button. This button is unavailable if the transaction has already been checked. **See also** [How to create a payout](../../how-to-articles/manage-finances/how-to-create-a-payout) On this page, you can view a list of configured reports as well as create new reports. ## General information [#general-information] The following information is provided about each report: **ID** The report identifier. *** **Interval** The report schedule. Possible options: * **Daily** — the report is run and sent every day * **Weekly** — the report is run and sent once a week * **Monthly** — the report is run and sent once a month *** **Date slice** The period for which data is included in the report, as per the Back Office server time: * **Day** — the previous day from 00:00 to 23:59 * **Week** — the previous week from Monday 00:00 to Sunday 23:59 * **Month** — the previous month from the first day of the month 00:00 to the last day 23:59 * **Curweek** — the previous 7 days from the first day 00:00 to yesterday 23:59 * **Overall** — from the very beginning to yesterday 23:59 * **Curmonth** — from the first day of the current month 00:00 to yesterday 23:59 *** **File format** The file format in which the report is generated. Possible options: * HTML * XLSX * CSV *** **Name** The name assigned to the report. *** **Mail to** The email addresses to which a link to download the report is sent. *** **Last run** The date and time when the report was last run and sent to a specified email address. *** **Active** The report status: * **Active** — indicates that the report is run and sent on schedule * **Inactive** — indicates that the report is disabled To view the report details, click the **Edit** button. ## Details [#details] The following additional fields are displayed on the details page: **Class** The report type. One or more report types can be selected. Possible options: * **Client Finance Report** — shows the amount of deposits, withdrawals and net deposits (the difference between total deposits and total withdrawals) made by each client over a specified time period, in corresponding currencies and in conversion to USD. The report includes the following fields: **Email**, **Verification Level**, **Currency**, **Deposit**, **Withdraw**, **(D - W)**, **(Deposit, USD)**, **(Withdraw, USD)** and **(Deposit - Withdrawal, USD)**. * **Transaction Finance Report** — contains detailed information on all transactions executed over a specified time period. The report includes various fields, such as **ID**, **Account ID**, **Operation ID**, **Email**, **Transaction Type**, **Method**, **Source Currency**, **Source Amount**, **Type Commission**, **Final Amount**, **Target Amount**, **Target Currency**, **Transaction Exchange Rate**, **% Markup**, **Profit Markup**, **Markup Currency** and others. * **Method Finance Report** — contains detailed information on methods used for execution of deposit and withdrawal operations over a specified time period. The data is grouped by currencies (such as fiat and crypto) and includes information about the commissions and profit earned from each operation. The report includes various fields, such as **Method**, **Currency**, **Deposit**, **Withdraw**, **Source Commission**, **Final Deposit amount**, **Final Withdrawal amount**, **Profit Markup**, **Counterparty Commission**, **Profit (Counterparty commission)** and others. * **Currency Finance Report** — shows the amount of deposits, withdrawals and net deposits (the difference between total deposits and total withdrawals) made over a specified time period in a particular currency and in conversion to USD. The report includes the following fields: **Currency**, **Deposit**, **Withdraw**, **(D - W)**, **(Deposit, USD)**, **(Withdraw, USD)** and **(Deposit - Withdrawal, USD)**. * **Balances Report** — shows balance changes on client accounts over a specified time period. The data is grouped by each currency and also includes the total balance change on all client accounts in conversion to USD. The report includes the following fields: **ID**, **Email**, **Client Name**, **Internal Client Type**, **Verification Level**, **Company Name**, **Currency**, **Balance**, **Hold**, **Rate**, **(Balance, USD)**, **Previous Balance** and **(Previous Balance, USD)**. * **User In Out** — this report is similar to the **Client Finance Report**, while also containing additional fields, such as **Transfers (D-W)** and **Manual (D-W)**. * **IB Balances Report** — shows the reward amounts earned by IB partners over a specified time period, as well as the total reward amount in conversion to USD. The report includes the following fields: **ID** (the identifier assigned to an IB partner), **Email**, **Client Name**, **Internal Client Type**, **Verification Level**, **Company Name**, **Currency**, **Balance**, **Rate** and **(Balance, USD)**. * **Balances Simplified Report** — shows balances on client accounts in each currency along with the total balance on all client accounts in conversion to USD. The report includes the following fields: **Email**, **Internal Client Type**, **Currency** and **Balance**. * **LegalEntityBalancesReport** — shows balances on all live accounts of the clients that are served by a specific legal entity. *** **Start hour** The hour at which the report is run and sent to a specified email, as per the Back Office server time. The value must be in the 0 — 23 range. *** **GMT offset** The GMT offset of the local time zone to run and send the report. **See also** [How to create a report](../../how-to-articles/manage-finances/how-to-create-a-report) **Static deposits** provide a reusable and persistent way for clients to fund their wallets in B2CORE. Unlike regular one-time deposits, static deposits allow clients to use the same **static payment details** (also called **identities**) multiple times, eliminating the need to generate new payment pages with payment details for each transaction. Currently, the **B2BINPAY v3** and **Coinsbuy v3** payment systems can be configured to use static payment details. for details, refer to [How to integrate B2BINPAY](../../how-to-articles/manage-payment-methods/how-to-integrate-b2binpay-v3). ## Difference between regular deposits and static deposits [#difference-between-regular-deposits-and-static-deposits] ### Regular deposits [#regular-deposits] A **regular deposit** is a one-time transaction initiated by a client. Each deposit requires generating a new, temporary payment page with payment details. The process for regular deposits is as follows: 1. On the **Deposit** page in the B2CORE UI, the client selects their wallet, deposit currency, specifies the deposit amount, and chooses an available deposit method. 2. The client fills in the required additional fields, depending on the selected method. 3. After initiating the deposit, the client is redirected to a payment page or shown a QR code. The page has an expiration time. 4. Once the deposit is completed or expires, the payment page and its payment details can't be reused. ### Static deposit [#static-deposit] A **static deposit** uses persistent payment details generated by a client. These details remain available for repeated use and are permanently associated with that client. This approach is especially useful for crypto and bank payments, where clients may want to reuse the same crypto address or bank requisites for multiple deposits. The process for static deposits is as follows: 1. On the **Deposit** page in the B2CORE UI, the client selects their wallet, deposit currency, and chooses a deposit method that supports static deposits. 2. The client fills in the required additional fields, depending on the selected method, and generates payment details (for example, a crypto address or bank requisites). 3. The generated payment details are saved and can be reused for future deposits with different amounts. 4. The payment details don't expire and remain active as long as they exist within the selected payment system. ### Key points [#key-points] * Static payment details can be reused multiple times to deposit different amounts. * Each set of payment details is permanently associated with a specific client. * Payment details don't expire and remain valid unless explicitly deactivated. * Multiple payment details can be generated for the same payment method, allowing the client to choose which one to use. ## Unresolved requests [#unresolved-requests] On this page, you can view a list of **unresolved requests** that are created when issues occur during **static deposit** processing and the static deposit fails to be created. These requests allow the admin to track errors, identify their causes, and take actions to resolve static deposit issues. The following information is provided about each unresolved request: ### General information [#general-information] **ID** The unique identifier of the unresolved request. *** **Status** The request status: * **Unresolved** — indicates that the static deposit couldn't be created and an unresolved request was generated. * **Resolved** — indicates that the request was reviewed and manually resolved by the admin. *** **Driver** The static deposit driver via which the deposit was initiated. *** **Error code** The reason why the unresolved request was created. The table below lists possible error codes related to static deposit processing, along with their causes and configuration scenarios in which they may occur. *** **Creation date** The date and time when the request was created. To view the request details, click the **eye** icon. ### Details [#details] The details page displays extended information about the static deposit and the related error. Once the issue has been addressed, the request can be manually closed by clicking the **Resolve** button. On this page, you can find a full list of all transactions, including deposits, withdrawals, transfers, exchanges, IB rewards, and savings payments, along with their current statuses. The following information is provided about each transaction: **ID** The transaction identifier. *** **Client ID** The client identifier. *** **Type** The transaction type: * **Deposit** — adding funds to client accounts. * **Payout** — withdrawing funds from client accounts. * **Transfer** — moving funds between accounts belonging to the same client. * **Internal transfer** — transferring funds between different clients within the same B2CORE system. * **Exchange** — exchanging one currency for another between client accounts. * **Rewards** — crediting rewards from IB programs. * **Savings Payment** — interest payments from [savings programs](../savings). If you filter the **Transactions** page by type (for example, **Deposit**, **Payout**, or **Exchange**), the resulting list will match the corresponding list in [Finance > Deposits](deposits), [Finance > Payouts](payouts), or [Finance > Exchange](exchange), provided no additional filters are applied. Filtering by **Transfer** and **Internal transfer** (if enabled) will display the same list as in [Finance > Transfers](transfers), provided no additional filters are applied. *** **Source** The identifier of the source account. *** **Source account number** The number of the source account. *** **Source currency** The currency in which the source account is denominated. *** **Source amount** The transaction amount in the source currency. *** **Source commission** The commission amount charged for a transaction, in the source currency. *** **Destination** The identifier of the destination account. *** **Destination account number** The number of the destination account. *** **Destination currency** The currency in which the destination account is denominated. **Destination amount** The transaction amount in the destination currency. *** **Destination commission** The commission amount charged for a transaction, in the destination currency. *** **Status** The current [transaction status](../references/transaction-statuses). *** **Date** The date and time when a transaction was created. **See also** [How to process transactions with the Partial status](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-partial-status) [How to process transactions with the Assistance status](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-assistance-status) On this page, you can view a list of transfers made between client accounts. To view transfers made between accounts of a particular client, go to the [Transactions tab](../clients/general/transactions-tab) on the client details page. ## General information [#general-information] The following information is provided about each transfer transaction: **Operation ID** The identifier of a transfer transaction in the system. *** **Client ID** The identifier of a client from whose account funds are transferred followed by the identifier of a client to whose account funds are transferred (for example, `296 -> 296` or `118 -> 274`). *** **Client Name** The client’s name. *** **Client Email** The client’s email address. *** **Internal client type** For internal use only. The internal client profile category. *** **Jurisdiction** The [jurisdiction](../clients/jurisdictions) to which the client is assigned. *** **Type** The type of a transfer transaction: * `Transfer` – funds are transferred between accounts of the same client. * `Internal transfer` – funds are transferred from one client to another within the same B2CORE system. *** **Tags** The tags assigned to a client that are used to sort a list of transfer transactions displayed to [Back Office administrators](../system/users/). *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **From account** The number of a source account from which funds are transferred. *** **Source platform** The [platform](../products/platforms) on which a source account is opened. *** **Source type** The [type of a product](../products/products) to which a source account belongs. *** **Source amount** The transfer amount, in the currency of a source account. *** **Source currency** The currency in which a source account is denominated. *** **To account** The number of a destination account to which funds are transferred. *** **Destination platform** The [platform](../products/platforms) on which a destination account is opened. *** **Destination type** The [type of a product](../products/products) to which a destination account belongs. *** **Destination amount** The transfer amount, in the currency of a destination account. *** **Destination currency** The currency in which a destination account is denominated. *** **Status** The current [transaction status](../references/transaction-statuses). *** **Created** The date and time when a transfer was made. *** **Processed** The date and time when a transfer was processed. To view transaction details, click the **Edit** button or the number displayed in the **Operation ID** column. ## Details [#details] The following additional information is provided about each transfer transaction: **Internal client type** For internal use only. The internal client profile category. *** **Source commission** The commission, in the currency of a source account. *** **Destination commission** The commission, in the currency of a destination account. *** The following information about a client request is provided if your clients are required to submit requests for a fund transfer, which are resolved on an individual basis (approved or rejected): **Request ID** The identifier of a client request to transfer funds. *** **Resolution** The [request status](../references/client-request-statuses). *** **Reason** The reason why a request was rejected. **See also** [How to create a transfer](../../how-to-articles/manage-finances/how-to-create-a-transfer) ## Providers [#providers] On this page, you can view a list of connections to SMTP service providers and configure new connections. It's important to select SMTP providers that offer unrestricted daily email sending, such as [Mailchimp](https://mailchimp.com/), [SendGrid](https://sendgrid.com/), or [Mailgun](https://www.mailgun.com/). **Unsuitable SMTP providers** Providers that impose daily email sending limits aren't suitable for SMTP configuration. These services are typically designed for personal or small-scale usage and can't meet the demands of extensive mailing lists. Examples of such providers include: Gmail, Yahoo Mail, Outlook (Hotmail), iCloud Mail, AOL Mail, Zoho Mail (free version), Yandex Mail, Proton Mail, GMX Mail, or Mail.ru. ### General information [#general-information] The following information is provided about each SMTP connection: **ID** The identifier assigned to the connection. *** **Caption** The named assigned to the connection in the Back Office. *** **Driver** The driver used for sending emails (smtp). *** **Host** The SMTP host. *** **Port** The SMTP port number. *** **Username** The SMTP username that is used for authentication. *** **Send from** The sender’s email address displayed to your email recipients. *** **Send from name** The sender’s name displayed to your email recipients. **See also** [How to configure SMTP](../../how-to-articles/manage-mailing-options/how-to-configure-smtp) *** **Encryption** The encryption protocol used to securely communicate with the SMTP service provider. Possible options: * TSL * SSL *** **Enabled** The connection status. If `true`, the connection is enabled; otherwise, `false`. If the only connection to an SMTP service provider is configured, it can’t be disabled. To view the connection details, click the **Edit** button. ### Details [#details] On the details page, the masked **Password** field is displayed in addition to the general information. To validate the connection settings, click the **Test connection** button. A green checkmark displayed on the button indicates that the connection has been configured properly. ## Queue [#queue] On this page, you can view the queue of unsent emails and delete them if necessary. **ID** The email identifier in the system. *** **Email** The email address. *** **Subject** The email subject. *** **Last attempt date** The date of the last attempt to send the email. *** **Next attempt date** The date of the next attempt to send the email. *** **Attempts count** The number of attempts to send the email. *** **Status** The status indicating the result of an email send attempt. *** **Reason** The reason for an unsuccessful attempt. ## Templates [#templates] On this page, you can view a list of email templates used for system mailing and override them if necessary. **Name** The template name. *** **Template ID** The template identifier in the system. *** **Recipient** The recipient type for which the template is used. *** **Enabled** Indicates whether the template is enabled. *** **Status** Indicates whether the default template is used or has been overridden. *** **Last Modified** The date and time when the template was last modified. To customize a template, click the **Override** button. ## Template Chunks [#template-chunks] On this page, you can view a list of reusable email template parts — layouts and chunks (such as the header and footer) — that are shared across email templates, and override them if necessary. **Name** The name of a layout or chunk. *** **Type** The type of the template part: `Layout` or `Chunk`. *** **Status** Indicates whether the default template part is used or has been overridden. *** **Last Modified** The date and time when the template part was last modified. To customize a layout or chunk, click the **Override** button. ## Log [#log] On this page, you can view the mailing log. **ID** The email identifier in the system. **Active queue ID** The identifier of the queue in which the email is included. **Email** The client email address. **Subject** The email subject. **Attempt date** The date and time of the last attempt to send the email. **Status** The email delivery status (the available options: IN PROGRESS, FAIL, and SUCCESS). **Reason** The reason why the email delivery failed. On this page, you can view a list of created product groups and create new ones. Product groups help organize multiple [products](products) into categories and determine how they are displayed to clients in the B2CORE UI, ensuring a structured presentation. ## General information [#general-information] The following information is provided about each product group: **ID** The identifier of the product group. *** **Priority** The priority index assigned to the product group. *** **Caption** The product group caption. This caption will be assigned to the product group in the Back Office and will be visible to clients in the B2CORE UI. To view product group details, click the **Edit** button. ## Details [#details] On the details page, you can view the following additional information: **Description** The description of the product group. *** **Type** The type of the product group. The possible types include the `Default`, `Payment account` types, and others. On this page, you can view a list of configured platforms and create new ones. Platforms in B2CORE facilitate connections to external systems and trading platforms, enabling seamless data transmission and request processing, ensuring that data in B2CORE stays synchronized with the data on the respective external platform. ## General information [#general-information] The following information is provided about each platform: **ID** The platform identifier. *** **Caption** The platform name displayed on other Back Office pages. *** **Name** The unique platform name used in the Back Office. *** **Platform** The name of the platform to which the connection is configured. *** **Status** The platform status: `Enabled` or `Disabled`. To view platform details, click the **Edit** button. ## Details [#details] The following information is provided on the details page: **Name** The unique platform name used in the Back Office. *** **Caption** The platform name displayed on other Back Office pages. *** **Short caption** The short name of the platform. This field is optional. *** **Status** The platform status: `Enabled` or `Disabled`. *** **Demo** Indicates if the platform is intended for demo or live accounts: * `Yes` — the platform is intended for *demo* accounts. Clients can open demo accounts via the B2CORE UI using the products created based on the given platform. * `No`— the platform is intended for *live* accounts. Clients can open live accounts via the B2CORE UI using the products created based on the given platform. *** **Income transfer request** Specifies if client requests for transfers to platform accounts via the B2CORE UI are enabled: * `Yes` — client requests for transfers to platform accounts via the B2CORE UI are enabled. * `No` — transfers to platform accounts via the B2CORE UI are made without requests. *** **Outcome transfer request** Specifies if client requests for transfers from platform accounts via the B2CORE UI are enabled: * `Yes` — client requests for transfers from platform accounts via the B2CORE UI are enabled. * `No`— transfers from platform accounts via the B2CORE UI are made without requests. *** Depending on the platform, either the **Settings** or **External connection** section is displayed. Both sections are used to establish connections to respective platforms. The set of connection parameters depend on the platform. **External connection** In this section, you can click the **Set connection** button to select for the platform a connection that has been previously configured in **Systems** > **External connections**, or use the **Click to edit connection** button to navigate to the connection configuration and modify the connection parameters. *** **Settings** In this section, specify the connection parameters required for the platform. *** **Test connection** Click the **Test connection** button to validate the connection settings. The green button indicates that the connection has been configured properly. The red button indicates that some connection settings aren’t valid. The errors displayed below the button specify the connection issues that need to be addressed. ## MetaTrader 4/5 [#metatrader-45] Connections to MT4 and MT5 are established within B2CORE via the internal WEBAPI service, eliminating the need to create connections in **System** > **External Connections**. The following settings must be specified in the platform details for MT4 and MT5: ### MetaTrader connection [#metatrader-connection] **Host** The IP address and port number for accessing the MT server. *** **Login** The login used to access the MT Manager. *** **Password** The password used to access the MT Manager. *** ### WEBAPI connection [#webapi-connection] The WEBAPI connection settings are provided by your account manager. **Host** The domain name and port number for accessing WEBAPI. *** **Access token** The token used to access WEBAPI. *** ### **Settings** [#settings] **Max inactivity days** The number of days after which a trading account will be archived if no activity is detected during that period. *** **Use number settings** The setting is disabled by default. *** **Web Terminal URL** The URL of the web trading terminal. When specified, the **Trade** button will appear on account cards for the respective platform in the B2CORE UI and mobile app, enabling clients to navigate to trading with a single click (for details, refer to [How to enable one-click trading access from the B2CORE UI and mobile app](../../how-to-articles/manage-platforms/how-to-enable-one-click-access-to-web-trading-terminals)). *** **Use reporting on the platform** The setting is enabled by default. If enabled, the MT4/5 account will be created with the **Send reports** option activated on the respective platform. If disabled, this option will be inactive for accounts created via B2CORE. **See also** [How to integrate MetaTrader 4/5](../../how-to-articles/manage-platforms/how-to-intergate-mt) On this page, you can view a list of all products and general information about them. Products in B2CORE define the process of creating wallets and trading accounts in B2CORE and on respective external platforms, while also specifying the settings applied to those accounts. Each product is linked to a [platform](platforms) in B2CORE, which in turn connects to an external platform, such as MetaTrader 4/5, cTrader, or other supported platforms, ensuring seamless data synchronization. ## General information [#general-information] The following information is provided about each product: **ID** The product identifier that is automatically generated by the system. *** **Name** The product name used in the Back Office. *** **Caption** The product name that is displayed in the B2CORE UI. *** **Platform** The [platform](platforms) on which the product is available. *** **Group** The [group](groups) in which the product is included. *** **Type** The type of the product. The product can be of one of the following types: * **Personal** * **Trade** * **Demo** * **Partner** * **External** *** **Currency** One or more currencies added for the product. *** **Status** The product status: * **Disabled** — the product is inactive and is not displayed in the B2CORE UI. Product-associated accounts cannot be created. All new products are assigned this status upon creating. * **Present** — the product is not displayed in the B2CORE UI. Product-associated accounts can be created only in the Back Office. * **Hidden** — the product is not displayed in the B2CORE UI. Product-associated accounts can be created only in the Back Office. * **Enabled** — the product is active. * **Default** — the product is displayed in the B2CORE UI. Product-associated accounts can be created in the Back Office or in the B2CORE UI. To view the product details, click the **Edit** button. When creating a product, you also specify the **Factory** value: set it to `100` to denominate product-associated accounts in currency subunits (for example, cents); otherwise, set it to `1`. The **Factory** value of `100` can't be used with platforms that don't support accounts in currency subunits, such as **eWallets**, **PrimeXM**, **Centroid**, and **OneZero**. ## Details [#details] The details page is grouped into three tabs: **Info**, **Currencies**, and **Detailed information**. ### Info tab [#info-tab] The tab contains general product settings: **Leverage** One or more leverage ratios assigned to the product. *** **Default leverage** The default leverage ratio assigned to product-associated accounts that are created after the **Autocreation on login** option is triggered. *** **Group rights** A group of permissions for the selected users. *** **Rights** and **Default account rights** Permissions assigned to accounts opened based on the product. The default rights are applied to accounts that are automatically created when clients sign in to the B2CORE UI for the first time. To create accounts upon initial sign-in to the B2CORE UI, enable the option **Autocreation on login**. For a list of possible permissions, refer to [Product permissions](../references/product-permissions). *** **Max accounts** The maximum number of accounts that a client can create for each currency added to the product. For example, if `USD` and `EUR` are added as currencies to a product and the **Max accounts** option is set to **1**, the client can create one account in `USD` and one account in `EUR` based on this product. * To apply no limits on the number of accounts that can be created based on the product, enter **-1**. * To forbid clients to create accounts, specify **0**. The **Max accounts** limit is applied independently to each product and doesn't overlap with limits set for other products. *** **Mail** The settings for email notifications. Possible option: * **Default** or **Send** — to automatically send email notifications to clients when new trading accounts are created, including credentials and details needed to start trading. * **Don't send** — to disable email notifications for new accounts. For example: * For **MT** products, use **Default** and the `accountCreated` template in the **Mail template** field. * For **cTrader** products use **Don't send** to prevent email notifications when creating cTrader accounts through B2CORE. This is because all cTrader accounts are linked to a single cTrader ID, with one password for that ID. *** **Mail template** The email notification template. *** **Start amount**\ *Applicable only for demo accounts* The initial balance on demo accounts. *** **Priority** The sequence number of the product in the list. *** **Agreement link** A link to a document to which a client must consent in order to open an account via the B2CORE UI. *** **Link info** A link to a resource providing additional information about a product, which a client can click when creating an account via the B2CORE UI. *** **Request required** If `Yes`, an administrator approval in the Back Office is required to open a new account in the B2CORE UI. *** **Min deposit amount (USD)** The minimum deposit amount, in USD, required for accounts opened based on the product. A client can deposit the entire amount at once or can make several deposits to add the required amount to the account. After the minimum deposit requirement is met, the account becomes available to the client. *** **Autocreation on login** If `Yes`, a product-associated account is created automatically for each client upon initial sign-in to the B2CORE UI. *** **Account number prefix**\ *Applicable only for DXtrade products* The prefix added to the beginning of DXtrade account numbers, which helps distinguish, for example, live and demo accounts or accounts belonging to different brands within one DXtrade infrastructure. The maximum prefix length is 14 characters. The prefix is applied only to new accounts created based on the product. Existing accounts remain unchanged. *** **First transfer activation**\ *Applicable only for MT5 products* If `Enabled`, MT5 accounts are created without the **Trade enabled** permission. This permission is granted to clients upon the first successful transfer to the account. *** **Agent account**\ *Applicable only for MT products* The number of the agent account associated with the product. An agent account is a special non-trading account on MT4/5 used for IB and partner commission calculations, when IB logic is managed on the MT4/5 server instead of using [B2CORE IB](https://docs.ib.b2core.b2broker.com/). When specified in the product settings, the agent account will be applied to and displayed in accounts created based on the product on the corresponding MT4/5 platform. *** **Account type**\ *Applicable only for cTrader products* The account type: Hedged or Netted. *** **Margin calculation type**\ *Applicable only for cTrader products* The type of total margin requirements per symbol applied to cTrader accounts upon creation. This type can’t be changed after the account has been created. Possible options: * **Max** — total margin requirements per symbol are the maximum margin requirements from all long and short positions of that symbol * **Sum** — total margin requirements per symbol are the sum of all margin requirements of all positions of that symbol * **Net** — total margin requirements per symbol are the difference between the margin requirements of all long and short positions of that symbol If no margin calculation type is selected, the default cTrader type will be applied. *** The fields **Min account number**, **Max account number**, and **Last number** aren't available for product configuration by default. They can be enabled upon request through your account manager and the B2CORE development team. **Min account number**\ *Applicable only for MT products* The minimum account number that can be assigned to accounts created on the corresponding MT4/5 platform via B2CORE, whether through the Back Office, B2CORE UI, or mobile app. *** **Max account number**\ *Applicable only for MT products* The maximum account number that can be created on the corresponding MT4/5 platform, via B2CORE, whether through the Back Office, B2CORE UI, or mobile app. Together, the **Min account number** and **Max account number** options define the range within which account numbers are assigned to new accounts created on the corresponding MT4/5 platform via B2CORE. *** **Last number**\ *Applicable only for MT products* Displays the number of the most recently created account on the corresponding MT4/5 platform via B2CORE. This value is updated automatically as new accounts are created through B2CORE until the specified **Max account number** is reached. Use this field to track the current position in the account numbering sequence. You can edit the **Last number** filed to specify the correct last account number if one or more accounts were created directly on the platform rather than via B2CORE. When new accounts are created via B2CORE, the account number is calculated as `Last number + 1` to avoid using an already existing number. If the generated number already exists, B2CORE will attempt to increment it by one and retry, up to **four times**. After four failed attempts, an error will be displayed, which must be resolved manually. ### Currencies tab [#currencies-tab] The tab contains a list of product currencies for multi-currency accounts: **ID** The product currency identifier. *** **Currency** The alphabetic code of the currency *** **Caption** The currency name displayed in the B2CORE UI. *** **Status** The currency status in the product: **Enabled** or **Disabled**. ### Actions [#actions] Click the **Actions** button in the upper-right page corner to set the following restrictions for the product account: **Country restrictions** Grant or restrict access to the product account by country: * Select **Type** — **Deny only** or **Allow only**. * From the **Rules** dropdown, select the name of the country from which the access to the account is allowed or restricted. * Click **Save**. *** **Client type restriction** Grant or restrict access to the product account by client type: * Select **Type** — **Deny only** or **Allow only**. * From the **Rules** dropdown, select the client type. * Click **Save**. *** **Verification Auto-Create** Grant or restrict access to the product account by the verification level: * Select **Type** — **Deny only** or **Allow only**. * From the **Rules** dropdown, select the client verification level. * Click **Save**. *** **Introducing broker restrictions** Grant or restrict access to the product for the clients of a particular IB partner: * Select **Enabled** — **Yes** or **No**. * Select **Type** — **Allow only** or **Deny only**. * In the **Rules** field, specify the client identifier assigned to the IB partner. You can add one or more clients to the list. * Click **Save**. If you select the **Allow only** option, you *grant* access to the product only to the IB clients of the specified partners. The IB clients of other partners cannot access this product. If you select the **Deny only** option, you *restrict* access to the product only for the IB clients of the specified partners. The IB clients of other partners can access this product. **See also** [How to create a wallet](../../how-to-articles/manage-products/how-to-create-a-wallet) On the **Rights** page, you can view a list of permission groups configured for products, and create new groups. A permission group includes a set of permissions that can be assigned to [products](products). When configuring product settings, select a permission group to assign the product all the permissions included in this group. ## General information [#general-information] The following information is provided about each permission group: **ID** The identifier of the permission group. *** **Name** The name of the permission group. *** **Status** If **Enabled**, the permission group can be selected in the **Group rights** field on the product details page. To view permission group details, click the **Edit** button. ## Details [#details] The following additional information is provided about each permission group: **Rights** A list of the permissions included in the permission group. On this page, you can view all configured announcements and create new ones. Announcements can be **required**, blocking further interaction with the B2CORE UI until clients perform the required action, or **optional**, which are displayed when clients clicks the **Announcements** icon in the topbar of the B2CORE UI. ## General information [#general-information] The following information is provided about each announcement: **ID** The announcement identifier. *** **Type** The announcement type indicating whether the announcement requires client action: * **Required** — an announcement includes a button and blocks further interaction with the B2CORE UI until the client clicks the button. * **Optional** — an announcement is displayed upon clicking the **Announcements** icon in the topbar of the B2CORE UI and doesn't require client action. *** **Title** The announcement title. *** **Text** The announcement body text. *** **Button Text**\ *Applicable only to announcements of the Required type* The button label. *** **Targeted Emails** A list of client email addresses to whom the announcement will be shown. *** **Enabled** If set to `Yes`, the announcement is active and displayed to targeted clients. To view the announcement details, click the **Edit** button. ## Details [#details] On the details page, you can view and edit the announcement fields, including: **Button Text** The text displayed on the button shown in the announcement. *** **Button URL** The URL to which clients are redirected after clicking the button displayed in the announcement. For announcements of the **Optional** type, the **Close** button is shown. If a button URL is specified, clients will be redirected to that URL when they click the **Close** button. *** **Due to Date** The date until which the announcement is displayed to clients. Detailed information also contains the additional **Announcement reactions** section. This section lists clients who interacted with the announcement, including: * Clients who clicked the button (for announcements of the **Required** type). * Clients who opened the announcement by clicking the **Announcements** icon in the topbar of the B2CORE UI (for announcements of the **Optional** type). * The date and time of each interaction. **See also** [How to create an announcement](../../how-to-articles/manage-advertising-options/how-to-create-an-announcement) On this page, you can view a list of configured banners and create new ones. Use banners for advertising or informing your clients about important news, events, or service updates. You can create multiple banners and display them on various pages of the B2CORE UI and in the mobile app or mobile browsers. You can add a button containing a URL to an external resource onto a banner. Upon clicking the button, the specified URL is opened. Banners can be configured to display to clients based on selected **countries**, **verification levels**, **client types**, and **jurisdictions**. ## General information [#general-information] The following information is provided about each banner: **ID** The banner identifier. *** **Caption Light** The banner title specified for the light theme. *** **Caption Dark** The banner title specified for the dark theme. Specifying banner titles is optional. You can leave these fields empty and create a banner without a title. *** **Created at** The date and time when a banner was created. *** **Created by** The email of a Back Office user who created a banner. *** **Banner URL** The URL tail defining a page on which a banner is displayed in the B2CORE UI (for example, `/dashboard`, `/wallets`, `funds/deposit`, or other). In the mobile app, all banners will be displayed at the top of the **Home** screen. *** **Banner Priority** The order in which banners are displayed in the B2CORE UI or mobile app if more than one banner is configured. *** **Banner Type** The banner type: **Desktop** or **Mobile**. *** **Enabled** If `Yes`, a banner is displayed to clients in the B2CORE UI or mobile app; otherwise, `No`. To view banner details, click the **Edit** button. ## Details [#details] On the details page, you can switch between the following tabs: **Banner** On this tab, you can adjust banner settings. The settings available for desktop and mobile banner types are different. *** **Light** On this tab, you can adjust banner settings for the light theme. *** **Dark** On this tab, you can adjust banner settings for the dark theme. To apply country or verification level restrictions to the banner, click the **Actions** button in the upper-right page corner, and then select one of the following options: * **Country restrictions** — to display the banner only to clients from specific countries. * **Verification level restriction** — to display the banner only to clients with specific verification levels. **See also** [How to create a banner](../../how-to-articles/manage-advertising-options/how-to-create-a-banner) [How to restrict banner display by country and verification level](../../how-to-articles/manage-advertising-options/how-to-create-a-banner#how-to-restrict-banner-display-by-country-and-verification-level) On this page, you can view a list of available widgets and customize their display on the **Dashboard** page of the B2CORE UI. **ID** The identifier of the widget in the system. *** **Caption** The widget name. *** **Order** The sequence number of the widget in the B2CORE UI. *** **Sort Actions** The arrow buttons in this column are used to change the order of the widgets (using sequence numbers in the **Order** column). *** **Show by default** Indicates whether a widget is displayed on the client dashboard by default. *** **Delete** If the toggle is on, the widget in the B2CORE UI has a close button to temporarily close the widget (until the page is refreshed or the **Dashboard** is reset). **See also** [How to configure the default Dashboard](../../how-to-articles/manage-advertising-options/how-to-configure-the-default-dashboard) [How to add Ticker Widget symbols to the Dashboard](../../how-to-articles/manage-advertising-options/how-to-add-ticker-widget-symbols-to-the-dashboard) On this page, you can customize the menu displayed to your clients in the B2CORE UI, including the option to add custom menu items used to redirect clients to third-party external resources or web pages for additional functionality. To view a list of available menu items, click the **eye** icon located in the **General** row. ## General information [#general-information] The following information is provided about each menu item: **ID** The identifier of a menu item. *** **Name** The menu item name used in the Back Office. *** **Caption** The menu item name displayed in the B2CORE UI. *** **Type** The type of a menu item: * **default** — a pre-defined menu item associated with specific B2CORE functionality. These items can't be removed but can be hidden from the menu in the B2CORE UI or mobile app. * **custom** — a custom menu item that redirects clients to a specified URL for additional functionality. These items can be removed or hidden from the menu in the B2CORE UI and mobile app. *** **New** If `Yes`, a menu item is marked with the "New" label in the B2CORE UI. *** **Visible** Indicates whether a menu item is visible or hidden in the B2CORE UI: * The **active toggle** means that a menu item is visible in the B2CORE UI menu. * The **inactive toggle** means that a menu item is hidden from the B2CORE UI menu. To change the order in which menu items are displayed in the B2CORE UI, drag and drop them in the required order. To view menu item details, click the **Edit** button. ## Details [#details] On the details page, you can configure the following options: **Verification level allowance** A list of [verification levels](../verification/levels), indicating that a menu item is visible only to clients that obtained the specified levels. *** **Client Type Allowance** A list of [client types](../clients/types), indicating that a menu item is visible only to clients that are assigned the specified types. **See also** [How to configure a menu in the B2CORE UI](../../how-to-articles/manage-advertising-options/how-to-configure-a-menu-in-the-b2core-ui) [How to add custom menu items](../../how-to-articles/manage-advertising-options/how-to-add-custom-menu-items) The following statuses can be assigned to client requests: * **Pending** — identifies that a request was sent by a client but hasn't yet been processed by the admin. * **Approved** — identifies that a request was approved by the admin. * **Rejected** — identifies that a request was rejected by the admin. The following statuses can be assigned to client profiles: * **Active** — identifies a normal state. A client can sign in to the B2CORE UI. * **Inactive** — identifies registration issues. A client cannot sign in to the B2CORE UI. * **Banned** — identifies that a client is prohibited to sign in to the B2CORE UI. * **Deleted** *(deprecated)* — this status is no longer in use and shouldn’t be assigned. The following is a list of pre-configured email types used to notify clients and [Back Office users](../system/users/users), such as admins or managers, about specific system events. Each type is linked to an email template that can be customized in multiple languages and is used to send notifications via email. For every email type, usage conditions are specified in the **Description** column. For email types related to notifications about events on B2COPY, refer to the [B2COPY product documentation](https://docs.b2copy.b2broker.com/admin-guide/configure-b2copy/use-email-templates-to-notify-clients-about-important-events). ## To clients [#to-clients] The following is a list of email types used to notify clients: ## To Back Office users [#to-back-office-users] The following is a list of email types used to notify Back Office users, such as admins or managers: The following is a list of event types supported for delivering [event notifications](../system/event-notifications) to [Back Office users](../system/users/) via email, SMS, Slack, or Telegram. If pre-configured templates for sending notifications via email, Slack, or Telegram are available for a specific event type, the template names are indicated in the **Template** column. For event types without pre-configured templates, custom templates should be created. Following is a list of permissions that can be assigned to [products](../products/products) when configuring product settings in the Back Office. * **Enabled** — if selected, the accounts created based on the product are enabled. * **Trade enabled** — if selected, clients can trade on the accounts. * **Deposit** — if selected, clients can make deposits to the accounts. * **Withdraw** — if selected, clients can make withdrawals from the accounts. * **Visible** — if selected, the accounts are displayed in the B2CORE UI or in the mobile app. * **Transfer deposit** — if selected, clients can transfer funds to the accounts. * **Transfer withdraw** — if selected, clients can transfer funds from the accounts. * **Exchange** — if selected, clients can make exchanges on the accounts. * **Create from TR denied** — if selected, clients can’t create accounts in the B2CORE UI or in the mobile app; however, they can use the accounts that were created automatically after their first sign in to the B2CORE UI or created for them by the admin via the Back Office. The following is a list of cryptocurrency payment methods supported in B2CORE. In method names consisting of two codes separated by a dash, such as `USDT-ETH`, the first code indicates a cryptocurrency in which transactions are made and the second code indicates a blockchain on which transactions are initiated and stored. For each method, you can find an icon that can be displayed as the icon of a deposit or payout method in the B2CORE UI. The icons are used to easily identify payment methods. To add an icon to a [deposit](../system/deposit-system#deposit-methods) or [payout method](../system/payout-system#payout-methods), enter the icon name, such as `usdt-eth`, in the **Icon** field when configuring the method. ## Coins [#coins] | Icon | Method | Icon name | | -------------------------------------------------- | -------- | ------------ | | | BCH | bch | | | BTC | btc | | | DASH | dash | | | DOGE | doge | | | ETH | eth-etherium | | | ETH-ARB | eth-arb | | | ETH-BASE | eth-base | | | LTC | ltc | | | TRX | trx | | | XLM | xlm-stellar | | | XMR | xmr | | | XRP | xrp | | | ZEC | zec | ## Stablecoins [#stablecoins] | Icon | Method | Icon name | | --------------------------------------------------- | ------------- | ------------- | | | BUSD-BSC | busd-bsc | | | BUSD-T-BSC | busd-t-bsc | | | BUSD-ETH | busd-eth | | | DAI-BSC | dai-bsc | | | DAI-ETH | dai-eth | | | USDC-ARB | usdc-arb | | | USDC-AVAX | usdc-avax | | | USDC-BSC | usdc-bsc | | | USDC-ETH | usdc-eth | | | USDC-SOL | usdc-sol | | | USDC-TRX | usdc-trx | | | USDP-BSC | usdp-bsc | | | USDP-ETH | usdp-eth | | | USDT-ARB | usdp-arb | | | USDT-AVAX | usdt-avax | | | USDT-BNB | usdt-bnb | | | USDT-BSC | usdt-bsc | | | USDT-ETH | usdt-eth | | | USDT-OMNI | usdt-omni | | | USDT-Optimism | usdt-optimism | | | USDT-SOL | usdt-sol | | | USDT-TON | usdt-ton | | | USDT-TRX | usdt-trx | | | UST-BSC | ust-bsc | | | UST-ETH | ust-eth | | | TUSD-ETH | tusd-eth | ## Tokens [#tokens] | Icon | Method | Icon name | | ------------------------------------------------ | ---------- | ---------- | | | 1INCH-BSC | 1inch-bsc | | | 1INCH-ETH | 1inch-eth | | | AAVE-ETH | aave-eth | | | AKRO-ETH | akro-eth | | | ALPHA-ETH | alpha-eth | | | ALPHA-BSC | alpha-bsc | | | AMP-ETH | amp-eth | | | AUDIO-ETH | audio-eth | | | AXS-ETH | axs-eth | | | BADGER-ETH | badger-eth | | | BAL-ETH | bal-eth | | | BAND-BSC | band-bsc | | | BAND-ETH | band-eth | | | BAT-BSC | bat-bsc | | | BAT-ETH | bat-eth | | | BZRX-ETH | bzrx-eth | | | CAKE-BSC | cake-bsc | | | CEL-ETH | cel-eth | | | CHR-ETH | chr-eth | | | CHZ-ETH | chz-eth | | | COMP-ETH | comp-eth | | | CRV-ETH | crv-eth | | | ENJ-ETH | enj-eth | | | FET-ETH | fet-eth | | | FTM-BSC | ftm-bsc | | | FTM-ETH | ftm-eth | | | FTT-ETH | ftt-eth | | | GRT-ETH | grt-eth | | | HOT-ETH | hot-eth | | | LEO-ETH | leo-eth | | | LINK-BSC | link-bsc | | | LINK-ETH | link-eth | | | LRC-ETH | lrc-eth | | | MANA-ETH | mana-eth | | | MATIC-ETH | matic-eth | | | MKR-BSC | mkr-bsc | | | MKR-ETH | mkr-eth | | | NU-ETH | nu-eth | | | OCEAN-ETH | ocean-eth | | | OMG-ETH | omg-eth | | | QNT-ETH | qnt-eth | | | RARI-ETH | rari-eth | | | REEF-BSC | reef-bsc | | | REEF-ETH | reef-eth | | | REN-ETH | ren-eth | | | REV-ETH | rev-eth | | | RSR-ETH | rsr-eth | | | SAND-ETH | sand-eth | | | SHIB-ETH | shib-eth | | | SNX-BSC | snx-bsc | | | SNX-ETH | snx-eth | | | SRM-ETH | srm-eth | | | SUSHI-BSC | sushi-bsc | | | SUSHI-ETH | sushi-eth | | | SXP-BSC | sxp-bsc | | | SXP-ETH | sxp-eth | | | TEL-ETH | tel-eth | | | UNI-BSC | uni-bsc | | | UNI-ETH | uni-eth | | | YFI-BSC | yfi-bsc | | | YFI-ETH | yfi-eth | | | ZRX-ETH | zrx-eth | The tables below list the crypto- and fiat currencies supported in B2CORE. The ISO code, Alpha code, decimal precision, and icon (if available) are specified for each currency. The icons are used for graphical representation of currencies in the B2CORE UI. ## Fiat [#fiat] | Icon | ISO code | Alpha code | Precision | Name | | ----------------------------------------------------------- | -------- | ---------------- | --------- | ---------------------------------------------------------- | | | 8 | ALL | 2 | Albanian lek | | | 12 | DZD | 2 | Algerian dinar | | | 32 | ARS | 2 | Argentine peso | | | 36 | AUD | 2 | Australian dollar | | | 44 | BSD | 2 | Bahamian dollar | | | 48 | BHD | 3 | Bahraini dinar | | | 50 | BDT | 2 | Bangladeshi taka | | | 51 | AMD | 2 | Armenian dram | | | 52 | BBD | 2 | Barbados dollar | | | 60 | BMD | 2 | Bermudian dollar | | | 64 | BTN | 2 | Bhutanese ngultrum | | | 68 | BOB | 2 | Boliviano | | | 72 | BWP | 2 | Botswana pula | | | 84 | BZD | 2 | Belize dollar | | | 90 | SBD | 2 | Solomon Islands dollar | | | 96 | BND | 2 | Brunei dollar | | | 104 | MMK | 2 | Myanmar kyat | | | 108 | BIF | 0 | Burundian franc | | | 116 | KHR | 2 | Cambodian riel | | | 124 | CAD | 2 | Canadian dollar | | | 132 | CVE | 0 | Cape Verde escudo | | | 136 | KYD | 2 | Cayman Islands dollar | | | 144 | LKR | 2 | Sri Lankan rupee | | | 152 | CLP | 0 | Chilean peso | | | 156 | CNY (alias: CNH) | 2 | Chinese yuan | | | 170 | COP | 2 | Colombian peso | | | 174 | KMF | 0 | Comoro franc | | | 188 | CRC | 2 | Costa Rican colon | | | 191 | HRK | 2 | Croatian kuna | | | 192 | CUP | 2 | Cuban peso | | | 203 | CZK | 2 | Czech koruna | | | 208 | DKK | 2 | Danish krone | | | 214 | DOP | 2 | Dominican peso | | | 222 | SVC | 2 | Salvadoran colón | | | 230 | ETB | 2 | Ethiopian birr | | | 232 | ERN | 2 | Eritrean nakfa | | | 238 | FKP | 2 | Falkland Islands pound | | | 242 | FJD | 2 | Fiji dollar | | | 262 | DJF | 0 | Djiboutian franc | | | 270 | GMD | 2 | Gambian dalasi | | | 292 | GIP | 2 | Gibraltar pound | | | 320 | GTQ | 2 | Guatemalan quetzal | | | 324 | GNF | 0 | Guinean franc | | | 328 | GYD | 2 | Guyanese dollar | | | 332 | HTG | 2 | Haitian gourde | | | 340 | HNL | 2 | Honduran lempira | | | 344 | HKD | 2 | Hong Kong dollar | | | 348 | HUF | 2 | Hungarian forint | | | 352 | ISK | 0 | Icelandic króna | | | 356 | INR | 2 | Indian rupee | | | 360 | IDR | 2 | Indonesian rupiah | | | 364 | IRR | 2 | Iranian rial | | | 365 | IRT | 2 | Iranian Toman | | | 368 | IQD | 3 | Iraqi dinar | | | 376 | ILS | 2 | Israeli new shekel | | | 388 | JMD | 2 | Jamaican dollar | | | 392 | JPY | 0 | Japanese yen | | | 398 | KZT | 2 | Kazakhstani tenge | | | 400 | JOD | 3 | Jordanian dinar | | | 404 | KES | 2 | Kenyan shilling | | | 408 | KPW | 2 | North Korean won | | | 410 | KRW | 0 | South Korean won | | | 414 | KWD | 3 | Kuwaiti dinar | | | 417 | KGS | 2 | Kyrgyzstani som | | | 418 | LAK | 2 | Lao kip | | | 422 | LBP | 2 | Lebanese pound | | | 426 | LSL | 2 | Lesotho loti | | | 430 | LRD | 2 | Liberian dollar | | | 434 | LYD | 3 | Libyan dinar | | | 440 | LTL | 2 | Lithuanian Litas | | | 446 | MOP | 2 | Macanese pataca | | | 454 | MWK | 2 | Malawian kwacha | | | 458 | MYR | 2 | Malaysian ringgit | | | 462 | MVR | 2 | Maldivian rufiyaa | | | 478 | MRO | 1 | Mauritanian ouguiya | | | 480 | MUR | 2 | Mauritian rupee | | | 484 | MXN | 2 | Mexican peso | | | 496 | MNT | 2 | Mongolian tögrög | | | 498 | MDL | 2 | Moldovan leu | | | 504 | MAD | 2 | Moroccan dirham | | | 512 | OMR | 3 | Omani rial | | | 516 | NAD | 2 | Namibian dollar | | | 524 | NPR | 2 | Nepalese rupee | | | 532 | ANG | 2 | Netherlands Antillean guilder | | | 533 | AWG | 2 | Aruban florin | | | 548 | VUV | 0 | Vanuatu vatu | | | 554 | NZD | 2 | New Zealand dollar | | | 558 | NIO | 2 | Nicaraguan córdoba | | | 566 | NGN | 2 | Nigerian naira | | | 578 | NOK | 2 | Norwegian krone | | | 586 | PKR | 2 | Pakistani rupee | | | 590 | PAB | 2 | Panamanian balboa | | | 598 | PGK | 2 | Papua New Guinean kina | | | 600 | PYG | 0 | Paraguayan guaraní | | | 604 | PEN | 2 | Peruvian Sol | | | 608 | PHP | 2 | Philippine peso | | | 634 | QAR | 2 | Qatari riyal | | | 643 | RUB | 2 | Russian ruble | | | 646 | RWF | 0 | Rwandan franc | | | 654 | SHP | 2 | Saint Helena pound | | | 678 | STD | 2 | São Tomé and Príncipe dobra | | | 682 | SAR | 2 | Saudi riyal | | | 690 | SCR | 2 | Seychelles rupee | | | 694 | SLL | 2 | Sierra Leonean leone | | | 702 | SGD | 2 | Singapore dollar | | | 704 | VND | 0 | Vietnamese đồng | | | 706 | SOS | 2 | Somali shilling | | | 710 | ZAR | 2 | South African rand | | | 728 | SSP | 2 | South Sudanese pound | | | 748 | SZL | 2 | Swazi lilangeni | | | 752 | SEK | 2 | Swedish krona/kronor | | | 756 | CHF | 2 | Swiss franc | | | 760 | SYP | 2 | Syrian pound | | | 764 | THB | 2 | Thai baht | | | 776 | TOP | 2 | Tongan pa’anga | | | 780 | TTD | 2 | Trinidad and Tobago dollar | | | 784 | AED | 2 | United Arab Emirates dirham | | | 788 | TND | 3 | Tunisian dinar | | | 800 | UGX | 0 | Ugandan shilling | | | 807 | MKD | 2 | Macedonian denar | | | 810 | RUR | 2 | Russian ruble | | | 818 | EGP | 2 | Egyptian pound | | | 826 | GBP | 2 | Pound sterling | | | 834 | TZS | 2 | Tanzanian shilling | | | 840 | USD | 2 | United States dollar | | | 858 | UYU | 2 | Uruguayan peso | | | 860 | UZS | 2 | Uzbekistan som | | | 882 | WST | 2 | Samoan tala | | | 886 | YER | 2 | Yemeni rial | | | 901 | TWD | 2 | New Taiwan dollar | | | 931 | CUC | 2 | Cuban convertible peso | | | 932 | ZWL | 2 | Zimbabwean dollarA/10 | | | 933 | BYN | 2 | Belarusian ruble | | | 934 | TMT | 2 | Turkmenistan manat | | | 936 | GHS | 2 | Ghanaian cedi | | | 937 | VEF | 2 | Venezuelan bolívar | | | 938 | SDG | 2 | Sudanese pound | | | 940 | UYI | 0 | Uruguay Peso en Unidades Indexadas (URUIURUI) (funds code) | | | 941 | RSD | 2 | Serbian dinar | | | 943 | MZN | 2 | Mozambican metical | | | 944 | AZN | 2 | Azerbaijani manat | | | 946 | RON | 2 | Romanian leu | | | 947 | CHE | 2 | WIR Euro (complementary currency) | | | 948 | CHW | 2 | WIR Franc (complementary currency) | | | 949 | TRY | 2 | Turkish lira | | | 950 | XAF | 0 | CFA franc BEAC | | | 951 | XCD | 2 | East Caribbean dollar | | | 952 | XOF | 0 | CFA franc BCEAO | | | 953 | XPF | 0 | CFP franc (franc Pacifique) | | | 955 | XBA | | European Composite Unit(EURCO) (bond market unit) | | | 956 | XBB | | European Monetary Unit (E.M.U.-6) (bond market unit) | | | 957 | XBC | | European Unit of Account 9(E.U.A.-9) (bond market unit) | | | 958 | XBD | | European Unit of Account 17(E.U.A.-17) (bond market unit) | | | 959 | XAU | 2 | Gold (one troy ounce) | | | 960 | XDR | | Special drawing rights | | | 961 | XAG | 3 | Silver (one troy ounce) | | | 962 | XPT | 2 | Platinum (one troy ounce) | | | 963 | XTS | | Code reserved for testing purposes | | | 964 | XPD | 2 | Palladium (one troy ounce) | | | 965 | XUA | | ADB Unit of Account | | | 967 | ZMW | 2 | Zambian kwacha | | | 968 | SRD | 2 | Surinamese dollar | | | 969 | MGA | 1 | Malagasy ariary | | | 970 | COU | 2 | Unidad de Valor Real (UVR) (funds code) | | | 971 | AFN | 2 | Afghan afghani | | | 972 | TJS | 2 | Tajikistani somoni | | | 973 | AOA | 2 | Angolan kwanza | | | 975 | BGN | 2 | Bulgarian lev | | | 976 | CDF | 2 | Congolese franc | | | 977 | BAM | 2 | Bosnia and Herzegovina convertible mark | | | 978 | EUR | 2 | Euro | | | 979 | MXV | 2 | Mexican Unidad de Inversion (UDI) (funds code) | | | 980 | UAH | 2 | Ukrainian hryvnia | | | 981 | GEL | 2 | Georgian lari | | | 984 | BOV | 2 | Bolivian Mvdol (funds code) | | | 985 | PLN | 2 | Polish złoty | | | 986 | BRL | 2 | Brazilian real | | | 990 | CLF | 4 | Unidad de Fomento (funds code) | | | 994 | XSU | | SUCRE | | | 997 | USN | 2 | United States dollar (next day) (funds code) | | | 999 | XXX | | No currency | ## Crypto [#crypto] | Icon | ISO code | Alpha code | Precision | Name | | --------------------------------------------------------------- | -------- | ----------------- | --------- | --------------------------------------------------------- | | | 1000 | BTC (alias: XBT) | 8 | Bitcoin | | | 1002 | ETH | 18 | Ethereum | | | 1003 | LTC | 8 | Litecoin | | | 1004 | ETC | 8 | Ethereum Classic | | | 1005 | DASH (alias: DSH) | 8 | DASH | | | 1006 | BCH | 8 | Bitcoin Cash | | | 1007 | XMR | 8 | Monero | | | 1009 | PZM | 8 | Prizm | | | 1010 | XRP | 6 | Ripple | | | 1012 | XEM | 8 | XEM | | | 1015 | TFT | 8 | ThreeFold Token | | | 1018 | ADA | 8 | ADA | | | 1019 | DOGE | 8 | Dogecoin | | | 1020 | ZEC | 8 | Zcach | | | 1021 | XLM | 7 | Stellar | | | 1022 | EOS | 8 | EOS | | | 1023 | BWK | 8 | Bulwark | | | 1025 | NSD | 8 | Nasdacoin | | | 1026 | TRX | 8 | Tron | | | 1027 | FUT | 8 | FutPlayCoin | | | 1029 | MPC | 8 | MediaPlayCash | | | 1995 | XTZ | 8 | Tezos | | | 1996 | WAVES | 8 | Waves | | | 1997 | ICX | 8 | Icon | | | 1999 | BSV | 8 | Bitcoin SV | | | 2000 | B2B (alias: B2BX) | 18 | B2BX | | | 2005 | USDT | 8 | Tether | | | 2006 | EURT | 8 | Tether EUR | | | 2007 | R | 8 | Revain | | | 2008 | OMG | 8 | OmiseGO | | | 2009 | IOST | 8 | IOSToken | | | 2010 | VIU | 8 | Viuly | | | 2011 | EOS Token | 8 | EOS Token | | | 2012 | SRNT | 18 | Serenity | | | 2014 | NEO | 8 | NEO | | | 2016 | BXN | 8 | BITTXN | | | 2018 | DTC | 8 | DateCoin | | | 2020 | OLXA | 2 | OLXA | | | 2021 | PAX | 8 | PAX | | | 2022 | TUSD | 8 | TrueUSD | | | 2023 | GUSD | 8 | Gemini Dollar | | | 2024 | USDC | 8 | USD Coin | | | 2025 | BNB | 8 | Binance Coin | | | 2030 | XGT | 8 | XGT | | | 2032 | HDP | 4 | HedPay | | | 2033 | NADM | 8 | NeoAdam | | | 2034 | NOAH | 18 | NOAHCOIN | | | 2035 | TC | 8 | Titan Coin | | | 2036 | GGC | 18 | GG World Lottery | | | 2037 | SIM | 18 | Simmitri | | | 2038 | CTC | 18 | Catholic Coin | | | 2039 | MYX | 8 | Myoho | | | 2040 | CRAFTR | 18 | CraftR | | | 2041 | XRX | 8 | Global Property Register | | | 2042 | USDQ | 18 | USDQ | | | 2043 | ELLEX | 18 | Ellex Coin | | | 2044 | ANX | 8 | COINANX | | | 2045 | BNX | 8 | BTCNEXT Coin | | | 2046 | BFCL | 18 | BFCL Token | | | 2047 | ERN | 8 | EURON | | | 2048 | NWX | 8 | NIWIX Token | | | 2049 | C3W | 8 | C3 Wallet | | | 2050 | QDAO | 18 | Q DAO | | | 2051 | SPD | 18 | SPINDLE | | | 2053 | ZTX | 18 | Zulu Republic Token | | | 2054 | ITM | 8 | ITADAKI-MASU Coin | | | 2055 | DEC | 8 | Darico Ecosystem Coin | | | 2056 | KRWQ | 8 | KRWQ Stablecoin by Q DAO v1.0 | | | 2057 | NZE | 8 | Nagezeni | | | 2058 | NIOX | 8 | NIOX | | | 2060 | VEST | 8 | VestChain | | | 2061 | BKZ | 8 | Bitkruz Token | | | 2066 | FMT | 8 | Free Market Token | | | 2068 | DAI | 8 | Dai Stablecoin | | | 2070 | AZ | 8 | AZ Token | | | 2071 | B21 | 8 | B21 Token | | | 2075 | PDATA | 8 | PDATA | | | 2077 | BUSD | 8 | Binance USD | | | 2078 | ZVC | 8 | Zeven Coin | | | 2081 | ARBIS | 8 | ARBIS | | | 2083 | BII | 8 | Bitcoin 2 | | | 2084 | BDS | 8 | Bitcoin Dollar Stable | | | 2086 | BWON | 8 | Bitcoin BWON | | | 2087 | BYUN | 8 | Bitcoin BYUN | | | 2088 | NEX | 8 | NEX | | | 2090 | TEX | 8 | TEX | | | 2106 | AKRO | 18 | Akropolis | | | 2107 | ALPHA | 18 | Alpha Finance Lab | | | 2110 | BZRX | 18 | bZx Protocol | | | 2111 | CHR | 6 | Chromia | | | 2113 | MANA | 18 | Decentraland | | | 2114 | FTT | 18 | FTX Token | | | 2115 | LRC | 18 | Loopring | | | 2117 | COMP | 18 | Compound | | | 2121 | RSR | 18 | Reserve Rights | | | 2122 | SRM | 6 | Serum | | | 2123 | SHIB | 18 | SHIBA INU | | | 2126 | SNX | 18 | Synthetix | | | 2128 | SAND | 18 | The Sandbox | | | 2132 | BAND | 18 | Band Protocol | | | 2133 | BAT | 18 | Basic Attention Token | | | 2136 | SUSHI | 18 | SushiSwap | | | 2141 | YFI | 18 | yearn.finance | | | 2146 | FTM | 18 | Fantom | | | 2147 | AXS | 18 | Axie Infinity | | | 2153 | CHZ | 18 | Chiliz | | | 2160 | 1INCH | 18 | 1inch | | | 2161 | OCEAN | 18 | Ocean Protocol | | | 2947 | CAKE | 18 | PancakeSwap | | | 2949 | CRV | 18 | Curve DAO Token | | | 2956 | REN | 18 | Ren | | | 2957 | CEL | 4 | Celsius | | | 2959 | ENJ | 18 | Enjin Coin | | | 2962 | GRT | 18 | The Graph | | | 2964 | AAVE | 18 | Aave | | | 2968 | COVIP | 8 | COVIP | | | 2969 | SCAMUNKNOWN | 8 | Scam ALERT: UNKNOWN status. Audit made by Q DeFi Rating | | | 2970 | SCAMMEDIUMRISK | 8 | Scam ALERT: Medium Risk. Audit made by Q DeFi Rating | | | 2971 | SCAMHIGH | 8 | Scam ALERT: HIGH probability. Audit made by Q DeFi Rating | | | 2972 | NOAHARK | 8 | NOAH’s DeFi ARK v.1 Governance Token | | | 2973 | FLR | 8 | Spark | | | 2974 | FXRP | 8 | Spark | | | 2975 | XYM | 8 | XYM | | | 2976 | QDEFI | 8 | Q DeFi Rating & Governance token v2.0 Token | | | 2977 | T34 | 8 | Platinum Software TECHNOLOGIES | | | 2978 | CNYQ | 8 | CNYQ Stablecoin by Q DAO | | | 2979 | JPYQ | 8 | JPYQ Stablecoin by Q DAO | | | 2980 | MILK2 | 8 | MILK2 Coin | | | 2981 | SHAKE | 8 | SHAKE Coin | | | 2982 | MATIC | 8 | Matic Network | | | 2983 | ERG | 8 | Ergo | | | 2984 | LTCP | 8 | Litecoin PoS | | | 2985 | ZRX | 8 | 0x | | | 2986 | BIP | 8 | Minter | | | 2987 | ATOM | 8 | Cosmos | | | 2988 | GRAM | 8 | Telegram Open Network IOU | | | 2989 | JPYQ | 8 | JPYQ | | | 2990 | NOAHP | 8 | NOAH.platinum | | | 2991 | CC | 8 | Custom Coin | | | 2993 | SPD | 8 | Spindle | | | 2994 | OWC | 8 | ODUWA Coin | | | 2995 | NCER | 0 | NIWIX Certificate | | | 2996 | NWX | 8 | NIWIX Token | | | 2997 | ERN | 8 | EURON | | | 2998 | BFCL | 8 | BFCL Token | | | 2999 | ABBC | 8 | ABBC | | | 3007 | UMA | 18 | UMA Voting Token v1 | | | 3099 | ALICE | 6 | ALICE | The following statuses can be assigned to transactions such as deposits, withdrawals, transfers, internal transfers, and exchanges: * **New** — a transaction was created but hasn’t yet been processed. * **Pending** — indicates either that a transaction request awaits approval from the admin or that some technical issues occurred. * **Hold** *(applicable for withdrawals only)* — a requested withdrawal amount is being put on hold on a client account. * **Hold failed** *(applicable for withdrawals only)* — an error occurred when putting on hold a requested withdrawal amount. * **Refund** *(applicable for withdrawals only)* — after putting on hold a requested withdrawal amount, a transaction wasn’t further processed and the amount was successfully refunded to a client. * **Refund failed** *(applicable for withdrawals only)* — a requested withdrawal amount put on hold on a client account failed to be refunded due to technical issues. * **In progress** — a transaction is being processed. * **Done** — a transaction was successfully completed. * **Partial** — transaction processing wasn’t finished due to technical issues. Such transactions need to be addressed on the [Finance > Transactions](../finance/transactions) page (for details, refer to [How to process transactions with the Partial status](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-partial-status)). * **Assistance** — indicates that the transaction status couldn't be determined automatically and the transaction requires manual action. This status may apply only to deposits and withdrawals initiated through methods connected via [PSS](../../integrations/payment-systems#payment-system-service-pss). The admin must decide whether to continue syncing the status with the external payment system used to process the transaction or mark it as failed (for details, refer to [How to process transactions with the Assistance status](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-assistance-status)). * **Failed** — a transaction failed due to incorrect parameters. * **Rejected** — a transaction request was rejected by the admin. * **Canceled** — a transaction was canceled by a client. ## Introduction to Savings [#introduction-to-savings] Savings programs offer clients a way to invest their idle funds and earn interest by holding them on savings accounts. These programs provide a passive method to grow their crypto or fiat assets, similar to traditional bank savings accounts. ## Key points [#key-points] * Savings programs can operate based on `Fixed` and `Flexible` strategies. * In a `Fixed` strategy, clients must invest a predefined amount and earn a fixed interest rate throughout the program’s duration. These programs have a set period during which clients must hold their funds, and interest is accrued and paid according to the payment period set in a program. * The `Flexible` strategy allows clients to deposit the minimum required amount or more and make additional deposits. The interest rate is flexible and determined by tiers, which assign rates based on the invested amount. Programs with flexible strategies aren’t limited by time, and interests are accrued daily and paid to clients on the first day of each month. * To subscribe to a savings program, clients must have wallets denominated in the program currency. Earned interests are then paid to the same client wallets. * When clients subscribe to savings programs and invest the required amounts, individual savings plans are created for them, including lists of interest payments. * For both strategies, partial withdrawals are prohibited. Clients can only withdraw the full amount of invested funds, which leads to the termination of their respective savings plans. On this page, you can view a list of savings plans that are created for clients after they subscribe to savings programs. ## General information [#general-information] The following information is provided about each plan: **ID** The plan identifier. *** **Status** The plan status. *** **Strategy** The savings strategy: * `Fixed` — a fixed interest rate * `Flexible` — a flexible interest rate *** **Preset** The identifier of a preset containing settings of the savings program to which a client subscribed. Click the identifier to navigate to the preset details page and view the program settings. *** **Client** The client identifier. Click the identifier to navigate to the client details page and view information about the client. *** **Wallet account number** The identifier of a client wallet to which earned interest is paid. *** **Details** The essential settings (such as the currency, investment amount, admission fee, and cancellation penalty) of the savings program to which a client subscribed. *** **Created** The date and time when a client subscribed to a savings program. To view payment plan details, click view-button. ## Details [#details] On the details page, you can view settings of the savings program to which a client subscribed. Additionally, a list of interest payments is displayed. For `Fixed` strategies, the payments list includes scheduled payments as well as payments that have been already made to a client wallet. For `Flexible` strategies the list displays only payments made to a client. To view all interest payments made to all clients, go to [Finance > Transactions](../finance/transactions) and filter the **Type** column by **Savings Payment**. The payments in the **Done** status are listed in the **Transactions**. The following information is provided about each interest payment on the details page: **ID** The identifier of a payment transaction. *** **Amount** The interest amount. *** **Due date**\ *Applicable only for Fixed strategies* The date and time when a payment is scheduled to be made. *** **Status** The payment status: * `Scheduled` — indicates that a payment is scheduled but hasn’t yet been made * `Paid` — indicates that a payment has been made to a client * `Cancelled` — indicates that a payment was cancelled because the client decided to withdraw the investment amount before the end of the plan length (for `Fixed` strategies) or before the end of the penalty period (for `Flexible` strategies). *** **Paid date** Only for interest payments to which the `Paid` status is assigned. The date and time when interest was paid to a client. On this page, you can view a list of presets with savings program settings, modify them, and create new ones. Presets can’t be deleted but can be disabled by changing their status to **Inactive**. ## General information [#general-information] The following information is provided about each savings program: **ID** The identifier of a savings program. *** **Name** The unique name of a savings program, which is displayed to clients in the B2CORE UI. *** **Strategy** The savings strategy: * `Fixed` — a fixed interest rate * `Flexible` — a flexible interest rate *** **Currency** The currency of a savings program. To subscribe to the program, your clients must have wallets denominated in the program currency. *** **Status** The status of a savings program. * If **Active**, the card showing details of a savings program is displayed in the B2CORE UI, and clients can subscribe to the program. * If **Inactive**, the card of a savings program isn’t displayed in the B2CORE UI. *** **Created** The date and time when a savings program was created. *** **Last update** The date and time when a savings program was last updated. To view savings program details, click the **Edit** button. ## Details [#details] On the details page, you can view and modify the following program settings: **Name** The unique name of a savings program, which is displayed to clients in the B2CORE UI. *** **Status** The status of a savings program. * If **Active**, the card showing details of a savings program is displayed in the B2CORE UI, and clients can subscribe to the program. * If **Inactive**, the card of a savings program isn’t displayed in the B2CORE UI. *** **Admission fee** The fee amount that a client must pay for participation in a savings program. When subscribing to the program, the admission is deducted from a client wallet denominated in the program currency. The field is optional. If you don’t want to charge the admission fee, enter 0 (zero). *** **Description** The description of a savings program, which is displayed to clients in the B2CORE UI. ### Flexible Preset Details [#flexible-preset-details] **Minimum investment amount** The minimum amount of the initial investment. When subscribing to a program, clients must invest the specified minimum or more. *** **Minimum additional investment amount** The minimum amount that clients can add to the initial investment. The minimum investment and additional investment amounts can be specified as integer or decimal values. *** **Payment period** The frequency of interest payments to a client wallet. Always, `The first day of each month` and can’t be changed. *** **Penalty period (days)** The period, in days, during which a client can’t withdraw their invested funds without a penalty. *** **Penalty type** Defines how the penalty is calculated when a client withdraws invested funds before the end of the penalty period: * **Fixed** — a fixed amount is deducted as a penalty. * **Percentage** — a percentage of the total invested funds is deducted as a penalty. *** **Redeem penalty** For the **Fixed** penalty type, specifies the exact penalty amount charged to a client. The amount must be an integer or decimal value and must be lower than the minimum investment amount. For the **Percentage** penalty type, specifies the percentage of the total invested funds deducted as a penalty. Partial withdrawals *aren't* allowed. Clients are only allowed to withdraw the full amount of their invested funds, which results in the termination of their savings plans. If a client withdraws their invested funds during the the penalty period, the amount that the client can return to their wallet is calculated as follows: `Total invested amount - Penalty amount` ### Tiers [#tiers] In this section, you can view the number of added tiers that are used to apply flexible interest rates. For each tier, the following parameters are specified: **Tier from** The minimum amount that clients must invest to get an interest rate assigned to that tier. This amount indicates the tier’s starting point and the previous tier’s end point. *** **Annual percentage rate** The annual interest rate, in percentage, applied to the tier. There is the tier with the **Tier From** value equal to 0 (zero), which can’t be removed. For example, suppose you have the following tiers configured: * Tier 1: the **Tier from** is 0 and the **Annual percentage rate** is 1% * Tier 2: the **Tier from** is 2,000 and the **Annual percentage rate** is 2% If a client invests 500, that client receives an interest rate of 1%. If the client adds 1,499, bringing the total invested amount to 1,999, the interest rate remains at 1%. Once the client adds more funds and reaches a total investment of 2,000 or more, the interest rate increases to 2%. When modifying tiers, you can select the **Update Savings Plans Tiers** to apply the modified tiers to the savings plans that have already been created based on the selected preset (for details, refer to [Modify tiers for savings programs with Flexible strategies](../../how-to-articles/manage-savings-programs/how-to-create-a-savings-program/configure-the-flexible-strategy-settings#modify-tiers-for-savings-programs-with-flexible-strategies)). ### Fixed Preset Details [#fixed-preset-details] **Plan length (days)** The holding period, in days, during which the investment amount contributed to a savings program must be held. The plan length can be specified with an interval of 30 days, such as 30, 60, 90, and so on. At the end of the plan length, the investment amount is refunded to the client wallet. *** **Payment period (days)** The payment period, in days, indicating how often interest is accrued and paid to a client wallet. The payment period can be specified with an interval of 30 days, such as 30, 60, 90, and so on. *** **Investment amount** The amount that must be contributed to a savings program. When subscribing to the program, the investment amount is deducted from a client wallet denominated in the currency of the savings program. If a client has more than one wallet denominated in the program currency, the client can select a wallet from which the investment amount should be deducted. *** **Interest rate (percent)** The percentage of the investment amount, which is used to calculate interest earned at the end of each payment period. *** **Penalty type** Defines how the penalty is calculated when a client withdraws invested funds before the end of the plan length: * **Fixed** — a fixed amount is deducted as a penalty. * **Percentage** — a percentage of the invested funds is deducted as a penalty. *** **Cancellation penalty** For the **Fixed** penalty type, specifies the exact penalty amount charged to a client. The amount must be an integer or decimal value and must be lower than the investment amount. For the **Percentage** penalty type, specifies the percentage of the investment amount deducted as a penalty. Partial withdrawals *aren't* allowed. Clients are only allowed to withdraw the full investment amount, which results in the termination of their savings plans. If a client withdraws their invested funds during the the penalty period, the amount that the client can return to their wallet is calculated as follows: `Investment amount - Penalty amount` **See also** [How to create a savings program](../../how-to-articles/manage-savings-programs/how-to-create-a-savings-program/) On this page, you can view a list of withdrawal addresses that clients added to their whitelists. After clients enable the **Address Management** option in the B2CORE UI, they can withdraw funds only to the wallet addresses that they added to their whitelists. If the **Address Management** option is disabled, clients can withdraw funds to any wallet address. The following information is provided about each whitelisted withdrawal address: **Client ID** The identifier of a client who added a withdrawal address to their whitelist. *** **Client Email** The client email address. *** **Wallet address** A string value identifying the address of a wallet that is used for withdrawing funds. *** **Destination tag** The destination tag used to identify a transaction recipient. It is applicable only for certain currencies (XRP, XLM, BNB, and XEM). *** **Currency** The currency in which a wallet for withdrawing funds is denominated. On this page, you can view a list of existing black lists and create new ones. **Black lists** block specific IP addresses from accessing certain API endpoints. This feature helps quickly block unwanted traffic or potential attackers at the application level. Blacklisting is an emergency measure and is not as reliable as blocking attackers at the server level. Contact your system administrators. ## General information [#general-information] The following information is provided about each black list: **ID** The identifier of the black list. *** **Route** The API endpoint to which access is prohibited. *** **IP** The blacklisted IP address or subnet mask. *** **Active** The status of the black list. *** **Comment** The reason for blacklisting. *** **Created at** The date and time when the black list was created. *** **Updated at** The date and time when the black list was last updated. ## Examples [#examples] * **Block access to all API endpoints under a certain path** To block access to all endpoints under `/api` for a given IP address, specify `/api/*` in the **Route** field. * **Block access only to specific API endpoints under a certain path** To block access to specific endpoints under a path while allowing access to others, specify the more detailed path in the **Route** field. For example, by specifying `/api/v2/accounts/*`, you can block access to the endpoints, such as `/api/v2/accounts/:accountId` and `/api/v2/accounts/:accountId/balance`, but still allow access to `/api/v2/accounts` for a given IP address. On this page, you can view a list of clients who are temporarily blocked because of, for example, exceeded login attempts limit (for details, refer to [Systm > Settings](../system/settings)). You can unblock these clients here. **Client ID** The client identifier. *** **Client email** The email address of the client. *** **IP** The IP address from which the client logged in to the B2CORE UI. *** **Blocked at** The date and time when the client was blocked. *** **Expired at** The date and time when the blocking is set expire. *** **Reason** The reason for the blocking. On this page, you can view and manage blacklisted email domains. If a domain is blacklisted, clients can’t use email addresses from that domain to register in the B2CORE UI. For example, if `examplemail.com` is blacklisted. The email addresses such as `@examplemail.com` are blocked from registering in the B2CORE UI. If the **Ban existing users** checkbox is enabled for a blacklisted domain, the existing clients with email addresses from that domain will lose access to the B2CORE UI. The following information is provided on the page: **ID** The identifier assigned to the blacklisted email domain. *** **Domain** The name of the blacklisted email domain. *** To view details or modify a blacklisted email domain, click the **Edit** button. In the displayed popup, you can check the status of the **Ban existing users** checkbox, enable or disable it, or edit the domain name. If you made any edits, click **Save** to apply the changes. To remove an email domain from the blacklist, click the **Delete** button. You can export data from the page in CSV or XLSX format by clicking the respective buttons in the upper-right page corner. The file in the selected format will be automatically downloaded to your computer. On this page, you can view a list of logins to the system. **Client ID** The client identifier. *** **Client** The client’s name. *** **Client email** The email address of the client. *** **IP** The IP address from which the client logged in to the B2CORE UI. *** **Auth date** The date and time when the client logged in to the B2CORE UI. *** **Status** The authorization result. Above the table, you can enable the **Hide IP Duplicates** option to group entries by unique email + IP pairs and hide repeated entries. On this page, you can check client transactions, view risk scores, trace the origin of the funds, and examine all key signals associated with each transaction. ## General information [#general-information] The following information is provided about each transaction: **Client ID** The identifier of the user who created the transaction. *** **Transaction ID** The identifier of the transaction. *** **Transaction Type** The transaction type: deposit or withdrawal. *** **Created date** The date and time of the transaction. *** **Email** The email address of the client. *** **Source amount** The transaction amount in the source currency. *** **Source currency** The transaction currency. *** **Provider** The name of the risk monitoring provider (**SumSubstance** available at the moment). *** **Review Result** The transaction check result from the risk monitoring provider: red, green, or error. *** **Risk Score** The risk score of the transaction from the risk monitoring provider. To view the details, click the **Edit** button. ## Details [#details] The detailed information includes additional transaction signals, such as the source of the funds, any potential risk of theft, the money laundering (ML) risk level of the exchange, and more. On this page, you can view a list of existing white lists and create new ones. **White lists** can be used to restrict access to specific URLs, allowing access only from whitelisted IP addresses. The following information is provided about each white list: **ID** The identifier of the white list. *** **Route** The URL to which access is granted. *** **IP** The whitelisted IP address or subnet mask. *** **Active** The status of the white list. *** **Comment** The reason for whitelisting. *** **Created at** The date and time when the white list was created. *** **Updated at** The date and time when the white list was last updated. On this page, you can view a list of configured tests for client accreditation. When configuring [verification levels](levels), you can specify accreditation tests that your clients must pass before submitting documents for obtaining a higher level. ## General information [#general-information] The following information is provided about each test: **ID** The identifier of a test. *** **Caption** The test’s title displayed to clients in the B2CORE UI. *** **Visible** If **Yes**, a test is available to clients in the B2CORE UI; otherwise, **No**. To view the details about an existing test or modify it, click the **Edit** button located in a corresponding row. ## Details [#details] The details page contains the following tabs: On this tab, the **Caption** and **Visibility** fields can be modified. In the **Details** field, you can specify a test’s description or any other helpful information that clients should know before they start passing the test. Such information will be displayed under the test’s title in the B2CORE UI. On this tab, you can add questions of different types and answer options to a test. The following question types are available: * **open** — an open-ended question that can be answered in a free form. * **close** — a close-ended question that can be answered by choosing a single or multiple correct answers from a given list of options. * **questionnaire** — a multiple-choice question that can be answered by choosing one or more answers from a given list of options. * **poll** — a multiple-choice question that can be answered by choosing a single answer from a given list of options. **See also** [How to create a client accreditation test](../../how-to-articles/manage-verification-options/how-to-create-a-client-accreditation-test) On this page, you can view a list of created document groups and create new ones. ## General information [#general-information] The following information is provided about each document group: **Priority** The priority index assigned to the document group. *** **Name** The document group name. *** **Caption** The document group name displayed in the B2CORE UI. *** **Type** The type of the document group. *** **Enabled** If `Yes`, this group can be used for verification. To view the details, click the **Edit** button. ## Details [#details] The detailed information includes: **Name** The document group name. *** **Type** The type of the document group. *** **Caption** The document group name displayed in the B2CORE UI, which can be localized for different interface languages. *** **Description** The document group description displayed in the B2CORE UI, which can be localized for different interface languages. *** **Enabled** If `Yes`, this document group can be used for verification. *** **Priority** The priority index assigned to the document group. On this page, you can view a list of created document types and create new ones. ## General information [#general-information] The following information is provided about each document type: **Priority** The priority index assigned the document type. *** **Name** The document type name used in the Back Office. *** **Caption** The document type name displayed in the B2CORE UI. *** **Status** If `Enabled`, this document type can be used for verification. To view document type details, click the **Edit** button. ## Details [#details] The detailed information includes: **Name** The document type name used in the Back Office. *** **Caption** The document type name displayed in the B2CORE UI, which can be localized for different interface languages. *** **Description** The document type description displayed in the B2CORE UI, which can be localized for different interface languages. *** **Status** If `Enabled`, this document type can be used for verification. *** **Example** An example of the file that can be submitted for this document type. *** **Group** One or more [document groups](document-groups) in which this document type is included. *** **Max files** The maximum number of files that can be uploaded for this document type. *** **Priority** The priority index assigned to the document type. On this page, you can view a list of all documents submitted by clients for verification. ## General information [#general-information] The following information is provided about each document: **ID** The document identifier. *** **Type** The [document type](document-types). *** **Status** The current [status of the client request](../references/client-request-statuses) for document approval. *** **Client ID** The identifier of the client who submitted the document. *** **Client Name** The name of the client who submitted the document. *** **Email** The email address of the client who submitted the document. *** **Request ID** The identifier of a client’s document approval request. *** **Uploaded by** Indicates who uploaded the document. *** **Uploaded at** The date and time when the document was uploaded. To view document details, click the **Edit** button. ## Details [#details] The detailed information includes: **Type** The [document type](document-types). *** **Files** The link to the document file. On this page, you can view a list of the verification levels available in the Back Office, create new levels and configure their settings. ## General information [#general-information] The following information is provided about each verification level: **Index** The index assigned to a verification level. The zero (`0`) index is always assigned to the default verification level. For the other verification levels, the index must be greater than zero. *** **Caption** The localized level name displayed in the B2CORE UI and mobile app. *** **Desktop Description** The localized level description displayed in the B2CORE UI. The description for the B2CORE UI can be specified in the HTML format. Additionally, you can specify a level description for displaying in the mobile app by navigating to verification level details and filling in the **Mobile Description** field. The description for the mobile app can be specified in the JSON format. *** **Default** If `Yes`, a verification level is the default one and granted to all newly registered clients; otherwise, `No`. *** **Visible** If `Yes`, a verification level is displayed to clients in the KYC flow in the B2CORE UI; if set to `No`, it's hidden. Use the **Visibility** set to `No` to create hidden levels (for example, levels with specific transaction limits) that can be assigned to clients manually via the Back Office. Once assigned, the client can view the level and its description, including limits and other relevant information, on the **Verification** page available through the **Profile** menu in the B2CORE UI. For all other clients who aren't assigned this level, it remains hidden. To view verification level details, click the **Edit** button related to a selected level. ## Details [#details] The following additional information is provided about each verification level: **Wizard** The name of a wizard used to run a verification procedure in the B2CORE UI, enabling clients to process to the next verification level. Possible options: * **SnsWizardSDK** — opens the SumSub popup in the B2CORE UI for verification instructions and document upload. * **ShuftiProSDK** — opens the SuftiPro popup in the B2CORE UI for verification instructions and document upload. * **DocumentsWizard** — uses the built-in KYC provider and displays in the B2CORE UI a form for document upload based on the specified document groups. *** **Next level** The next verification level that clients can be granted after obtaining this verification level. *** **Mobile Description** The localized level description displayed in the mobile app. The description for the mobile app can be specified in the JSON format. *** **Mail description** The level description used in email notifications. *** **Assigned Client Right** The [permission set](../system/client-rights) specifying which actions clients are allowed to perform in the B2CORE UI after obtaining this verification level. *** **Client Tests** One or several accreditation tests that clients must pass before submitting documents required for obtaining this verification level (to learn more, refer to [How to create a client accreditation test](../../how-to-articles/manage-verification-options/how-to-create-a-client-accreditation-test)). *** **Document Groups** One or several [groups](document-groups) which include the documents that must be submitted by clients to obtain this verification level. *** **Limits** The transaction limits specified in USD for this level (to learn more, refer to [How to set up deposit, withdrawal and transfer limits by verification levels](../../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor#how-to-set-up-deposit-withdrawal-and-transfer-limits-by-verification-levels)). **See also** [How to create verification levels](../../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor#how-to-create-verification-levels) On this page, you can view a list of images displayed throughout the Back Office. The following data is provided about each image: **Type** The user interface element for which an image is specified, such as: * the main menu logo * the logo on the login page * the background image on the login page *** **Path image** The path to an image. **See also** [How to change Back Office images](../../how-to-articles/manage-system-settings/how-to-change-back-office-images) On this page, you can view a list of executed bulk actions. Bulk actions allow you to perform specific actions affecting multiple clients at once. ## General information [#general-information] The following information is provided about each bulk action: **Name** The action name. *** **Action** The action type. The following action types are available: * ban clients * change a client type * change an internal client type * change a verification level * make a deposit * zero out balances *** **Status** The status of a bulk action, indicating whether it has been successfully executed. *** **Created at** The date and time when a bulk action was created and executed. *** **Updated at** The date and time when a bulk action was last modified. *** **User** The email address of a [Back Office user](users/) who executed a bulk action. To view bulk action details, click the **Edit** button. ## Details [#details] The following additional information is provided about each bulk action: **Description** The bulk action description. *** **Log message** A log message specifying the result of an executed bulk action. *** **System log** The log of operations made during bulk action execution. **See also** [How to create a bulk action](../../how-to-articles/manage-system-settings/how-to-create-a-bulk-action) On this page you can view and manage a folder tree with any nesting depth, pre-defined for all clients. Folders configured on this page will be displayed on the [Files tab](../clients/general/files-tab) in the client’s details. When renaming a folder on this page, it is automatically renamed on the Files tab in the client’s details. Admin users can create custom folders for a specific client on the [Files tab](../clients/general/files-tab), but the pre-defined folders cannot be edited or removed. If a system folder is created with the same name as that of an existing custom folder of some client, a `_Custom` postfix is added to the name of the custom folder, and a system folder with the same name is created next to it. **Key points about permissions** * You can assign access permissions to a folder, to specify which groups of users can view and edit it in the [Files tab](../clients/general/files-tab). * By default, nested folders inherit the access permissions from the parent folder. Their access permissions cannot be broader than that of the parent folder. * When access permissions assigned to a parent folder are revoked from a user group, access to all nested folders is automatically restricted for these users. * After access to a parent folder is granted to a user group, this group will NOT be automatically granted access to nested folders In the folders list you can see a list of created top-level folders: **Name** The folder name. *** **Created at** The date and time when the folder was created. *** **Updated at** The date and time when the folder was last modified. To see folder details, click the **Edit** button. Each folder has the following tabs: On this tab, you can view the folder path. On this tab, you can view a list of nested folders of the parent folder. Nesting depth is unlimited, and each folder can have its own subdirectories as well. Breadcrumbs are displayed at the top of the page for convenient navigation. On this tab, you can view a list of available Back Office user groups and toggle switches, which show whether the users from this group can view the folder and its content on the [Files tab](../clients/general/files-tab) in the client’s details. Note that you can use the **Turn on all** and **Turn off all** buttons to quickly provide or restrict access to folders. On this page, you can create and edit permission levels indicating which operations clients are allowed to make in the B2CORE UI. Permission levels are associated with [verification levels](../verification/levels). When clients obtain a particular verification level, they are granted the permissions associated with this verification level. To grant specific permissions to a client, go to the [Settings tab](../clients/general/settings-tab) on the client details page, and then select the required permissions in the **Rights** section. ## General information [#general-information] The following information is provided about each permission level: **Caption** The description of a permission level. *** **Created At** The date and time when a level was created. *** **Updated At** The date and time when a level was updated. *** **Default (Y/N)** If `Y`, this permission level is the default one and is assigned to all clients that were granted the initial [verification level](../verification/levels). To view permission level details, click the **Edit** button. ## Details [#details] On the details page, you can view the following additional information and select the permissions that you want to grant to your clients at this level: **Name** The name of a level. *** **Caption** The description of a level. *** **Parent Role** The previous permission level that clients must obtain before they can get this level. This field is not applicable to the default permission level. The following permission options are available: * **Verification**\ If selected, clients are allowed to obtain a higher [verification level](../verification/levels) in the B2CORE UI. * **Converter**\ If selected, clients can exchange funds in the B2CORE UI. * **Deposits**\ If selected, clients can deposit funds in the B2CORE UI. * **Withdrawals**\ If selected, clients can withdraw funds in the B2CORE UI. * **Internal Transfers**\ If selected, funds can be transferred from one client to another within the same B2CORE system. On this page, you can view a list of countries that your clients can select when signing up to the B2CORE UI (if they are required to select a country during registration). A country is listed on the Registration form if a switch displayed in the **Enabled** column for this country is in the *active* state. A country is hidden on the Registration form if the switch is in the *inactive* state. You cannot add new countries or edit country-related data, you can only set visibility for the countries listed on this page. The following information is provided about each country: **ID** The identifier of a country in the system. *** **Name** The name of a country (for example, `Mexico`). *** **Full name** The official name of a country (for example, `the United Mexican States`). *** **Country code** The code assigned to a country in the system. *** **ISO 3166-2** The geocode assigned to a country (as per ISO 3166-2). *** **ISO 3166-3** The geocode assigned to a country (as per ISO 3166-3). *** **Capital** The capital city of a country. *** **Currency** The name of a national currency. *** **Currency symbol** The graphical representation of a national currency (for example, `$`). *** **Currency code** The Alpha code of a national currency. *** **Currency sub unit** The name of a fraction of the main currency unit (for example, `cent`). *** **Region code** The area code assigned to a country (as per UN M49). *** **Sub region code** The area subcode assigned to a country (as per UN M49). *** **Enabled** If the switch is in the *active* state, your clients can select this country when signing up to the B2CORE UI. You can download the list of countries to your computer as a CSV or XLSX file. To do this, click the **CSV** or **Excel** button located in the upper-right corner of the page. Custom fields let you collect additional client information beyond the standard profile fields. You define a field once and organize it into a group. You can then add it to a registration form, where clients fill it in during registration, and its value can always be filled in or edited by an admin on the client profile. You manage custom fields in the **System** > **Custom Fields** menu, which contains two pages: * **Groups** — sections that organize related fields. * **Fields** — the individual fields, each belonging to a group. Access to custom fields is controlled by the following permissions, which you grant to back-office user groups in **System** > **Users** > **Groups**. | Permission | Grants the ability to | | ------------------------------- | ----------------------------------------------- | | View Custom Fields | View the **Groups** and **Fields** pages. | | Create Custom Fields | Create groups, fields, and options. | | Update Custom Fields | Edit groups, fields, and options. | | Archive Custom Fields | Archive groups, fields, and options. | | View client custom field values | View custom field values on the client profile. | | Edit client custom field values | Edit custom field values on the client profile. | ## Groups [#groups] A group is a labeled section that holds related fields. On the client profile and in the registration form, fields are displayed under their group. The **Groups** page lists the existing groups with the following information. **Label (English)** The group name shown to clients and admins. You can localize this label through B2TRANSLATE (see [Translations](custom-fields#translations)). *** **Machine name** A unique identifier used in translation keys and the API. You set the machine name when you create the group, and it can't be changed afterward. *** **Sort order** The position of the group relative to other groups. Groups with a lower sort order appear first. *** **Archived** Indicates whether the group is archived. To create a group: Navigate to **System** > **Custom Fields** > **Groups**. Click **Create**. Specify the **Label (English)**, **Machine name**, and **Sort order**. Click **Save**. To edit a group, click the **Edit** button. You can change the **Label** and **Sort order**; the **Machine name** is fixed. To archive a group, click the **Archive** button. Archived groups are hidden from new registration forms, but they remain visible on client profiles where a stored value exists, so retiring a group never hides data already collected. ## Fields [#fields] A field is a single input, such as a text box, a dropdown, or a date picker. Each field belongs to one group. The **Fields** page lists the existing fields with their **Label (English)**, **Machine name**, **Type**, **Group**, and **Archived** status. ### Field types [#field-types] The following field types are supported. | Type | Description | | ----------- | ------------------------------------------- | | Text | A single-line text input. | | Multiline | A multi-line text area. | | Email | A text input validated as an email address. | | URL | A text input validated as a URL. | | Phone | A phone number input. | | Integer | A whole number. | | Decimal | A number with a fractional part. | | Boolean | A yes/no value. | | Select | A dropdown allowing a single option. | | Multiselect | A dropdown allowing multiple options. | | Date | A calendar date. | | Date & time | A calendar date with a time. | ### Create a field [#create-a-field] To create a field: Navigate to **System** > **Custom Fields** > **Fields**. Click **Create**. Specify the **Label (English)**, **Machine name**, **Type**, and **Group**. In the **Required / validation** section, configure the validation rules (see [Validation rules](custom-fields#validation-rules)). Click **Save**. When editing a field, you can change its **Label**, **Group**, and validation rules. The **Machine name** and **Type** are set at creation and can't be changed. To archive a field, click the **Archive** button. Like groups, archived fields stay visible on client profiles where a stored value exists. ### Validation rules [#validation-rules] The **Required / validation** section shows only the rules that apply to the selected field type. | Rule | Applies to | Description | | ------------- | --------------------------- | ------------------------------------------ | | Required | All types | The field must be filled in. | | Min length | Text, Multiline | The minimum number of characters. | | Max length | Text, Multiline, Email, URL | The maximum number of characters. | | Regex pattern | Text, Multiline | A regular expression the value must match. | | Min | Integer, Decimal | The minimum allowed value. | | Max | Integer, Decimal | The maximum allowed value. | | Min date | Date, Date & time | The earliest allowed date. | | Max date | Date, Date & time | The latest allowed date. | | Min options | Multiselect | The minimum number of selected options. | | Max options | Multiselect | The maximum number of selected options. | **Required** applies to the client registration form, where clients must fill in the field to continue. On the client profile, admins can save partial data even when a required field is empty; the format and option rules still apply to any value that is entered. ## Options for Select and Multiselect fields [#options-for-select-and-multiselect-fields] Fields of the **Select** and **Multiselect** types need a list of options. After you create such a field, open its edit page to manage the options at the bottom. Each option has the following parameters. **Value** The value stored when the option is selected. It must be unique within the field. *** **Label (English)** The text shown to the client. You can localize this label through B2TRANSLATE (see [Translations](custom-fields#translations)). *** **Machine name** An identifier used in translation keys. To add an option, fill in the fields in the option row and click **Add option**. To archive an option, click the **Archive** button next to it. ## Show custom fields during registration [#show-custom-fields-during-registration] You choose which custom fields appear in a registration form on the registration configuration edit page in **System** > **Registration**. Custom fields can only be added to the new registration flows configured in **System** > **Registration**. They are not available in the legacy [Wizards](wizards), where registration fields are set up through the [Registration wizard configuration](wizards#registration-wizard) and appear on the client's [Advanced tab](../clients/general/advanced-tab). The **Wizards** and their **Advanced** step are considered legacy. Once the migration to the **System** > **Registration** settings is complete, they will be removed. Open the registration configuration you want to edit. In the **Custom Fields** section, select the fields to show in the registration form. Click **Save**. Fields marked as **Required** must be filled in by the client before they can complete the registration. If no custom fields exist yet, the section links to the **Custom Fields** page where you can create them. ## Edit custom field values on a client profile [#edit-custom-field-values-on-a-client-profile] Open a client profile and go to the **Custom Fields** tab to view and edit the values collected for that client. Fields are grouped the same way as on the registration form. Viewing values requires the **View client custom field values** permission, and editing them requires the **Edit client custom field values** permission. Archived fields and groups remain visible on the tab as long as the client has a stored value for them, so retiring a field never hides previously collected data. ## Translations [#translations] Labels for groups, fields, and options are entered in English and can be localized through B2TRANSLATE. The registration form uses the following translation key patterns: * Fields — `Common.Registration.Form.Fields..Label` * Options — `Common.Registration.Form.Options..Label` To speed up localization, the registration configuration edit page provides a **Copy B2TRANSLATE keys JSON** button. It copies a JSON object that maps the translation keys to their English values for the custom fields currently selected in the form, their select and multiselect options, and the Terms & Conditions items. Paste the JSON into the **Common** tab in B2TRANSLATE. In this subsection, you can set up and manage supported deposit methods. ## Deposit methods [#deposit-methods] On this page, you can view a list of configured deposit methods and create new ones. ### General information [#general-information] The following information is provided about each deposit method: **ID** The identifier of the method in the system. *** **Priority** The priority index assigned to the deposit method. The order in which deposit methods are displayed to clients in the B2CORE UI depends on priority indexes assigned to methods. A lower index means a higher priority. For example, a method with the index `1` will appear at the top of the list in the B2CORE UI. The priority index can be changed on the [Settings tab](deposit-system#settings-tab) in the method details. *** **Caption** The name assigned to the method in the Back Office, which is also visible to clients in the B2CORE UI. *** **Name** The unique name for the method. It can only contain Latin letters, numbers, dashes, and underscores. *** **Group** One or more [groups](deposit-system#deposit-groups) in which the method is included, such as **Crypto**, **Fiat**, or other. *** **Provider** The name of the payment system. For [PSS-connected](../../integrations/payment-systems#payment-system-service-pss) payment systems, the following providers can be displayed: * **PaymentSystemsDeposit** — indicates a deposit method connected via PSS. * **PaymentSystemsStaticDeposit** — indicates a deposit method connected via PSS that supports static payment details. In such methods, previously issued payment information, such as crypto addresses or bank details, is saved for clients, allowing them to reuse it for deposits of different amounts at any time. Currently, the **B2BINPAY v3** and **Coinsbuy v3** payment systems can be configured to use static payment details. *** **Driver**\ *Applicable only to payment systems connected via [PSS](../../integrations/payment-systems#payment-system-service-pss)* The driver used to connect to a payment system. It reflects the name of the payment system and, in some cases, the supported payment method. *** **Currency** One or more currencies supported by the method. The method will be available for accounts denominated in the selected currencies. *** **Enabled** The method status: * **No** — the method is inactive and unavailable for deposits. * **Yes** — the method is active and available for deposits. *** **Status** exclamation icon — indicates that some method settings need to be configured. Hovering over the icon displays a list of required settings, which can be adjusted in the method details. If the column is empty, all required settings for the method have been specified. To view deposit method details, click the **Edit** button. ### Details [#details] The details page is divided into the following tabs: * [Settings tab](deposit-system#settings-tab) * [TR Currencies tab](deposit-system#tr-currencies-tab) * [PS Currencies tab](deposit-system#ps-currencies-tab) * [Commissions tab](deposit-system#commissions-tab) * [Restrictions tab](deposit-system#restrictions-tab) The set of displayed tabs may vary depending on the deposit method driver. For example, for methods connected via [PSS](../../integrations/payment-systems#payment-system-service-pss), the additional **Webhooks** and **Test configuration** tabs may be displayed. #### Settings tab [#settings-tab] On this tab, you can view or modify the general settings of the deposit method, as well as the connection settings of a payment provider. **Name** The unique name for the method. It can only contain Latin letters, numbers, dashes, and underscores. *** **Enabled** The method status: * **No** — the method is inactive and unavailable for deposits. * **Yes** — the method is active and available for for deposits. *** **Group** One or more [groups](deposit-system#deposit-groups) in which the method is included, such as **Crypto**, **Fiat**, or other. *** **Caption** The name assigned to the method in the Back Office, which is also visible to clients in the B2CORE UI. *** **Provider** The name of the payment system. *** **Result URL** The URL that receives callbacks with notifications about deposit status updates. *** **Time to fund** The hint text displayed to clients in the B2CORE UI, indicating the estimated processing time for deposits. Two standard options are available: * `Depending on the Blockchain` * `From 3 to 5 Days` It's possible to modify the hint text of the standard options or add new ones in **System** > **Key storage** > **Key storage values**. Use the `method_time` tag to locate the relevant keys and update the text. The hint text can be specified in HTML format, but using different formats may cause difficulties in displaying the hint on different devices. For example, while the HTML format renders correctly in the B2CORE UI, it may not work properly in mobile apps. *** **Precalculate** This field is deprecated and no longer in use. It can be ignored. *** **Icon** The method icon displayed to clients in the B2CORE UI for quick identification of the method. You can use predefined icons or specify a URL for a custom image. For a list of predefined icons and their names, refer to [Payment systems](../../integrations/payment-systems) and [Supported cryptocurrency payment methods](../references/supported-cryptocurrency-payment-methods). To use a predefined icon for the method, enter its name in the **Icon** field. If you prefer a custom icon, specify the URL of the image to be displayed as the method icon. *** **Priority** The priority index assigned to the deposit method. The order in which deposit methods are displayed to clients in the B2CORE UI depends on priority indexes assigned to methods. A lower index means a higher priority. For example, a method with the index `1` will appear at the top of the list in the B2CORE UI. *** **IP White list** A list of IP addresses from which it is allowed to make deposits. *** **Rates provider** The name of the rate provider configured on the [Currencies > Rates](../currencies/rates) page. This field is optional. If specified, the system will prioritize requesting rates from this provider when the deposit method is used. *** **Configuration**\ *Applicable to PSS methods* The deposit method configuration form. Its structure and available fields depend on the selected **Driver**. The **external connection** contains technical integration data required to connect to a specific payment system, while the **configuration** defines how the deposit process operates. As a result, you can configure two or more deposit methods with different configurations that all use the same external connection. If no configuration is available for the selected driver, the following message is displayed: `Configuration form is empty`. *** **Provider settings**\ *Applicable to non-PSS methods* The settings required to connect to a payment provider. The set of connection settings varies depending on the payment provider. After specifying the connection settings, it’s possible to check if the credentials used to access the payment provider are valid. To do this, click the **Check connection** button. Currently, the **Check connection** button is available only for the B2BINPAY and BridgerPay payment providers. * If the credentials are valid, the status `Success` will be displayed under the button. * If the credentials are invalid, the status `Fail` will be displayed, along with an explanation message. In this case, contact the Support team. **Custom fields** Applicable for the **Constructor** provider only. Configure a list of fields that clients should fill in when they make deposits using the **Constructor** method in the B2CORE UI (for details, refer to [How to add custom fields for the Constructor deposit or withdrawal method](../../how-to-articles/manage-payment-methods/how-to-add-the-constructor-deposit-or-withdrawal-method#how-to-add-custom-fields-for-the-constructor-deposit-or-withdrawal-method)). #### TR Currencies tab [#tr-currencies-tab] On this tab, you can view and manage a list of transaction currencies added to the deposit method. The method will be available for accounts denominated in these currencies. The following information is provided about each currency: **ID** The identifier assigned to the currency added to the method. *** **Currency** The caption assigned to the currency. #### PS Currencies tab [#ps-currencies-tab] On this tab, you can view and manage a list of currencies supported by the payment provider for processing deposits. To enable the method to process deposits in a specific currency, ensure it is added to this list. The following information is provided about each currency: **ID** The identifier assigned to the currency added to the method. *** **Currency** The caption assigned to the currency. *** **Supported by PS** The `Supported` status indicates that the added currency is supported by the payment provider and can be used for making deposits. When adding a currency with a status that doesn't guarantee compatibility with the payment provider, the `Support is unknown` message is displayed. In this case, the currency can still be added to the tab, and the configuration can be saved. However, the currency might not be fully supported by the deposit method, so it should be used with caution. When adding a currency that isn't supported, the `Not supported` message appears. In this case, the currency can't be added to the tab, and saving the configuration isn't allowed. #### Commissions tab [#commissions-tab] On this tab, you can view and manage a list of commissions configured for the deposit method. The following information is provided about each commission: **ID** The commission identifier in the Back Office. *** **Currency** One or more commission currencies. *** **Commission** The commission rates that follow the formula: `Minimum commission amount <= Fixed rate + Percentage rate % <= Maximum commission amount` For details, refer to [How to configure commissions for deposit and withdrawal methods](../../how-to-articles/manage-payment-methods/how-to-configure-commissions-for-deposit-and-withdrawal-methods). *** **Type** The commission type: * **TR** (Vendor commission) — the commission that is calculated based on the currency and amount credited to the client's account after the deposit is successfully processed by the payment provider. If this commission type is configured, the client deposits one amount through the payment provider but receives to their account a smaller amount due to the deduction of the calculated commission. * **PSP** (Provider commission) — the commission that is calculated only for financial reports and doesn't affect the amount a client receives to their account when depositing funds. If this commission type is configured, it only applies to calculations for reports regarding completed deposits and is displayed in the **Provider commission** column in [Finance > Deposits](../finance/deposits). #### Restrictions tab [#restrictions-tab] On this tab, you can restrict the use of the deposit method by country, client type, verification level, jurisdiction, IB parent ID, or IB program type. The tab lists each restriction along with its status, type, and configured rules (for details, refer to [How to restrict the use of deposit and withdrawal methods](../../how-to-articles/manage-payment-methods/how-to-restrict-the-use-of-deposit-and-withdrawal-methods)). ## Deposit groups [#deposit-groups] Groups are used to organize deposit methods into categories, such as crypto and fiat methods, for easier management. **Priority** The priority index assigned to the group. *** **Name** The group name. *** **Caption** The group description. *** **Enabled** The group status: * **No** — the group is inactive and cannot be used to include deposit methods. * **Yes** — the group is active and can include deposit methods. On this page, you can set up event notifications to be sent via Slack, Telegram, email or SMS, as well as view a list of configured notifications. The following information is provided about each configured event notification: **ID** The notification identifier. *** **Event** The [event](../references/event-types-for-triggering-event-notifications-for-back-office-users) that triggers a notification. *** **Description** The notification description. *** **Users** The email addresses of the Back Office users added as notification recipients. *** **Channels** A list of channels through which notifications are delivered: * email * SMS * Slack (refer to [How to set up a Slack bot](../../how-to-articles/manage-communication-platforms/how-to-set-up-a-slack-bot)) * Telegram (refer to [How to set up a Telegram bot](../../how-to-articles/manage-communication-platforms/how-to-set-up-a-telegram-bot)) *** **Enabled** If **Enabled**, a notification is sent after the selected event occurs; otherwise, **Disabled**. To modify the existing notifications, click the **Edit** button located in the corresponding notification row. **See also** [How to set up event notifications](../../how-to-articles/manage-system-settings/how-to-set-up-event-notifications) On this page, you can configure event handlers to monitor specific system events and define the workflows that automatically run when they occur. ## General information [#general-information] The following information is provided about each event handler: **ID** The identifier of the event handler. *** **Short description** A brief description of the event handler. *** **Event** The event type. The following event types are supported: * [Account balance received](#account-balance-received) * [Transfer event](#transfer-event) * [Account created](#account-created) * [Successful operation](#successful-operation) *** **Event handler workflow** The workflow or action that will be executed when the event is triggered, such as sending an email notification or sending data to an external endpoint. *** **Enabled** If **Enabled**, the event handler is active and will process events that meet the configured conditions. To view or edit event handler details, select a handler and click the **Edit** button. ## Details [#details] On the details page, you can enable or disable the selected event handler and adjust its parameters. The following is the list of supported event handlers for which you can adjust their specific parameters: ### Account balance received [#account-balance-received] This event handler is triggered when B2CORE receives an updated balance from an external service provider connected to the Back Office (for example, **Twilio**). If the received balance meets the configured threshold, a notification is sent to the specified email addresses. **Send notification if account balance less or equals** The balance threshold that triggers the notification. *** **Available workflows** `SendNotificationWorkflow` — sends an email notification to the specified email addresses when the external service balance falls below or equals the configured threshold. *** **Emails** One or more email addresses to which the notification will be sent. *** **Template** The email template used for sending notifications, such as `balanceWarning`. The template can be selected from the list of available email templates in **System** > **Templates** > **Email** > **Templates**. ### Transfer event [#transfer-event] The event handler is triggered when a transfer occurs that matches the selected platforms and amount criteria. When this event occurs, an email notification is sent to the specified email addresses. **Available handlers** `Filter by platforms and amount` — filters transfer events based on the selected source and destination platforms and the minimum transfer amount. The handler triggers only when a transfer meets the specified conditions. *** **Destination Platform Id** The identifier of the destination platform to which a transfer is made. This is the required parameter. *** **Source Platform Id** The identifier of the source platform to which a transfer is made. This is the optional parameter. *** **Minimum Amount** The minimum transfer amount required to trigger the event. This parameter is optional. *** **Available workflows** `SendNotificationWorkflow` — sends an email notification to the specified email addresses when a transfer matching the configured criteria occurs. *** **Emails** One or more email addresses to which the notification will be sent. *** **Template** The email template used for sending notifications, such as `TransferEvent`. The template can be selected from the list of available email templates in **System** > **Templates** > **Email** > **Templates**. ### Account created [#account-created] The event handler is triggered when an account or wallet is created for a client. When this event occurs, a POST request is sent to the specified external URL. The request body includes account details formatted as either JSON or URL-encoded form data, depending on the selected content type. The examples below show how the POST request body is formatted for each supported content type: ```json title="JSON" { "client": { "id": 3651, "email": "client@example.com" }, "product": { "name": "ewallet", "group_type": "Default", "platform": { "id": 1, "name": "eWallet", "caption": "eWallet" } }, "account_number": "80759" } ``` ```bash title="URL-encoded form data" client%5Bid%5D=3650&client%5Bemail%5D=client%40example.com&product%5Bname%5D=ewallet&product%5Bgroup_type%5D=Default&product%5Bplatform%5D%5Bid%5D=1&product%5Bplatform%5D%5Bname%5D=eWallet&product%5Bplatform%5D%5Bcaption%5D=eWallet&account_number=80735 ``` *** **Available workflows** `SendToEndpoint` — sends a POST request with the details about the created account or wallet to the specified external endpoint. The request is sent immediately when the event is triggered. *** **External endpoint** The external URL to which the POST request will be sent. This parameter is required. *** **Content type** The format of the request body. The following values are supported: * `application/x-www-form-urlencoded` * `application/json` ### Successful operation [#successful-operation] The event handler is triggered when a deposit, withdrawal, transfer, or exchange is successfully completed. When this event occurs, a POST request is sent to the specified external URL. The request body includes transaction details formatted as either JSON or URL-encoded form data, depending on the selected content type. **Operations** One or more transaction types. This parameter is required. The following transaction types can be selected: * `payment` — deposits * `payout` — withdrawals * `transfer` — transfers * `exchange` — exchanges *** **Available workflows** `SendToEndpoint` — sends a POST request with the details about a successful transaction to the specified external endpoint. The request is sent immediately when the event is triggered. *** **External endpoint** The external URL to which the POST request will be sent. This parameter is required. *** **Content type** The format of the request body. The following values are supported: * `application/x-www-form-urlencoded` * `application/json` On this page, you can view a list of connections to external systems and service providers integrated with B2CORE, manage them, and create new connections. ## General information [#general-information] The following information is provided about each connection: **ID** The connection identifier. *** **Caption** The connection caption. *** **Name** The technical name of the connection. *** **Type** The type of integrated system, such as: * **Payment system** — indicates connections to payment systems. * **Mailing system** — indicates connections to mailing services. * **Platform** — indicates connections to trading platforms and hubs. * **Other** — indicates connections to other types of integrated systems, for example, customer support platforms, analytical tools, and more. *** **Provider** The name of the external system to which the connection is established. *** **Driver**\ *Applicable only to payment systems connected via [PSS](../../integrations/payment-systems#payment-system-service-pss)* The driver used to connect to a payment system. It reflects the name of the payment system and, in some cases, the supported payment method. *** **Enabled** Indicates whether the connection is enabled: **Yes** or **No**. *** **Created** The date and time when the connection was created. *** **Updated** The date and time when the connection was last updated. To view connection details, click the **Edit** button. ## Details [#details] In the details, you can enable or disable the connection. This page contains settings specific to the external system to which the connection is established. Each external system has its own set of connection settings, such as the service URL, credentials, and other configuration parameters. On this page, you can view a record of data imported to the Back Office as well as import new data. You can import data about clients, their accounts, or [IB programs](../introducing-brokers) into B2CORE from a third-party system using a CSV or TSV file. Your CSV or TSV file must meet the following requirements for data import: * The file size mustn't exceed 5MB. * The maximum number of lines in a file is 1,000, excluding the header line. If the number of lines exceeds 1,000, the file must be split into two or more files for proper import. * `Comma`, `semicolon`, or `tab` can be used as delimiter characters that separate data in the file. * The file must be properly structured and include the required fields specific to the imported data type (for details, refer to [How to import client-related data](../../how-to-articles/manage-system-settings/how-to-import-client-related-data)). * IB-related data can be imported only from a CSV file. ## General information [#general-information] The following information is provided about each data import operation: **Title** The name assigned to a data import operation. *** **Action** The type of data that was imported. The following types of data can be parsed: * `import-users` — used to import the following client-related data from a CSV or TSV file: * Email `required` * Last name `required` * First name `required` * Middle name * Date of birth * Country * Phone number * Address * City * Postal code * Verification level The imported data is displayed on the **Clients** > **General** page. * `import-accounts` — used to import the following data about client accounts from a CSV or TSV file: * Email `required` * Account number `required` * Product ID `required` * Product currency `required` The account data can be imported only for the existing clients that are listed on the **Clients** > **General** page. The imported data is displayed on the **Clients** > **Accounts** page and on the [Accounts tab](../clients/general/accounts-tab) in client details. * `import-ibs` — used to import the following data related to IB programs (this data can be imported only from a CSV file): * IB Email `required` — the email address of a partner who has joined an IB program * Client Email `required` — the email address of a client attracted by a partner * IB Type ID `required` — the identifier of an IB program The IB data can be imported only for the existing clients that are listed on the **Clients** > **General** page. The imported data is displayed on the **Introducing Brokers** > **Programs** > **Introducing Brokers** and **Introducing Brokers** > **Programs** > **Clients** pages. *** **Created At** The date and time when an import operation was initiated. *** **User** The email address of a Back Office user who initiated an import operation. *** **Status** The import operation status: * `New` — an import operation has been initiated but hasn't yet run. * `Awaiting confirmation` — during data validation in a CSV or TSV file, some invalid records are detected. The invalid records are displayed in the **Log message** field in the import operation details. You can select to continue the import while excluding the invalid records or cancel the import. * `In Progress` — an import operation is running. * `Success` — an import operation has been fully completed. * `Success with errors` — an import operation has been completed, but at least one error occurred during import. * `Failed` — an import operation failed due to critical errors. To view details of a selected data import operation, click the **Edit** button. ## Details [#details] On the details page, you can find the following fields: **Log messages** Lists the records and their corresponding line numbers from a CSV or TSV file that contain invalid data for import. You can click **Continue import** to proceed with importing all valid records while excluding those with invalid data or you can cancel import, or you can click **Cancel import**. After the import is complete, this field shows the import results for each record from the CSV or TSV file. **Error messages** Lists the records and their corresponding line numbers where errors occurred, causing the import operation to fail. **See also** [How to import client-related data](../../how-to-articles/manage-system-settings/how-to-import-client-related-data) [How to import data related to Back Office user groups](../../how-to-articles/manage-system-settings/how-to-import-data-related-to-back-office-user-groups) On this page, you can set values for parameters that are used in [Templates](templates/email), like colors, images, etc. ## Key storage values [#key-storage-values] On this page, you can view and manage all the key-value pairs, stored in the system. **ID** The identifier of the key-value pair. *** **Type** The value type: string, html, mail, or url. *** **Key** The key name, which is used in [Templates](templates/email). *** **Tags** The group to which the key-value pair belongs. *** **Value** The value assigned to the key. *** **Status** If `Enabled`, the key-value pair can be used in Templates. ## Key storage tags [#key-storage-tags] On this page, you can view and manage tags used for the semantic grouping of key-value pairs. **ID** The tag identifier. *** **Caption** The tag description. *** **Status** The tag status: enabled or disabled. On this page, you can view a list of supported languages and format settings specified for each language. The Back Office fields that support localization can be translated to the supported languages. ## General information [#general-information] The following information is provided about each language: **ID** The language identifier in the system. *** **Caption** The language name. *** **Fallback** The fallback language that is used if no translation to the given language is found. *** **Priority** The priority index assigned to the language. The priority indicates the order in which enabled languages are displayed in the languages list in the B2CORE UI. *** **Enabled** If `Yes`, the language is enabled and can be selected by clients in the languages list displayed in the B2CORE UI. By default, English serves as the fallback language for all the enabled languages. This means that if no translation or template in a specific language is found, the English version is used as a backup to ensure a seamless user experience across different languages. To view language details, select a language and click the **Edit** button. ## Details [#details] The following additional information is provided about each language: **Caption** The language name. *** **Locale** The locale identifier (such as `en_US`). *** **Language code** The language code (such as `en`). *** **Enabled** If `Yes`, the language is enabled and can be selected by clients in the languages list displayed in the B2CORE UI. *** **Default** If `Yes`, the language is applied by default in the B2CORE UI. The default language can’t be disabled. *** **Right to Left** If `Yes`, text strings in the given language are displayed in the right-to-left direction. *** **Priority** The priority index assigned to the language. The priority indicates the order in which enabled languages are displayed in the languages list in the B2CORE UI. *** **Formats** Format settings specified for the language, such as date and time formats, and others. **See also** [How to add or remove a language](../../how-to-articles/manage-system-settings/how-to-add-or-remove-a-language) On this page, you can find logs listing the actions made by the [Back Office users](users/users). The following information is provided about each logged action: **Actor Groups** The name of a [user group](users/#groups) that includes a Back Office user who made an action. *** **Actor** The email address of a Back Office user who made an action. *** **Event Category** The action’s scope. Possible values: * **client** — the client-related data was affected * **operation** — the transaction data was affected *** **Event Action** The action type. Possible values: * `ADD` * `UPDATE` * `DELETE` *** **Event Name** The following client-related actions are tracked: * `Client Created` — a new client profile was registered * `Client Updated` — the data displayed on the [Client tab](../clients/general/client-tab) on the client details page was modified * `Client Info Updated` — the data displayed on the [Advanced tab](../clients/general/advanced-tab) on the client details page was modified * `Client Phone Created` — a new phone number was specified for a client on the [Contacts tab](../clients/general/contacts-tab) on the client details page * `Client Phone Deleted` — a phone number was removed from the [Contacts tab](../clients/general/contacts-tab) * `Client Address Created` — a new address was specified for a client on the [Contacts tab](../clients/general/contacts-tab) * `Client Address Updated` — an address was modified on the [Contacts tab](../clients/general/contacts-tab) * `Client Address Deleted` — an address was removed from the [Contacts tab](../clients/general/contacts-tab) The following transaction-related actions are tracked: * `Operation Created` — a deposit, withdrawal, transfer or exchange transaction was made. The transaction identifier and type are displayed in the **Details** column. *** **Details** The detailed information about an action that was made. *** **Created At** The date and time when an action was made. On this page, you can view a list of supported operation types. ### General information [#general-information] The following information is provided about each operation type: **ID** The operation type identifier. *** **Caption** The operation type description. *** **Name** The operation type name: * `deposit` — used for deposits * `payout` — used for withdrawals * `transfer` — used for transfers (when funds are transferred between accounts and wallets of the same client) * `internal_transfer` — used for internal transfers (when funds are transferred from one client to another within the same B2CORE system) * `exchange` — used for exchanges * `partners` — used for reward payments to IB partners *** **Class** The operation type class. *** **Status** The operation type status: `Enabled` or `Disabled`. When an operation type is disabled, clients can’t create the respective transactions in the B2CORE UI. To view operation type details, select an operation type and click the **Edit** button. ## Details [#details] On the details page, you can enable or disable a selected operation type as well as view and adjust its additional settings (if applicable). The following is a list of operation types for which you can adjust the addition settings: ### The `deposit` operation type [#the-deposit-operation-type] **Allowed operation status** A list of statuses that can be assigned to deposit transactions. These statuses are also displayed to clients in the B2CORE UI. ### The `payout` operation type [#the-payout-operation-type] **Auto withdrawal** If **Enabled**, clients can make automatic withdrawals, which don’t require the admin approval, in the B2CORE UI; otherwise, **Disabled**. Further, you can limit the maximum amount that clients can withdraw automatically (for details, refer to [How to set up deposit, withdrawal and transfer limits by verification levels](../../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor#how-to-set-up-deposit-withdrawal-and-transfer-limits-by-verification-levels)). *** **Auto processing rules** Select **Crypto** or **Fiat**, or both. *** **Allowed operation status** A list of statuses that can be assigned to withdrawal transactions. These statuses are also displayed to clients in the B2CORE UI. ### The `transfer` and `internal_transfer` operation types [#the-transfer-and-internal_transfer-operation-types] The settings that can be adjusted for `transfer` and `internal_transfer` operation types are the same and include the following options: **Allowed statuses** A list of statuses that can be assigned to transfers or internal transfers. These statuses are also displayed to clients in the B2CORE UI. *** **Operation restriction** A list of transfer directions for which transfers or internal transfers are prohibited. For example, by selecting the **Trade to Wallet** option for the `internal_transfer` type, you can prohibit internal transfers from trading accounts to client wallets. ### The `exchange` operation type [#the-exchange-operation-type] **Allowed statuses** A list of statuses that can be assigned to exchanges. These statuses are also displayed to clients in the B2CORE UI. *** **Hedging Enabled** If **Yes**, exchange operations are hedged; otherwise, **No**. *** **Failed Hedging** * When **Allow Exchange** is selected, an exchange is processed if hedging has failed. * When **Deny Exchange** is selected, an exchange isn’t processed if hedging has failed. In this subsection, you can set up and manage supported withdrawal methods. ## Payout methods [#payout-methods] On this page, you can view a list of configured withdrawal methods and create new ones. ### General information [#general-information] The following information is provided about each withdrawal method: **ID** The identifier of the method in the system. *** **Priority** The priority index assigned to the withdrawal method. The order in which withdrawal methods are displayed to clients in the B2CORE UI depends on priority indexes assigned to methods. A lower index means a higher priority. For example, a method with the index `1` will appear at the top of the list in the B2CORE UI. The priority index can be changed on the [Settings tab](payout-system#settings-tab) in the method details. *** **Caption** The name assigned to the method in the Back Office, which is also visible to clients in the B2CORE UI. *** **Name** The unique name for the method. It can only contain Latin letters, numbers, dashes, and underscores. *** **Group** One or more [groups](payout-system#payout-groups) in which the method is included, such as **Crypto**, **Fiat**, or other. *** **Provider** The name of the payment system. For [PSS-connected](../../integrations/payment-systems#payment-system-service-pss) payment systems, **PaymentSystemsWithdrawal** is displayed as a provider. *** **Driver**\ *Applicable only to payment systems connected via [PSS](../../integrations/payment-systems#payment-system-service-pss)* The driver used to connect to a payment system. It reflects the name of the payment system and, in some cases, the supported payment method. *** **Currency** One or more currencies supported by the method. The method will be available for accounts denominated in the selected currencies. *** **Enabled** The method status: * **No** — the method is inactive and unavailable for withdrawals. * **Yes** — the method is active and available for withdrawals. *** **Status** exclamation icon — indicates that some method settings need to be configured. Hovering over the icon displays a list of required settings, which can be adjusted in the method details. If the column is empty, all required settings for the method have been specified. To view withdrawal method details, click the **Edit** button. ### Details [#details] The details page is divided into the following tabs: * [Settings tab](payout-system#settings-tab) * [TR Currencies tab](payout-system#tr-currencies-tab) * [PS Currencies tab](payout-system#ps-currencies-tab) * [Commissions tab](payout-system#commissions-tab) * [Restrictions tab](payout-system#restrictions-tab) The set of displayed tabs may vary depending on the withdrawal method driver. For example, for methods connected via [PSS](../../integrations/payment-systems#payment-system-service-pss), the additional **Webhooks** and **Test configuration** tabs may be displayed. #### Settings tab [#settings-tab] On this tab, you can view or modify the general settings of the withdrawal method, as well as the connection settings of a payment provider. **Name** The unique name for the method. It can only contain Latin letters, numbers, dashes, and underscores. *** **Enabled** The method status: * **No** — the method is inactive and unavailable for withdrawals. * **Yes** — the method is active and available for for withdrawals. *** **Group** One or more [groups](payout-system#payout-groups) in which the method is included, such as **Crypto**, **Fiat**, or other. *** **Caption** The name assigned to the method in the Back Office, which is also visible to clients in the B2CORE UI. *** **Provider** The name of the payment system. *** **Result URL** The URL that receives callbacks with notifications about withdrawal status updates. *** **Time to fund** The hint text displayed to clients in the B2CORE UI, indicating the estimated processing time for withdrawals. Two standard options are available: * `Depending on the Blockchain` * `From 3 to 5 Days` It's possible to modify the hint text of the standard options or add new ones in **System** > **Key storage** > **Key storage values**. Use the `method_time` tag to locate the relevant keys and update the text. The hint text can be specified in HTML format, but using different formats may cause difficulties in displaying the hint on different devices. For example, while the HTML format renders correctly in the B2CORE UI, it may not work properly in mobile apps. *** **Icon** The method icon displayed to clients in the B2CORE UI for quick identification of the method. You can use predefined icons or specify a URL for a custom image. For a list of predefined icons and their names, refer to [Payment systems](../../integrations/payment-systems) and [Supported cryptocurrency payment methods](../references/supported-cryptocurrency-payment-methods). To use a predefined icon for the method, enter its name in the **Icon** field. If you prefer a custom icon, specify the URL of the image to be displayed as the method icon. *** **Priority** The priority index assigned to the withdrawal method. The order in which withdrawal methods are displayed to clients in the B2CORE UI depends on priority indexes assigned to methods. A lower index means a higher priority. For example, a method with the index `1` will appear at the top of the list in the B2CORE UI. *** **IP White list** A list of IP addresses from which it is allowed to make withdrawals. *** **Rates provider** The name of the rate provider configured on the [Currencies > Rates](../currencies/rates) page. This field is optional. If specified, the system will prioritize requesting rates from this provider when the payout method is used. *** **Auto withdrawal enabled** * **Yes** — clients can make automatic withdrawals using this method, without the need for admin approval. * **No** — automatic withdrawals are disabled. In this case, each withdrawal request must be approved by the admin in the Back Office. The use of this option depends on the settings configured for the `payout` operation type in [System > Operation types](operation-types#the-payout-operation-type). Auto withdrawal can't be enabled for the method in the following cases: * If the **Auto withdrawal** option for the `payout` operation type is disabled, which indicates that automatic withdrawals are globally disabled. * If the [group](#payout-groups) associated with the method isn't listed in the **Auto processing rules** field, meaning that automatic withdrawals are prohibited for that group and all the withdrawal methods included in it. *** **Configuration**\ *Applicable to PSS methods* The withdrawal method configuration form. Its structure and available fields depend on the selected **Driver**. The **external connection** contains technical integration data required to connect to a specific payment system, while the **configuration** defines how the withdrawal process operates. As a result, you can configure two or more withdrawal methods with different configurations that all use the same external connection. If no configuration is available for the selected driver, the following message is displayed: `Configuration form is empty`. *** **Provider settings**\ *Applicable to non-PSS methods* The settings required to connect to a payment provider. The set of connection settings varies depending on the payment provider. After specifying the connection settings, it’s possible to check if the credentials used to access the payment provider are valid. To do this, click the **Check connection** button. Currently, the **Check connection** button is available only for the B2BINPAY payment provider. * If the specified credentials are valid, the status `Success` is displayed under the button. * If the credentials are invalid, the status `Fail` is displayed, followed by an explanation message. In this case, contact the Support team. *** **Custom fields** Applicable for the **Constructor** provider only. Configure a list of fields that clients should fill in when they make withdrawals using the **Constructor** method in the B2CORE UI (for details, refer to [How to add custom fields for the Constructor deposit or withdrawal method](../../how-to-articles/manage-payment-methods/how-to-add-the-constructor-deposit-or-withdrawal-method#how-to-add-custom-fields-for-the-constructor-deposit-or-withdrawal-method)). #### TR Currencies tab [#tr-currencies-tab] On this tab, you can view and manage a list of transaction currencies added to the withdrawal method. The method will be available for accounts denominated in these currencies. The following information is provided about each currency: **ID** The identifier assigned to the currency added to the method. *** **Currency** The caption assigned to the currency. #### PS Currencies tab [#ps-currencies-tab] On this tab, you can view and manage a list of currencies supported by the payment provider for processing withdrawals. To enable the method to process withdrawals in a specific currency, ensure it is added to this list. The following information is provided about each currency: **ID** The identifier assigned to the currency added to the method. *** **Currency** The caption assigned to the currency. *** **Supported by PS** The `Supported` status indicates that the added currency is supported by the payment provider and can be used for making withdrawals. When adding a currency with a status that doesn't guarantee compatibility with the payment provider, the `Support is unknown` message is displayed. In this case, the currency can still be added to the tab, and the configuration can be saved. However, the currency might not be fully supported by the withdrawal method, so it should be used with caution. When adding a currency that isn't supported, the `Not supported` message appears. In this case, the currency can't be added to the tab, and saving the configuration isn't allowed. #### Commissions tab [#commissions-tab] On this tab, you can view and manage a list of commissions configured for the withdrawal method. The following information is provided about each commission: **ID** The commission identifier in the Back Office. *** **Currency** One or more commission currencies. *** **Commission** The commission rates that follow the formula: `Minimum commission amount <= Fixed rate + Percentage rate % <= Maximum commission amount` For details, refer to [How to configure commissions for deposit and withdrawal methods](../../how-to-articles/manage-payment-methods/how-to-configure-commissions-for-deposit-and-withdrawal-methods). *** **Type** The commission type: * **TR** (Vendor commission) — the commission that is calculated based on the currency and amount that a client specifies for withdrawal. If this commission type is configured, the client specifies an amount for withdrawal, which then will be reduced by the calculated commission. * **PSP** (Provider commission) — the commission that is calculated only for financial reports and doesn't affect the amount a client withdraws from their account. If this commission type is configured, it only applies to calculations for reports regarding completed withdrawals and is displayed in the **Provider commission** column in [Finance > Payouts](../finance/payouts). #### Restrictions tab [#restrictions-tab] On this tab, you can restrict the use of the withdrawal method by country, client type, verification level, jurisdiction, IB parent ID, or IB program type. The tab lists each restriction along with its status, type, and configured rules (for details, refer to [How to restrict the use of deposit and withdrawal methods](../../how-to-articles/manage-payment-methods/how-to-restrict-the-use-of-deposit-and-withdrawal-methods)). ## Payout groups [#payout-groups] Groups are used to organize withdrawal methods into categories, such as crypto and fiat methods, for easier management. **Priority** The priority index assigned to the group. *** **Name** The group name. *** **Caption** The group description. *** **Enabled** The group status: * **No** — the group is inactive and cannot be used to include withdrawal methods. * **Yes** — the group is active and can include withdrawal methods. On this page, you can view and manage registration profiles that define the client registration process in the B2CORE UI. The new registration settings replace [Registration wizards](wizards) and work together with [custom fields](custom-fields), allowing you to build a registration process tailored to your needs — from a simple form with an email address and a password to a multi-step process with custom fields. After enabling a registration profile, Registration wizards are automatically disabled. The following information is provided about each registration profile: **Type** The type of clients to which the registration profile applies: `Individual` or `Corporate`. *** **Caption** The name of the registration profile. *** **Enabled** Indicates whether the registration profile is enabled. To create a new registration profile, click the **Create** button. **See also** [How to migrate to the new registration settings](../../how-to-articles/manage-system-settings/how-to-migrate-to-new-registration-settings) In this subsection, you can define reject reasons for [client requests](../clients/requests). ## Resolutions [#resolutions] If you reject a client’s request, select a **resolution**, which is a reason for the rejection. On this page, you can view a list of available resolutions. **ID** The resolution identifier. *** **Caption** The resolution description. *** **Enabled** The resolution status. *** **Type** The [resolution type](requests#resolution-types). **See also** [How to create a request resolution](../../how-to-articles/manage-system-settings/how-to-create-a-request-resolution) ## Resolution types [#resolution-types] **Resolution types** are used to categorize and group different resolutions. On this page, you can view a list of available resolution types. **ID** The resolution type identifier. *** **Caption** The resolution type description. *** **Enabled** The resolution type status. **See also** [How to create a request resolution type](../../how-to-articles/manage-system-settings/how-to-create-a-request-resolution-type) ## Information Showing [#information-showing] Use the following settings to enable or disable specific options for clients in the B2CORE UI: **History IDs** If `Enabled`, clients can view identifiers of deals in their trading history in the B2CORE UI. *** **Profile IDs** If `Enabled`, clients can view identifiers assigned to their profiles in the B2CORE UI. *** **Change a nickname** If `Enabled`, clients can add and change their nicknames in the B2CORE UI. *** **Change a userpic** If `Enabled`, clients can add and change their profile pictures in the B2CORE UI. If you want requests to be created for adding or changing profile pictures, select `Yes` for the **Request required for avatar** option in [Client Settings](settings#client-settings). In this case, profile pictures are updated only after these requests are approved by the admin. *** **Show email** If `Enabled`, email addresses used by clients for signing-in are displayed in client profiles in the B2CORE UI. *** **Show nickname** If `Enabled`, the **Nickname** field is displayed in client profiles in the B2CORE UI. Nicknames are required only for clients when using [B2COPY](https://docs.b2copy.b2broker.com/). Client nicknames are displayed in the Leaderboard, allowing easy identification and distinction between accounts. ## Client Settings [#client-settings] **Unique phone** If `Enabled`, new clients must specify unique phone numbers during registration (if your registration procedure requires phone numbers) and can’t register with a phone number that has already been used by another client. *** **Request required for avatar** * If `Yes`, requests are created when clients adding or changing their profile pictures in the B2CORE UI. In this case, profile pictures are updated only after these requests are approved by the admin. * If `No`, client can add or change their profile pictures without admin approval. Both options relate to the **Change a userpic** option in [Information Showing](settings#information-showing). If **Change a userpic** is disabled, clients are not allowed to add or change their profile pictures. ## Client profile [#client-profile] **Address updating** Indicates whether clients can change their country and address in the **Profile** menu of the B2CORE UI. Address updating is available only for `individual` clients and applies only to **Residential** addresses. * **Disabled** — clients aren't allowed to change their country and address. * **KYC validation** — clients can change their country and address but are informed that their current verification level will be reset. They must complete the KYC procedure again and submit the required documents confirming the new address to restore their level. Select this option if your KYC procedure includes address verification. * **Request validation** — clients can change their country and address and must upload documents confirming the change. The **Address** request is then created and must be reviewed and approved by the admin in **Clients** > **Requests** in the Back Office. Select this option when your KYC procedure doesn't include address verification. *** ## Weblate [#weblate] **Project ID** Specify the identifier of a B2TRANSLATE project (formerly WEBLATE) used for maintaining translations to the supported languages in the B2CORE UI. For more information about B2TRANSLATE, refer to the [product documentation](https://docs.b2translate.b2broker.com/). ## Exchange [#exchange] **Quote lifetime (minutes)** Specify the interval, in minutes, during which the received quote rates are valid for making exchanges in the B2CORE UI. ## Slack Bot [#slack-bot] **Bot token** Specify a token for managing your Slack bot (for details, refer to [How to set up a Slack bot](../../how-to-articles/manage-communication-platforms/how-to-set-up-a-slack-bot)). ## Telegram Bot [#telegram-bot] **Bot API Token** Specify a token for managing your Telegram bot (for details, refer to [How to set up a Telegram bot](../../how-to-articles/manage-communication-platforms/how-to-set-up-a-telegram-bot)). ## Bonuses [#bonuses] Use the following options to configure the automatic process of crediting bonuses to clients for making deposits to their trading accounts. Bonuses are supported for trading accounts opened on MetaTrader 4/5 and cTrader. **Autocreate from deposit** * If `Enabled`, bonuses are automatically credited to clients once they deposit funds to their trading accounts (for details, refer to [How to automatically credit bonuses to clients upon deposits](../../how-to-articles/manage-bonuses/how-to-automatically-credit-bonuses-to-clients-upon-deposits)). To enable automatic bonus crediting upon deposits, create a bonus preset for each platform where this feature is needed. The preset with the **lowest** index on a given platform will be used for automatic bonus crediting (for details, refer to [How to create a bonus preset](../../how-to-articles/manage-bonuses/how-to-create-a-bonus-preset)). * If `Disabled`, automatic bonuses for making deposits to trading accounts aren’t credited. *** **Autocreated bonus percent** The percentage of a deposit amount, which is credited as a bonus to a client trading account. *** **Auto Bonus Limit** The maximum bonus amount that can be automatically credited to a client trading account for making a deposit. If a calculated bonus amount exceeds the specified limit, only the maximum allowed amount is credited to the account. *** **Auto Bonus Minimum** The minimum amount that a client must deposit to their trading account to trigger automatic bonus crediting. This amount applies to each deposit and transfer operation made to the account, and it doesn’t relate to an overall sum of deposits made by a client. *** **Enable "Burn if Equity \< Credit"**\ *Applicable for MT4/5 only* Select the platforms on which you want to enable this option. This option can be enabled for MT4/5 and isn't supported for cTrader. On the selected platforms, a bonus credited to a client trading account is burnt if the account equity falls below the credited bonus amount. *** **Burn on withdrawal** * If `Enabled`, when a client makes a withdrawal from their trading account, a bonus credited to that account is burnt. * If `Disabled`, withdrawals don’t affect the credited bonus. ## User Registration Settings [#user-registration-settings] **Enable User Registration** * If `Enabled`, new clients can register in the B2CORE UI. * If `Disabled`, the registration of new clients is unavailable. ## Two-factor authentication [#two-factor-authentication] **Enabled Two-factor auth providers** Select the 2FA methods that will be visible and available for clients to use in the B2CORE UI. You can enable both Google Authenticator and SMS confirmation, or only one of them. **Service name** Enter the name to be displayed in the Google Authenticator app, representing the B2CORE UI for which 2FA codes are generated. ## Mobile [#mobile] The options in this section are applicable if you have the mobile app deployed (for details, refer to [B2CORE Mobile](../../b2core-mobile/deploying-your-ios-app)). Clients can sign in to the B2CORE UI by scanning QR codes displayed on the **Sign In** page using the mobile app to which they have already been signed in. This allows them to sign in without re-entering their credentials. **QR-code lifetime, min** * To limit the QR code lifetime, specify the number of minutes a QR code is valid. The default limit is set to 2 minutes. * To hide QR codes from the **Sign In** page, specify **0** or leave this field empty. *** **Mobile application** Select the platforms for which you want to display the button for downloading the mobile app. The button will appear on the **Sign In** page of the B2CORE UI and at the top of the **Dashboard** after clients sign in (for details, refer to [How to configure settings for mobile app downloads](../../how-to-articles/manage-system-settings/how-to-configure-settings-for-mobile-app-downloads)). — By default, this field is empty. Possible options: * **iOS** — select this option to provide a link for downloading your iOS app from the Apple Store. * **Android** — select this option to provide a link for downloading your Android app from Google Play. * **Android APK Registry** — select this option to provide a link for downloading the Android APK. *** **iOS URL** If you selected **iOS**, specify the URL for downloading the iOS app from the Apple Store. *** **Android URL** If you selected **Android**, specify the URL for downloading the Android app from Google Play. *** **Android APK Registry ID** If you selected **Android APK Registry**, specify the universally unique identifier (UUID) of the Android APK. This UUID is used to generate the download link for the Android APK. *** ## Metatrader 4 and Metatrader 5 [#metatrader-4-and-metatrader-5] **Partner program enabled** If `Enabled`, IB programs are available on the respective platforms. ## Other settings [#other-settings] **Confirmation phone code lifetime** Specify the period, in seconds, during which a verification code sent to a client phone number is valid. *** **Sms limit for each recipient** Specify the maximum number of verification code messages that can be requested by a client per day. *** **User-admin session between 1 – 120 (min)** Specify the session time limit for [Back Office users](users/), in minutes. The default limit is set to 24 minutes. After reaching a specified time limit, users are automatically signed out of the Back Office. On this page, you can view a list of connected SMS providers. **Name** The name assigned to an SMS provider configuration. *** **Caption** The name of an SMS provider, used in the Back Office. *** **Provider** The name of an SMS provider. *** **Enabled** If **Yes**, an SMS provider is enabled and used for delivering SMS to your clients; otherwise, **No**. To view the configuration settings of an SMS provider, click **Edit**. **See also** [How to configure Twilio](../../how-to-articles/manage-communication-platforms/how-to-configure-twilio) The **Status Checks** page gives you an at-a-glance view of the health of important parts of your B2CORE instance. Each check runs automatically on a schedule and records its result, so you can spot problems, such as an unreachable trading platform or an incomplete setup, without leaving the Back Office. To open the page, go to **System** > **Status Checks** in the main menu. ## Failed checks indicator [#failed-checks-indicator] When one or more checks are failing, a warning icon appears in the topbar, next to the notifications bell, with a badge showing the number of failed checks. Click the icon to open a drop-down list of the currently failing checks. Each item shows: * The check name. * A short description of the problem. * A chip indicating how long ago the check last ran, for example, **5 minutes ago**. Select a check in the list to open the **Status Checks** page and jump to that check. Only checks with the **Failed** or **Error** status appear in the indicator. Checks with the **OK**, **Pending**, or **Unknown** status are not counted. ## Status timeline [#status-timeline] The page lists every registered check. For each check, a horizontal timeline shows how its status changed over time, with consecutive runs of the same status grouped into a single colored period. The timeline covers up to one month. For a recently deployed instance, it starts at the first recorded run instead, so the window stays meaningful. Each check also shows: * A badge with the current status. * The time of the last run, or **never run** if there are no recorded runs yet. * The rendered details of the most recent run, for example, the list of unreachable platforms. ## Statuses [#statuses] A check run can have one of the following statuses. *** **OK** The check passed. The monitored area is healthy. *** **Failed** The check detected a problem, for example, a trading platform is unreachable or a required setup is missing. *** **Error** The check could not complete because of an unexpected error. The recorded details include the error message. *** **Pending** A check run has started and is awaiting its result. *** **Unknown** The status could not be determined, for example, a run did not complete or the check was reset. Unknown results are not treated as failures. *** **No data** No check runs were recorded for that part of the timeline. ## Available checks [#available-checks] The following checks are available by default. *** **Live platforms connectivity** Verifies that every enabled live trading platform is reachable. *** **Demo platforms connectivity** Verifies that every enabled demo trading platform is reachable. *** **Visual customization** Verifies that the base resources, such as logos, favicons, and backgrounds, and a color scheme are configured on the [Visual customization](visual-customization) page. *** **New Registration settings** Verifies that client registration is enabled and that at least one registration configuration is enabled on the **System** > **Registration** page. Use the options in this section to customize the appearance of your B2CORE UI to reflect your brand’s unique style. ## Key points [#key-points] The available options enable you to: * Select whether you want to enable the light theme, dark theme, or both for your B2CORE UI, and choose which one should be set as the default. * Upload custom logos for both themes of your B2CORE UI. * Adjust the colors of various UI elements for both light and dark themes. * Set and update background images for the **Sign In** and **Sign Up** pages of the B2CORE UI. * Add custom scripts, for example, for chatbot integration and analytics tracking. ## Resources [#resources] On this page, you can upload or modify the logos displayed in your B2CORE UI, as well as background images for the **Sign Up** and **Sign In** pages , if needed. **Logo for light theme** The main logo displayed in the B2CORE UI when the light theme is enabled. The required format: SVG with transparent background, file size up to 10 MB. *** **Short logo for light theme** A compact version of the logo displayed when the main menu is collapsed in the light theme. The required format: SVG with transparent background, file size up to 10 MB. *** **Logo for dark theme** The main logo displayed in the B2CORE UI when the dark theme is enabled. The required format: SVG with transparent background, file size up to 10 MB. *** **Short logo for dark theme** A compact version of the logo displayed when the main menu is collapsed in the dark theme. The required format: SVG with transparent background, file size up to 10 MB. *** **Favicon (.ico)** The small icon shown in the browser tab. The required format: ICO, file size up to 10 MB. *** **Favicon (.svg)** The vector version of the favicon for browsers that support SVG. The required format: SVG, file size up to 10 MB. Will be used as a scalable icon. *** **Apple touch icon** The icon displayed on Apple devices when the B2CORE UI page is added to the home screen. The required format: PNG, 180×180 pixels, file size up to 10 MB. *** **Light theme background** The background image applied to the **Sign Up** and **Sign In** pages when the light theme is enabled. Adding a background image is optional. The recommended format: SVG, JPG, or PNG, file size up to 10 MB. *** **Dark theme background** The background image applied to the **Sign Up** and **Sign In** pages when the dark theme is enabled. Adding a background image is optional. The recommended format: SVG, JPG, or PNG, file size up to 10 MB. ### Admin Panel images [#admin-panel-images] In this section, you can upload the images displayed in the Back Office (the recommended format: JPG, PNG, or SVG, file size up to 10 MB): * **Logo menu** — the logo displayed in the Back Office main menu * **Login page logo** — the logo displayed on the Back Office sign-in page * **Login page background** — the background image applied to the Back Office sign-in page ## Color Scheme [#color-scheme] On this page, customize color settings for the light and dark themes of your B2CORE UI. In the **Brand Configuration** section, you can quickly set up your brand identity by specifying the **Brand color** and enabling the **Tinted backgrounds** option, which applies a subtle tint of the brand color to interface backgrounds. The color settings for individual interface elements described below are available in the **Advanced color settings** section. **Light theme enabled** Select the checkbox to enable the light theme for the B2CORE UI. Enable the **Default** option to set the light theme as the default if both themes are enabled. *** **Dark theme enabled** Select the checkbox to enable the dark theme for the B2CORE UI. Enable the **Default** option to set the dark theme as the default if both themes are enabled. If neither theme checkbox is selected, your B2CORE UI will use the predefined light and dark themes from the B2BDemo design, and all custom color settings listed below will be ignored. If both theme checkboxes are selected, both themes will be available to clients in the B2CORE UI, along with the applied custom color settings. Visual customization — Color Scheme The advanced color settings are organized into the **Semantic Tokens V1 (Light / Dark)** and **Semantic Tokens V2 (Light / Dark)** sections, allowing you to customize each color token separately for the light and dark themes. To reset the color tokens to the values derived from your brand color, click the **Reset colors from brand** button. Only 6- or 8-character hexadecimal color codes are supported. The **Semantic Tokens V1 (Light / Dark)** section includes the following token groups: * **Accent** — `accent`, `accentHover`, `accent40`, `accent10`, `demo` * **Status** — `positive`, `positive20`, `medium`, `medium20`, `negative`, `negative20` * **Surface** — `background`, `background96`, `card`, `field`, `disabled`, `overlay`, `tooltip`, `divider` * **Text** — `textMain`, `textSecondary`, `textSecondary40`, `textContrast` The **Semantic Tokens V2 (Light / Dark)** section includes the following token groups: * **Accent** — `brand`, `brandSubtle`, `brandMuted`, `alternative`, `alternativeSubtle`, `alternativeMuted`, `positive`, `positiveSubtle`, `positiveMuted`, `medium`, `mediumSubtle`, `mediumMuted`, `negative`, `negativeSubtle`, `negativeMuted`, `neutral`, `overlay`, `overlaySubtle`, `overlayMuted` * **Character** — `onSurface`, `onSurfaceSecondary`, `onSurfaceInverse`, `onBrand`, `onAlternative`, `onPositive`, `onMedium`, `onNegative`, `onNeutral`, `onOverlay`, `onSurfaceBrand`, `onSurfaceAlternative`, `onSurfacePositive`, `onSurfaceMedium`, `onSurfaceNegative`, `onSurfaceOverlay` * **Surface** — `surfaceLow`, `surface`, `surfaceHigh`, `surfaceHighest`, `surfaceInverse`, `backdrop` * **Outline** — `outline`, `outlineStrong` * **State** — `stateHovered`, `statePressed`, `stateHoveredInverse`, `statePressedInverse`, `stateDarken`, `stateDarkenStrong` **Additional light/dark theme variables (json)** Use this field to specify a JSON object with additional variables, such as those that define how a background image behaves in the respective theme: ```json { "optional-external-bg-position": "0 0", "optional-external-bg-size": "cover", "optional-external-bg-repeat": "no-repeat", "optional-external-bg-attachment": "fixed" } ``` `"optional-external-bg-position": "0 0"` Positions the background image at the **top-left corner**. *** `"optional-external-bg-size": "cover"` Scales the background image to cover the entire page. *** `"optional-external-bg-repeat": "no-repeat"` Prevents the background image from repeating (tiling) in any direction. *** `"optional-external-bg-attachment": "fixed"` Keeps the background image fixed in place when the page is scrolled. It won't move with the content. *** ## Fields [#fields] On this page, you can specify additional customization fields. **Project name** The name of your project displayed in the B2CORE UI. *** **Scripts (js-script)** Add your JavaScript (JS) scripts here. These scripts will be executed automatically when the **Sign Up** or **Sign In** page is opened by clients. On this page, you can view a list of added and configured wizards. **Wizards** are tools used to configure and modify workflows of specific procedures that run in the B2CORE UI, such as client registration, authorization, password recovery, and others. You can configure multiple wizards for each procedure. In such cases, you should select the default wizard that will be used to run a procedure in the B2CORE UI. Non-default wizards may outline procedures used by external systems to perform certain actions via API. ## General information [#general-information] The following information is provided about each wizard: **ID** The wizard identifier. *** **Name** The wizard name. *** **Type** The type indicating the procedure for which the wizard outlines the workflow. *** **Enabled** If `Yes`, the wizard is enabled and used for running a procedure; otherwise, `No`. *** **Default** If `Yes`, the wizard is used by default in the case when more than one wizard is configured for the same procedure; otherwise, `No`. To view wizard details, click the **Edit** button. ## Details [#details] The details page is divided into the following tabs: * **Wizard** tab — displays the main wizard parameters * **Workflow** tab — lists the required and additional steps included in a procedure workflow The required steps can’t be removed from a procedure workflow. To include additional steps in the workflow, click the **Add** button and select a step from the list of additional steps supported for a selected wizard. Both the required and additional steps are automatically assigned designated priority indexes that define the order in which the steps are executed when running a procedure in the B2CORE UI. The steps can’t be reordered. The following are some of the supported wizards, along with their full lists of required and additional steps that form the procedure workflows. Required steps are labeled as `required`. Additional steps can be added to or removed from procedure workflows as necessary. The order of the steps can’t be changed. ### Registration wizard [#registration-wizard] The wizard outlines the procedure of signing up new clients to the B2CORE UI. **See also** [How to add and configure the registration wizard](../../how-to-articles/manage-system-settings/how-to-set-up-the-registration-wazard/how-to-add-and-configure-the-registration-wizard) [How to set up fields for the Basic Information step](../../how-to-articles/manage-system-settings/how-to-set-up-the-registration-wazard/how-to-set-up-fields-for-the-basic-information-step) [Fields supported in the Basic Information step](../../how-to-articles/manage-system-settings/how-to-set-up-the-registration-wazard/fields-supported-in-the-basic-information-step) [How to set up fields for the Advanced step](../../how-to-articles/manage-system-settings/how-to-set-up-the-registration-wazard/how-to-set-up-fields-for-the-advanced-step) [How to block registration for country](../../how-to-articles/manage-system-settings/how-to-block-registration-for-a-country) ### Authorization wizard [#authorization-wizard] The wizard outlines the procedure of signing in to the B2CORE UI. ### Password recovery wizard [#password-recovery-wizard] The wizard outlines the procedure of recovering client passwords for accessing the B2CORE UI. ### Password change wizard [#password-change-wizard] The wizard outlines the procedure of changing client passwords for accessing the B2CORE UI. ### Address change wizard [#address-change-wizard] The wizard outlines the procedure of changing the client address. ### Whitelist creation wizard [#whitelist-creation-wizard] The wizard outlines the procedure of creating a withdrawal whitelist and adding wallet addresses to that list. ### Whitelist delete wizard [#whitelist-delete-wizard] The wizard outlines the procedure of deleting wallet addresses from the withdrawal whitelist that was previously created by a client. ### Whitelist change wizard [#whitelist-change-wizard] The wizard outlines the procedure of disabling the withdrawal whitelist that was previously created by a client. ### Withdrawal wizard [#withdrawal-wizard] The wizard outlines the procedure of making withdrawals in the B2CORE UI. **See also** [How to change the wizard workflow](../../how-to-articles/manage-system-settings/how-to-change-the-wizard-workflow) You can add custom items to the menu displayed in both the B2CORE UI and mobile app. In the mobile apps, these items appear in the **Services** section. This functionality is supported starting from **iOS** v1.29 and **Android** v2.6.0. To be able to add custom menu items, you should be granted the `Update menu` permission (for details, refer [How to add a user group and grant permissions](../manage-system-settings/how-to-add-a-user-group-and-grant-permissions)). To add a custom menu item: Navigate to **Promotion** > **Menu**. To view a list of available menu items, click the **eye** icon located in the **General** row. Custom menu items can be added under the **General** menu tree or within any existing menu item. To navigate inside an existing item, click the eye **icon** in the respective row. Click **+Create** in the upper-right page corner. In the displayed popup, fill in the following required fields: * In the **Name** field, enter a unique name for the menu item. * On the **Caption** field, enter a caption for the menu item that will be displayed to clients in the B2CORE UI menu or the **Services** section of the mobile app. * In the **External URL** field, specify the URL to an external resource or web page to which clients will be redirected when they click the menu item. * In the **Icon** field, specify the URL of an image that will be used as the menu icon in the B2CORE UI. The image must meet the following requirements: * **Format**: SVG * **Size**: 16×16 pixels * **Style**: monochrome (single color, typically black or white: #000000/ #FFFFFF) * **Background**: transparent (recommended) Optionally, apply restrictions to the menu item: * To make the menu item available only to clients with specific verification levels, select the appropriate levels in the **Verification Level Allowance** dropdown. * To make a menu item available only to clients that are assigned specific types, select the corresponding types in the **Client Type Allowance** dropdown. If no options are selected in these dropdowns, the menu item will be available to all clients without any restrictions. To mark the menu item as "New" in the B2CORE UI, enable the **New** checkbox. To mark the menu item visible in the B2CORE UI and mobile app, enable the **Visible** checkbox; otherwise, it will be hidden. Click **Save** to add the custom menu item. The custom menu item will appear in the menu tree. To adjust its position, simply drag and drop it to the desired location. If needed, specify the localization properties for the item caption by clicking the button located on the right side of its caption in the **Caption** field. You can add the **Contact Us** section under the main menu in the B2CORE UI to display your support email or other contact details, making it easier for clients to reach you. This can be configured through B2TRANSLATE. For more information about B2TRANSLATE, refer to the [product documentation](https://docs.b2translate.b2broker.com/). To complete the steps below, you must be registered on B2TRANSLATE and have access to the project linked to your B2CORE. To add the **Contact Us** section: Navigate to **System** > **Settings** to locate the UUID of the B2TRANSLATE project linked to your B2CORE and copy it. Sign in to B2TRANSLATE. In B2TRANSLATE, go to **Projects** and find the related project by UUID. Locate the key `B2Core.Shared.ModelTranslates.EmailTranslateKeys.Email1` in the **default** category. If the **padlock** icon near the **Translation** field is locked, unlock it. In the **Translation** field, enter the contact details. HTML formatting is supported (for details, refer to [Add or modify translations](https://docs.b2translate.b2broker.com/user-guide/manage-translations/add-or-modify-translations) in the B2TRANSLATE documentation). Example: ```html

Contact Us

Send email ```
The changes are saved automatically. Leave the **padlock** icon unlocked.
With the above provided HTML example, the **Contact Us** section will be displayed under the main menu in the B2CORE UI followed by the **Send email** link, which clients can use to quickly send messages. This method allows you to add important details to your B2CORE UI, such as contact information, support links, or other messages. To add Ticker Widget symbols: Navigate to **Promotion** > **Dashboard**. On the **Widgets List** page, select either **Ticker Widget MT4** or **Ticker Widget MT5**, and then click the **Edit** button located in the **Actions** column. To add a symbol, click the **+Create** button displayed on the **Edit** page. In the displayed **Add ticker instrument** popup, specify the following information: * In the **Symbol** field, type a symbol that you want to add. * In the **Show** dropdown, select either of the two options: * **Yes** – to display the symbol in the corresponding widget on the **Dashboard** in the B2CORE UI. * **No** – to allow selecting the symbol from the drop-down list and adding it to the corresponding widget on the **Dashboard** in the B2CORE UI. Click **Save** to apply the changes. You can customize the menu displayed to your clients in the B2CORE UI. To be able to customize the menu, you should be granted the `Update menu` permission (for details, refer [How to add a user group and grant permissions](../manage-system-settings/how-to-add-a-user-group-and-grant-permissions)). To customize the B2CORE UI menu: Navigate to **Promotion** > **Menu**. To view a list of available menu items, click the **eye** icon located in the **General** row. To display or hide a menu item in the B2CORE UI, toggle the switch located in the **Visible** column. To change the order in which menu items are displayed in the B2CORE UI, drag and drop them in the required order. Click the **Edit** button related to a selected menu item and configure the following options: * In the **Caption** field, specify a menu item name that you want to display to clients in the B2CORE UI. * To make a menu item visible only to clients who obtained specific verification levels, select the corresponding levels in the **Verification level allowance** dropdown. By default, all verification levels configured in the Back Office are displayed in this field. * To make a menu item visible only to clients that are assigned specific types, select the corresponding types in the **Client Type Allowance** dropdown. * To mark a menu item as "New" in the B2CORE UI, enable the **New** checkbox. Click **Save** to apply the changes. When clients sign in to the B2CORE UI for the first time, they see the default **Dashboard**. As an admin, you can change the widgets and the layout of the default **Dashboard** to show the most important information for your clients. The default dashboard configuration is restored by clicking the **Reset** button. To set up the default dashboard configuration, do the following: Navigate to **Promotion** > **Dashboard**. For widgets that you want to show on the **Dashboard**, enable the switches located in the **Show by default** column. To allow clients to close widgets shown on the **Dashboard**, enable the switches located in the **Delete** column. For such widgets, the **Close** (⨯) button will be available in the B2CORE UI. To set up a widget size and location on the **Dashboard**, select a widget from the list, and then click the **Edit** button located in the **Actions** column. On the **Edit** page, specify the widget size in points by entering integer values in the **Width** and **Height** fields. The dashboard width is limited by 50 points, and the width of a widget cannot exceed this value. The minimum width as well as the minimum and maximum height vary for each widget and depend on the data it displays. If the values that you have specified are not accepted, a corresponding error message is displayed. Locate the widget on the **Dashboard** by specifying the coordinates in the **Position X** and **Position Y** fields. Only positive values are accepted. Positions X and Y indicate the coordinates of the upper-left corner of the widget. To locate the widget on the **Dashboard** properly, the sum of the values specified in the **Width** and **Position X** fields must be less than or equal to the **Dashboard** width, which is 50 points. `Width + Position X <= 50` Click **Save**. You can create banners that will be displayed to your clients in the B2CORE UI, mobile app, or mobile browser. ## How to create a desktop banner [#how-to-create-a-desktop-banner] To create a banner that will be displayed to your clients in the B2CORE UI: Navigate to **Promotion** > **Banners**. Click **+Create** in the upper-right page corner. In the **Create Banner** popup that appears, fill in the following fields: * In the **Caption** field, enter a title for your banner. You can leave this field empty and create a banner without a title. * In the **Banner URL** field, enter a URL tail defining a page on which your banner will be shown in the B2CORE UI (for example, `/dashboard`, `/wallets`, `/funds/deposit`, or other). * In the **Banner priority** field, enter an integer value defining the order for displaying banners if there is more than one banner created. For example, a banner with the priority set to 1 will be shown first on a web page; a banner with the priority set to 2 will be shown following the first banner, and so on. * From the **Banner Type** dropdown, select **Desktop**. Click **Save** to create the banner. Click the **Edit** button in the banner row to configure banner settings. On the **Edit banner** page, fill in the following fields: ### Banner tab [#banner-tab] * In the **Button link** field, enter a URL path to an external resource. This URL will be opened upon clicking a button displayed on your banner. ### Light and Dark tabs [#light-and-dark-tabs] * The **Caption** field displays the title you entered when creating your banner. You can change the title font color and weight for the themes by inserting the following HTML code: `Banner Title` * In the **Button** field, enter the text to be displayed as the button label. * In the **Text** field, enter the text that will be displayed under your banner title. You can change the text font color and weight for the themes by inserting the following HTML code: `Text that will be displayed on your banner` * In the **Banner Background** field, specify the URL of an image that you want to use as a background for the selected theme. * To apply localization settings, click the buttons located on the right side of the **Caption**, **Button**, and **Text** fields and enter translations for the required languages. Click **Save** to apply the changes. After configuring the banner settings, set the **Enabled** dropdown to **Yes** on the **Banner** tab to display the banner in the B2CORE UI. ## How to create a banner for the mobile app [#how-to-create-a-banner-for-the-mobile-app] To create a banner that will be displayed to your clients in the mobile app or when accessing B2CORE via a mobile browser: Navigate to **Promotion** > **Banners**, and click **+Create** in the upper-right corner of the page. In the **Create Banner** popup that is displayed, fill in the following fields: * In the **Caption** field, enter a title for your banner. You can leave this field empty and create a banner without a title. * In the **Banner URL** field, enter `/dashboard`. All banners will be displayed at the top of the **Home** screen in the app. * In the **Banner Priority** field, specify an integer value defining the order for displaying banners if there is more than one banner created. * From the **Banner Type** dropdown, select **Mobile**. * Click **Save**. On the **Banner** tab, specify the following settings: * The **Title** field displays the banner title that was specified at Step 2. You can leave this field empty and create a banner without a title. * In the **Sub Title** field, enter a banner subtitle. You can leave this field empty and create a banner without a subtitle. * From the **Vertical Align** and **Horizontal Align** dropdowns, select the appropriate values to align both the title and subtitle vertically and horizontally. * In the **Button Link** field, specify a URL to an external resource. This URL is opened after tapping a banner in the mobile app. * In the **Button Title** field, specify a button caption. You can leave this field empty and create a banner without a button. * In the **Preview Text** field, specify a description for the preview that is displayed after clicking a banner. You can leave this field empty and create a banner without a preview text. * Set the **Preview Enabled** option to **Yes** to make a banner preview available in the mobile app. * In the **Padding** field, specify a number of points to define the padding area for all four sides of a text block. * To make the banner available to your clients in the mobile app, set the **Enabled** field to **Yes**, and then click **Save**. To specify background images for the light and dark themes of your banner, switch to the **Light** or **Dark** tab. In the **Image URL** field, specify the URL of an image that you want to use as a background image for your banner. The recommended banner size for the mobile app is 840 × 360 px (aspect ratio 21:9). The supported image format is PNG. Click **Save** to apply the changes. ## How to restrict banner display [#how-to-restrict-banner-display] You can control which clients see a banner by applying restrictions based on **country**, **verification level**, **client type**, or **jurisdiction**. You can also combine these restrictions for more precise targeting. To apply restrictions to a banner: Navigate to **Promotion** > **Banners**. Select the banner and click the **Edit** button. ### Country restrictions: [#country-restrictions] * On the **Edit banner** page, click the **Actions** button in the upper-right page corner, and then select **Country restrictions** in the dropdown. * In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — the banner will be displayed to all clients except for those from the selected countries. * **Allow only** — the banner will be displayed only to clients from the selected countries. * In the **Rules** dropdown list, select one or more countries. ### Verification level restrictions: [#verification-level-restrictions] * On the **Edit banner** page, click the **Actions** button in the upper-right page corner, and then select **Verification level restriction** in the dropdown. * In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — the banner will be displayed to all clients except for those with the selected levels. * **Allow only** — the banner will be displayed only to clients with the selected levels. * In the **Rules** dropdown list, select one or more verification levels. ### Client type restrictions: [#client-type-restrictions] * On the **Edit banner** page, click the **Actions** button in the upper-right page corner, and then select **Client type restrictions** in the dropdown. * In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — the banner will be displayed to all clients except for those with the selected client types. * **Allow only** — the banner will be displayed only to clients with the selected client types. * In the **Rules** dropdown list, select one or more client types. ### Jurisdiction restrictions [#jurisdiction-restrictions] * On the **Edit banner** page, click the **Actions** button in the upper-right page corner, and then select **Jurisdiction restrictions** in the dropdown. * In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — the banner will be displayed to all clients except for those with the selected jurisdictions. * **Allow only** — the banner will be displayed only to clients with the selected jurisdictions. * In the **Rules** dropdown list, select one or more jurisdictions. Click **Save** to apply the restrictions. To create an announcement: Navigate to **Promotion** > **Announcements**. Click **+Create**. Select the announcement **Type**: * **Required** — includes a button and blocks interaction with the B2CORE UI until the client clicks the button. * **Optional** — doesn't require client action and is displayed when the client clicks the **Announcements** icon in the topbar of the B2CORE UI. Enter the announcement **Title**. Click **Save** to create the announcement. Newly created announcements are disabled by default. Click **Edit** in the announcement row to configure its settings. Fill in the following fields: * Add localized versions of the **Title**, if needed. * Set **Enable** to **Yes**. * **Button text** *(applicable only to Required announcements)* — enter the label of the action button. * **Targeted emails** — enter client emails to limit the announcement to specific recipients. You can also upload a CSV file with emails. * **Text** — enter the announcement message and add localized versions, if needed. * **Button URL** — specify the URL to which clients will be redirected after clicking the button displayed in the announcement. * **Due to Date** — set the expiration date. After this date, the announcement will no longer be displayed in the B2CORE UI. Click **Save** to activate the announcement. You can automatically credit bonuses to your clients for depositing funds to their trading accounts. In this case, the bonus amount is calculated as a percentage of the deposited amount. For details of the process of awarding bonuses to clients, refer to [Introduction to bonuses](../../back-office-guide/bonuses/#introduction-to-bonuses). To configure the automatic process of crediting bonuses upon deposits: * Configure settings for automatic bonus crediting on the **System** > **Settings** page (proceed to the steps listed below). * Create a bonus preset for each [trading platform](../../back-office-guide/products/platforms) where you want bonuses to be automatically credited upon deposits. The preset created for a specific platform must have the **lowest** priority index to be used for automatic bonuses (for details, refer to [How to create a bonus preset](how-to-create-a-bonus-preset)). If there is no preset for a specific trading platform, automatic bonuses won't be credited to client trading accounts on that platform. If any [restrictions](how-to-create-a-bonus-preset#how-to-restrict-the-use-of-a-bonus-preset) are applied to the preset used for automatic bonuses, they will be credited only to the clients who satisfy the restriction criteria. To configure settings for automatic bonus crediting upon deposits: Navigate to **System** > **Settings**. In the **Bonuses** section, specify the following settings: * Set **Autocreate from deposit** to **Enabled**. * In the **Autocreated bonus percent** field, enter the percentage of a deposit amount, which you want to credit as a bonus to your clients. * In the **Auto Bonus Limit** field, specify the maximum bonus amount that can be credited to a client trading account automatically. If the calculated bonus amount exceeds this limit, only the maximum allowed amount will be credited. * In the **Auto Bonus Minimum** field, specify the minimum amount that clients must deposit or transfer to their trading accounts to trigger automatic bonus crediting for each operation. This minimum amount isn’t related to the total sum of deposits made by a client. * In the **Enable "Burn if Equity \< Credit"** dropdown, select the platforms on which you want to enable the burning of a bonus credit if the account equity falls below the credited bonus amount. This option can be enabled for MT4/5 and isn't supported for cTrader. * Set the **Burn on Withdrawal** option to **Enabled** to burn the bonus credit when a client withdraws funds from their trading account. Click **Save** to apply the changes. ## Example [#example] This example illustrates how to interpret the requirements for automatic bonus crediting upon deposits, based on the settings configured on the **System** > **Settings** page and the bonus preset named `MT4`: Bonus preset Suppose that a client deposits funds to their trading account opened on the `MetaTrader4 Live` platform. Given that **Autocreate from deposit** is set to **Enabled** and the bonus preset for `MetaTrader4 Live` is available on the **Bonus presets** page, the client is eligible to receive a bonus for their deposit. The requirements for receiving the bonus are detailed below: You can create one or more bonus presets that include the settings required for configuring bonuses. To create a bonus preset: Navigate to **Bonuses** > **Bonus Presets**. Click **Create**, and then select the trading platform to which the bonus preset can be applied. On the **Create Bonus Preset** page, fill in the following fields: * **Name** — enter the name that you want to use for the preset in the Back Office. * **Priority** — specify the priority index of the preset. The preset with the lowest index on a given platform is used for automatic bonus crediting. * **Lifetime** — specify the number of days within which clients must fulfill the requirements of a bonus program. * **Lot per unit** — enter the ratio that is used to determine the volume that must be traded by clients. * The ratio is applied to a bonus amount, and the required volume is calculated as follows: `Required volume = Bonus amount / Lot per unit` * **Set credit immediately** — select either of the two values: * If **Enabled**, bonuses from different bonus programs are immediately added to a client trading account as credit, enabling the client to use credit funds for trading. * If **Disabled**, bonuses from different bonus programs are added to a client trading account one after another. Only after a bonus from the first bonus program is processed and assigned the final status (`Completed` or `Expired`), the second bonus is added to the client trading account as credit, and so on. * **Ignored open/close interval** — specify the minimum duration, in seconds, for which clients must keep positions open for them to be counted towards the traded volume. * **Autoenable trading if balance > 0** — select either of the two values: * If **Enabled**, when the account balance changes from zero or negative to positive, the `Trade Enabled` permission is automatically restored for the account, enabling the client to resume trading on their account, including the use of the bonus credit. * If **Disabled**, when the account balance changes from zero or negative to positive, the `Trade Enabled` permission isn’t automatically restored for the account. * **Ignored symbol groups** — optionally, select one or more symbol groups in which trades aren't counted towards the traded volume. For cTrader, individual symbols must be selected in this field instead of symbol groups, even though symbol groups are available on the cTrader platform. You can leave this field empty. Click **Save** to create the preset. The preset appears in the list of bonus presets. Check the priority index assigned to the preset. It's important if plan to use this preset for automatic crediting of bonuses to clients for depositing funds to their trading accounts (for details, refer to [How to automatically credit bonuses to clients upon deposits](how-to-automatically-credit-bonuses-to-clients-upon-deposits)). The preset with the **lowest** priority index, created for a specific platform, will be used for automatic bonuses. If needed, change the priority in the preset details. ## How to restrict the use of a bonus preset [#how-to-restrict-the-use-of-a-bonus-preset] You can restrict the use of a bonus preset based on a client's **country**, **client type**, **verification level**, **jurisdiction**, or **introducing broker (IB)**. You can also restrict a preset to be used only with specific [products](../../back-office-guide/products/products). Additionally, you can apply a combination of these restrictions to further narrow down eligibility for using the preset. If a client doesn't meet the restriction criteria, the preset can't be used to credit bonuses to that client, including through the [automatic process of crediting bonuses to clients upon deposits](how-to-automatically-credit-bonuses-to-clients-upon-deposits), if restrictions are applied to the preset used for automatic bonuses on a given platform. To restrict the use of a bonus preset: Navigate to **Bonuses** > **Bonus Presets**. Select the bonus preset and click the **Edit** button in the preset row. Click **Actions** in the upper-right page corner, and then select the restriction type: * **Country restrictions** — to make the preset available only to client from specific countries. * **Client type restrictions** — to make the preset available only to clients of selected types, such as Corporate or Individual. * **Verification level restrictions** — to make the program available only to clients with specific verification levels. * **Jurisdiction restrictions** — to make the preset available only to clients under selected jurisdictions. * **Introducing broker restrictions** — to make the preset available only to clients who are referrals of the specified IBs. * **Product restrictions** — to make the preset available for use only with specific [products](../../back-office-guide/products/products). In the **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option prevents the use of the preset when the selected rules are matched. * **Allow only** — this option allows the use of the preset only when the selected rules are matched. * In the **Rules** dropdown, elect one or more values that define the restriction — such as countries, client types, verification levels, jurisdictions, IBs, or products — depending on the restriction type you're applying. Click **Save** to apply the changes. The bonus preset now has usage restrictions applied. You can create temporary bonus programs in the Back Office. Once a bonus program is created, it’s immediately displayed on the **Bonuses** page in the B2CORE UI, enabling clients to claim bonuses from that program. To create a temporary bonus program: Navigate to **Bonuses** > **Temporary Bonuses**. Click **Create**, and then select the trading platform for which you want to create the bonus program. On the **Create Temporary Bonus** page, fill in the following fields: * In the **Name** field, enter the name of the bonus program, which will be displayed to clients in the B2CORE UI. * In the **Amount** field, specify the bonus amount. * In the **Currency** dropdown, select the currency for the bonus program. Only trading account denominated in the selected currency can be used to claim the bonus from the program. * In the **Expired** filed, set the end date and time for the bonus program. * In the **Platform Groups**, select one or more groups created on the trading platform, in which trades are counted towards the traded volume of the bonus program. * In the **Preset** dropdown, you can optionally select a preset to automatically fill in the remaining fields based on preset settings. Alternatively, you can leave the **Preset** field empty and fill in the remaining fields manually: * In the **Lifetime (days)** field, enter the duration, in days, during which clients must trade the required volume. * In the **Lot per unit** field, enter the ratio that is used to determine the volume that must be traded by clients. The ratio is applied to the specified bonus amount, and the required volume is calculated as follows: `Required volume = Bonus amount / Lot per unit` * In the **Set credit immediately**, select either of the two values: * **Enabled** — when a client claims bonuses from multiple programs at a time using the same trading account, all claimed bonuses are immediately added to their account as credit, enabling the client to use credit funds for trading. * **Disabled** — when a client claims bonuses from multiple programs at a time using the same trading account, the claimed bonuses are added to their trading account one after another. Only after the first claimed bonus is processed and assigned the final status (`Completed` or `Expired`), the second claimed bonus is added to the client trading account as credit, and so on. * In the **Ignored open/close interval (sec)** field, specify the minimum duration, in seconds, for which the client must keep positions open for them to be counted towards the traded volume of the bonus program. * In the **Autoenable trading if balance > 0** dropdown, select either of the two values: * **Enabled** — when the account balance changes from zero or negative to positive, the `Trade Enabled` permission is automatically restored for the account, enabling the client to resume trading on their account, including the use of the bonus credit. * **Disabled** — when the account balance changes from zero or negative to positive, the `Trade Enabled` permission isn’t automatically restored for the account. * In the **Ignored symbol groups** dropdown, select one or more symbol groups in which trades aren't counted towards the traded volume of the bonus program. For cTrader, individual symbols must be selected in this field instead of symbol groups, even though symbol groups are available on the cTrader platform. You can leave this field empty. Click **Save** to create the bonus program. The created bonus program is now listed on the **Bonuses** page in the B2CORE UI. ## Example [#example] This example illustrates how to interpret the requirements of the temporary bonus program with the following settings: The settings of a temporary bonus program To receive the bonus amount of 386 USD from the bonus program, a client needs to claim the bonus in the B2CORE UI using their active trading account opened on the `MetaTrader 5 Live` platform and denominated in USD. After claiming the bonus, the bonus is added to the client trading account as credit, enabling the client to use credit funds for trading. In order to receive the bonus credit on their account balance, the client must fulfill the following bonus program requirements: ## How to restrict the use of a temporary bonus program [#how-to-restrict-the-use-of-a-temporary-bonus-program] You can restrict the use of a temporary bonus program based on a client's country, client type, verification level, jurisdiction, or introducing broker (IB). Additionally, you can apply a combination of these restrictions for more granular access control. If a client doesn't meet the restriction criteria, the temporary bonus program won't be visible to that client in the B2CORE UI, and the client won't have the option to claim the bonus. To restrict the use of a temporary bonus program: Navigate to **Bonuses** > **Temporary Bonuses**. Select the bonus program and click the **Edit** button in the program row. Click **Actions** in the upper-right page corner, and then select the restriction type: * **Country restrictions** — to make the program available only to client from specific countries. * **Client type restrictions** — to make the program available only to clients of selected types, such as Corporate or Individual. * **Verification level restrictions** — to make the program available only to clients with specific verification levels. * **Jurisdiction restrictions** — to make the program available only to clients under selected jurisdictions. * **Introducing broker restrictions** — to make the program available only to clients who are referrals of the specified IBs. In the **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option prevents clients matching the selected rules from seeing the bonus program in the B2CORE UI and subscribing to it. * **Allow only** — this option allows only clients matching the selected rules to see the bonus program in the B2CORE UI and subscribe to it. * In the **Rules** dropdown, select one or more values that define the restriction — such as countries, client types, verification levels, jurisdictions, or IBs — depending on the restriction type you're applying. Click **Save** to apply the changes. The temporary bonus program now has usage restrictions applied. You can manually credit bonuses to clients by either creating a custom manual bonus or selecting a bonus from an existing temporary bonus program. To manually credit a bonus to a client: Navigate to **Bonuses** > **Bonus distribution**. Click **Create** in upper-right page corner, and then select either of the two options: * **Create** — to credit a custom manual bonus. * **Create Temporary Bonus** — to credit a bonus from an existing temporary bonus program. In the **Accounts** popup, locate the client account to which you want to credit the bonus, then click **Select** on the right side of the account row. You can search for the account by **Account ID**, **Account number**, **Currency**, or **Client name**. On the displayed page, fill in the fields based on the type of bonus: * In the **Amount** field (required), enter the bonus amount that you want to credit to the account. * In the **Caption** field (required), enter the bonus name, which will be displayed to the client in the B2CORE UI. * In the **Preset** dropdown, optionally select a preset to automatically fill in the remaining fields based on preset settings. Alternatively, leave the **Preset** field empty and fill in the remaining fields manually (refer to the [Bonus presets](../../back-office-guide/bonuses/bonus-presets) or field descriptions). * In the **Temporary bonus** dropdown, select the temporary bonus program from which the bonus will be credited. All settings of the select temporary bonus program will be applied to the bonus for the client. Click **Save** to credit the bonus. Depending on the **Set credit immediately** option and the presence of other credited bonuses, the bonus will be credited to the client account either immediately or after the previous bonus has been processed and assigned a final status (`Completed` or `Expired`). You can configure cashback reward programs for clients who trade on MT4/5. The cashback is earned for each lot traded on a client’s MT account over a day, based on closed positions, and deposited to the client the following day. The cashback is deposited to clients with the deposit method that uses the **cashback** provider (for details, refer to [How to create a deposit method for rewarding cashback](how-to-configure-cashback-programs-for-mt4-and-mt5#how-to-create-a-deposit-method-for-rewarding-cashback)). To configure a cashback program: Navigate to **Cashback** > **MetaTrader Volume**. Select the MT platform for which you want to configure the cashback program: **MetaTrader 4** or **MetaTrader 5**. On the **Preferences** tab, configure the following settings: * In the **Cashback value** field, enter the fixed rate rewarded per each traded lot. The cashback value can be denoted as an integer or decimal value. The cashback amount is calculated as follows: `Cashback amount = Cashback value * Number of traded lots` * In the **Cashback currency** dropdown, select the cashback program currency. * In the **Account destination type** dropdown, select the type of the account to which the cashback is rewarded: * **Trade** — the cashback is rewarded to the client’s MT trading account on which the volume taken for cashback calculations has been traded. * **Personal** — the cashback is rewarded to a client’s account of the `personal` type, such as a wallet, denominated in the cashback program currency. * In the **Ignored symbols groups** dropdown, select the symbols that you want to exclude from cashback calculations. * In the **Accounts platform groups allowance** dropdown, select the MT account groups. By default, all the account groups configured on the MT platform are selected. * If the **Accounts number allowance** field is empty, all the MT trading accounts included in the groups selected in **Accounts platform groups allowance** field are rewarded the cashback. * In the **Accounts number allowance** field, enter MT account numbers separated by commas. * If one or more MT account numbers are listed in this field, only the listed accounts are rewarded the cashback and the **Accounts platform groups allowance** option is ignored. To enable the cashback program, select **Enabled**. Click **Save** to apply the changes. After saving the changes, the **Updated** field displays the date when the cashback program was configured or last modified. ## How to add cashback reward tiers [#how-to-add-cashback-reward-tiers] You can add one or several tiers that determine the increased cashback rates for clients who have traded certain volumes over a day. Add a cashback reward tier: Navigate to **Cashback** > **MetaTrader Volume**. Select the MT platform for which you want to configure cashback reward tiers: **MetaTrader 4** or **MetaTrader 5**. Access the **Tier** tab, and click **+Create**. In the **Name** field, enter the tier name. In the **Cashback value** field, enter the increased cashback rate that is used instead of the rate specified on the **Preferences** tab if the volume traded on an MT account over a day has reached the required tier volume. In **Trading volume, lots** field, enter the number of lots that must be traded in order to receive the increased cashback. Click **Save** to apply the changes. If during a day a client has traded on their MT account the volume that matches the tier volume or more, the cashback for this MT account is calculated against the increased cashback rate. ## How to create a deposit method for rewarding cashback [#how-to-create-a-deposit-method-for-rewarding-cashback] The cashback is rewarded to clients with the deposit method that uses the **cashback** provider. This method is used only for depositing the cashback and isn’t available to clients in the B2CORE UI. Create the deposit method for rewarding the cashback: Navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create**, and fill in the following fields: * In the **Name** field, enter the deposit method name used in the Back Office. * In the **Caption** field, enter the deposit method caption used in the Back Office. * In the **Provider** dropdown, select **cashback**. * In the **Currency** dropdown, select the same currency as in the **Cashback currency** field of the configured cashback program for MT4 or MT5. * In the **Connection** dropdown, select **Not selected**. Click **Save** to add the method. On the **Settings** tab, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * The **Group** field is set to **Not selected** by default. This deposit method can’t be included in any deposit method group. Click **Save** to apply the changes. Access the **TR Currencies** tab, and make sure that the added transaction currency matches the cashback program currency and is enabled. If the transaction currency isn’t enabled, click **Edit**, and select **Yes** in the **Enabled** dropdown. Click **Save** to apply the changes. ## How to identify clients who received cashback rewards [#how-to-identify-clients-who-received-cashback-rewards] Get a list of clients who have already received the cashback and view transaction details: Navigate to **Finance** > **Deposits**. To get a list of cashback transactions, select the name of the deposit method used for rewarding the cashback in the dropdown displayed under the **Payment method** column. To view the details of a specific transaction, click the **Edit** button located in the transaction row. Some actions taken by your clients in the B2CORE UI require a resolution (approval or rejection). To view pending requests quickly, click the **bell** icon in the top bar and navigate to the request details by clicking the desired request. Alternatively, you can view a list pending requests on the **Clients** > **Requests** page. To resolve a client request: Navigate to **Clients** > **Requests**. Select the request. You can filter the requests list by client email, request type, or other criteria to quickly find the needed request. Click the **Edit** button to view the request details. Note that for some providers it is also possible to edit the deposit or payout amount directly in the request. **Add comment** if required. This comment will be displayed only in the Back Office. Your client won't be notified about this. Use the **Options** button to set the color of the request in the list. Click **Audit** to check the transaction. The system will summarize all incoming transactions on the account and show a notification if there is a significant discrepancy in the balance. This step requires the `Update requests` permission. Click **Approve** or **Reject** to resolve the request. If **rejected**: Select **Resolution type** and **Resolution**. The type and resolution must be previously created in the system (for details, refer to [How to create a request resolution type](../manage-system-settings/how-to-create-a-request-resolution-type) and [How to create a request resolution](../manage-system-settings/how-to-create-a-request-resolution)). **Confirm** the rejection by solving a simple math problem and provide the result in the **Verification code** field. Click **OK** to save the changes. After that, an email notification about the request resolution will be sent to the client. Use client tags to organize and filter client data in the Back Office. By assigning tags to clients, you can enable Back Office users, such as admins or managers, to only see clients with specific tags, while hiding others. You can assign tags to clients manually (for details, refer to the instructions below [Assign tags to a single client](#assign-tags-to-a-single-client) and [Assign tags to multiple clients](#assign-tags-to-multiple-clients)). If you use [jurisdictions](../../back-office-guide/clients/jurisdictions), tags linked to a jurisdiction will be automatically assigned to clients, along with the jurisdiction, after registration, based on the selected country (for details, refer to [How to create a jurisdiction](how-to-create-a-jurisdiction)). ## Assign tags to a single client [#assign-tags-to-a-single-client] To assign tags to a client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. In the **Client Tags** dropdown, select one or several tags that you want to assign to this client. Press **Enter** after selecting each tag in the dropdown. To view a list of available client tags or add new tags, navigate to **System** > **Users** > **Client Tags**. Click **Save** to apply the changes. The tags assigned to the client are displayed in the **Tags** column on the **General** page. ## Assign tags to multiple clients [#assign-tags-to-multiple-clients] To assign tags to multiple clients at once: Navigate to **Clients** > **General**. Click the **Select** button in the upper-right page corner, and then select clients to which you want to assign tags by clicking client rows. * To select all clients, click **Select All**. * To unselect a client, click the corresponding client rows again. * To unselect all clients at once, click **Deselect**. Expand the **Edit selected clients** dropdown in the upper-right page corner, and then select **Assign Tags**. In the **Client Tags** dropdown, select one or several tags that you want to assign to the selected clients. Press **Enter** after selecting each client in the dropdown. To replace the existing client tags with the new ones, enable the option to **Overwrite current values**; otherwise, the new tags will be added to the existing ones. Click **Save** to apply the changes. The tags assigned to the clients are displayed in the **Tags** column on the **General** page. **See also** [How to make an admin user see only specific clients](../manage-system-settings/how-to-make-an-admin-user-see-only-specific-clients) To change a password for a client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the **View client** page, click the **Actions** button in the upper-right page corner, and then select **Change password**. In the **Change password** popup: * Enter a new password in the **Password** field. Alternatively, you can generate a secure password by clicking the **Generate** button on the right side of the **Password** field. * In the **Send mail** dropdown, select **Yes** to email the new password to the client. Click **Save** to change the password. To create a jurisdiction: Navigate to **Clients** > **Jurisdictions**. Click **+Create** in the upper-right page corner. On the **Create a jurisdiction** page, fill in the following fields: * In the **Caption** field, enter the name that you want to apply to the jurisdiction, for example: `Latin America`. * In the **Countries** dropdown, select countries that belong to the jurisdiction. Only the countries that are enabled on the [System > Countries](../../back-office-guide/system/countries) page are listed in the dropdown. * In the **Client types** dropdown, select client types to associate with the jurisdiction. Only the client types that are enabled on the [Clients > Types](../../back-office-guide/clients/types) page are listed in the dropdown. * In the **Tags** dropdown, optionally select one or more [tags](../../back-office-guide/system/users/client-tags) that will be automatically assigned to clients along with the jurisdiction. * In the **Description** field, enter the description or additional details about the jurisdiction. * Select the **Apply changes to all existing clients** checkbox to apply the jurisdiction to all existing clients whose country and client type match the combinations added to the jurisdiction. Leave the checkbox disabled to apply the jurisdiction only to clients who register after creating the jurisdiction. The existing clients won't be affected. Click **Save** to create the jurisdiction. Clients can now be automatically assigned to the jurisdiction after they complete the registration process, based on their countries and client types. The assigned jurisdiction is displayed in the **Additional Info** section in the client details, where it can also be changed manually. ## How to edit a jurisdiction [#how-to-edit-a-jurisdiction] To edit a jurisdiction: Navigate to **Clients** > **Jurisdictions**. Select the jurisdiction that you want to modify and click the **Edit** button. On the **Update jurisdiction** page, you can make the following changes: * In the **Countries** dropdown, add or remove countries associated with the jurisdiction. * In the **Client types** dropdown, add or remove types associated with the jurisdiction. * In the **Tags** dropdown, add or remove tags that will be assigned to clients belonging to this jurisdiction. * To apply the updated settings to the existing clients, select the **Apply changes to all existing clients** checkbox. Leave the checkbox disabled to apply the changes only to new clients who register after the changes are saved. The existing clients won’t be affected. Click **Save** to apply the updates to the jurisdiction settings. The changes will take effect based on whether the **Apply changes to all existing clients** checkbox is selected or disabled. If you have any jurisdiction-based restrictions applied to products, deposit and withdrawal methods, or verification levels, they will be in effect for clients according to the updated jurisdiction settings. ## Example 1 [#example-1] Suppose two jurisdictions are configured with the same countries but different client type settings: * The **Seychelles (SC)** jurisdiction: * **Countries**: UAE and Oman * **Client type**: Personal * The **Mauritius (MU)** jurisdiction: * **Countries**: UAE and Oman * **Client type**: Corporate When new clients are registered: * A client from **UAE** with **Personal** type is automatically assigned the **SC** jurisdiction. * A client from **UAE** with **Corporate** type is automatically assigned the **MU** jurisdiction. * A client from **Oman** with **Personal** type is assigned the **SC** jurisdiction. * A client from **Oman** with **Corporate** type is assigned the **MU** jurisdiction. * A client from a country not listed in either jurisdiction, or with a client type not matching the jurisdiction settings, isn't assigned any jurisdiction. ## Example 2 [#example-2] Suppose the **Seychelles (SC)** jurisdiction from the above example is updated: **Oman** is removed and **Saudi Arabia** is added: The **Seychelles (SC)** jurisdiction: * **Countries**: UAE and Saudi Arabia * **Client type**: Personal If the **Apply changes to all existing clients** checkbox is *enabled*: * The **SC** jurisdiction is removed from existing clients whose country is **Oman** and client type **Personal**. They aren't assigned any jurisdiction. * Existing clients from **Saudi Arabia** with **Personal** type are assigned the **SC** jurisdiction. * Existing clients from **UAE** remain unchanged. * The updated **SC** jurisdiction will also be assigned to newly registered clients based on the updated country list. If the **Apply changes to all existing clients** checkbox is *disabled*: * Existing clients remain unchanged. For example, clients from **Oman** with **Personal** type still have the **SC** jurisdiction even though **Oman** has been removed. * The updated **SC** jurisdiction only applies to clients who register after the changes are saved, based on the updated country list. **See also** [How to make an admin user see only specific clients](../manage-system-settings/how-to-make-an-admin-user-see-only-specific-clients) To disable two-factor authentication (2FA) for a client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the **View client** page, go to the **Settings** tab. In the **2FA** section, select `Disabled` in the dropdown for either **google** or **sms**, or both, depending on which 2FA method you want to turn off. Click **Save** to apply the changes. To enable internal transfers for a client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the **View client** page, go to the **Settings** tab. In the **Rights** section, enable the **Internal Transfers** checkbox. Click **Save** to apply the changes. To find the Back Office user who approved or rejected a specific client request: Navigate to **Clients** > **Requests**. Locate the needed request. By default, the list is filtered by the `Pending` status. Clear the **Status** filter to view all requests. To narrow your search, apply other filters such as **Client name**, **Client email**, **Country**, the request's **Type**, **Status** (`Approved` or `Rejected`), or a date range. Check the **Processed by** column to see the email address of the Back Office user who resolved the request. This same **Processed by** information is also displayed in the upper-right corner of the request details page. To register a new client and create their profile: Navigate to **Clients** > **General**. Click **+Create** in the upper-right page corner. In the displayed **Create client** popup, enter the client's email, first name, and last name. The required fields may vary depending on the configuration of the [Registration wizard](../../back-office-guide/system/wizards#registration-wizard). Click **Save** to create the client profile. Upon successful registration, the client will receive an email notification confirming the registration. The newly registered client is added to the clients list displayed on the **General** page. You can click the **Edit** button to access the client details and update their profile with further information. By default, the client profile is created without a password. The client needs to reset the password upon their first sign-in to the B2CORE UI. Alternatively, you can [set the password](how-to-change-a-client-password) for the client and send it via email. To upload one or more files to a client profile: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the **View client** page, go to the **Files** tab. Click **+Add file** to add a single file or **+Upload multiple files** to add several files at once. To upload one or several files to a folder, click **+Add directory** and specify the folder name in the **Caption** field. Go to the newly created folder and click **+Add file** or **+Upload multiple files**. Set **Caption** for the file. This caption will be displayed in the files list. When uploading multiple files, the caption automatically displays the list of file names. Select the file(s) to upload. Note that the uploaded file(s) must meet the following requirements: * Supported formats: DOC, DOCX, XLSX, CSV, PDF, JPG, PNG, PAGES, NUMBERS, ZIP, 7-Zip, and RAR * File size: up to 3 MB Click **Save** to upload the file. To check wallet addresses for deposits and withdrawals for a client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the **View client** page, click the **Finance** tab, and then select **Withdrawal wallets** or **Deposit wallets** in the dropdown. On the selected page, find the addresses in the **Address** column, which displays the alphanumeric strings representing the deposit or withdrawal addresses generated for the client. You can configure B2CORE to use the [Twilio](https://www.twilio.com/) communication platform to deliver 2FA codes via SMS or make phone calls to your clients via the B2CORE Back Office. ## Key points [#key-points] * For phone calls, you can select which active Twilio number to use if your account has multiple numbers. This allows you to choose the most suitable local number, increasing the chances of successful contact and enhancing client trust. * Outgoing calls made from the B2CORE Back Office via Twilio can also be recorded, with the recordings saved in your Twilio account for later playback. The following information is required to configure a connection to Twilio via the Back Office: * Twilio account SID * Twilio authentication token * Twilio phone number * TwiML App SID ## How to sign up with Twilio [#how-to-sign-up-with-twilio] This instruction describes how to sign up with Twilio and obtain the required information to connect to Twilio via the Back Office. This instruction is created based on the latest version of Twilio as of this writing. Due to possible changes to the procedures described here, we suggest that you consult the official [Twilio Help Center](https://help.twilio.com/) or contact their support in case you have any questions. Go to the [Twilio](https://www.twilio.com/) website and sign up to create a new account. By default, a free trial account is created. Sign in to your account and upgrade it to go live by clicking the **Upgrade** link. Once the account is upgraded, your Twilio account SID and authentication token are generated automatically. Obtain a Twilio phone number by following the instructions provided in these articles: * [How to Search for and Buy a Twilio Phone Number from Console](https://support.twilio.com/hc/en-us/articles/223135247-How-to-Search-for-and-Buy-a-Twilio-Phone-Number-from-Console) * [Twilio Phone Number Types and Their Capabilities](https://support.twilio.com/hc/en-us/articles/223135367-Twilio-Phone-Number-Types-and-Their-Capabilities) Create a TwiML App by following these steps: * Go to the [TwiML Apps page](https://console.twilio.com/?frameUrl=/console/voice/twiml/apps). This page is available after signing in to your Twilio account. * Click **Create new TwiML App**. * Fill out the TwiML App form: * In the **Friendly Name** field, specify a name for your app. **Voice Configuration** * In the **Request URL** field, specify a URL for your voice app webhook, such as: `api.company.name.com/api/v1/voice/twilio-webhook` * In the **Request Method** dropdown, select **HTTP POST**. **Messaging Configuration** * In the **Request URL** field, specify a URL for your messaging app webhook, which is a URL of your B2CORE Back Office. * In the **Request Method** dropdown, select **HTTP POST**. Click **Create** to create the app. Once the app is created, your TwiML App SID is generated automatically. Use the obtained Twilio account SID, authentication token, phone number and TwiML App SID to configure a connection to Twilio via the B2CORE Back Office. ## How to configure Twilio as a 2FA SMS provider [#how-to-configure-twilio-as-a-2fa-sms-provider] You can configure Twilio to deliver 2FA codes to your clients via SMS. Before configuring Twilio as a 2FA SMS provider, make sure that you have obtained the following required information: * Twilio account SID * Twilio authentication token * Twilio phone number To learn how to obtain the required information, refer to [How to sign up with Twilio](how-to-configure-twilio#how-to-sign-up-with-twilio). To configure Twilio as a 2FA SMS provider: Navigate to **System** > **SMS Providers**. and then click **+Create** in the upper-right corner of the page. Click **+Create** in the upper-right page corner. In the displayed popup, fill in the following fields: * In the **Name** field, enter a name that you want to use for the configuration (such as `twilio_sms`). * In the **Caption** field, enter a caption that will be applied to the configuration in the Back Office (such as `Twilio SMS`). * In the **Provider** dropdown, select **Twilio**. Click **Save** to save the configuration. On the **Edit provider** page, specify the following connection settings: * In the **API sid** field, specify your Twilio account SID. * In the **API secret** field, specify your Twilio authentication token. * In the **Sender phone number** field, specify your Twilio phone number. Make sure that the **Enabled** field is set to **Yes**. Click **Save**. Twilio can now be used to deliver 2FA codes via SMS. To learn more, refer to [How to set up 2FA with SMS](../manage-system-settings/how-to-set-up-2fa#how-to-set-up-2fa-with-sms). ## How to configure Twilio as a phone service provider [#how-to-configure-twilio-as-a-phone-service-provider] Twilio can be configured to make phone calls to your clients via the Back Office. Before configuring Twilio as a phone service provider, make sure that you have obtained the following required information: * Twilio account SID * Twilio authentication token * Twilio phone number * TwiML App SID To learn how to obtain the required information, refer to [How to sign up with Twilio](how-to-configure-twilio#how-to-sign-up-with-twilio). To configure Twilio to make phone calls: Navigate to **System** > **External Connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name that you want to use for the connection. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **TwilioVoice**. Click **Save** to save the connection. The **Twilio** connection will appear in the list of external connections. Click the **Edit** button to open the connection details. On the **Edit connection** page, fill in the following settings: * In the **Account SID** field, specify your Twilio account SID. * In the **Auth token** field, specify your Twilio authentication token. * In the **TwiML App SID** field, specify your TwiML App SID. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** dropdown), set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. Twilio can now be used to make phone calls to your clients via the Back Office. ## How to test the Twilio phone service operation [#how-to-test-the-twilio-phone-service-operation] After you have configured a connection to Twilio for making phone calls via the Back Office, you can make a call to one of your clients to test the connection. To make a call: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. Go to the **Contacts** tab. Click the phone button phone-button displayed in the **Phones** section to dial a specified client's phone number using Twilio. If you have several active Twilio numbers, you can select the number you want to use for calling in the displayed popup. If no error message is displayed in the Back Office, the Twilio connection is configured properly. To deliver event notifications to Back Office users through Telegram, you must specify a user’s personal Telegram identifier or the identifier of a group or channel to which notifications will be sent. To get a user’s Telegram identifier, the user should do the following: In Telegram, send a message to [@getidsbot](https://t.me/getidsbot?do=open_link) and get the response containing the user’s Telegram identifier. Copy the obtained identifier and paste it to the **Telegram chat Id** field available on the[ Back Office user details page](../../back-office-guide/system/users/users#details). To get the identifier of a Telegram group or channel in which a user is the admin, the user should do the following: Navigate to a Telegram group or channel whose identifier the user wants to get. Add [@getidsbot](https://t.me/getidsbot?do=open_link) to the selected group or channel and get the response containing the group or channel identifier. Copy the obtained identifier and paste it to the **Group Id** field displayed under the enabled **Telegram** option when configuring event notifications. **See also** [How to set up event notifications](../manage-system-settings/how-to-set-up-event-notifications) Use integration with [Twilio SendGrid](https://sendgrid.com/) to automatically sync client data from B2CORE and use it in SendGrid for managing email lists, sending transactional and marketing emails, and tracking email performance. Before proceeding with the instructions, you must have signed up for SendGrid and have an active account. ## How to configure a connection to SendGrid [#how-to-configure-a-connection-to-sendgrid] To configure a connection to SendGrid in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **SendGrid**. Click **Save** to create the connection. The **SendGrid** connection will appear in the list of external connections. Click **Edit** to enter the connection details and complete the following fields: * In the **API URL** field, enter the base URL for your SendGrid region: * `https://api.sendgrid.com/v3/` — for SendGrid accounts registered in the **US region**. * `https://api.eu.sendgrid.com/v3/` — for SendGrid accounts registered in the **EU region**. You can find your **Base URL** in SendGrid by navigating to **Settings** > **Account Details**. * In the **API key** field, enter your SendGrid API key. The **API key** can be generated in SendGrid by navigating to **Settings** > **API Keys** and creating a key with the required permissions: * **Full access** — access to all SendGrid functionalities. * **Restricted access** — limited access only to selected functionalities, for example, access to **Marketing Campaigns** or contact lists. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. After configuring the connection, all clients listed under **Clients** > **General** in the B2CORE Back Office will be automatically synced with SendGrid and added as contacts. Any further updates to their personal details will also be synced with SendGrid. ## Overview of client data synced with SendGrid [#overview-of-client-data-synced-with-sendgrid] The following required and optional client fields can be synced from B2CORE to SendGrid contacts: ### Required fields [#required-fields] The following required client fields are always synced from B2CORE to SendGrid: * **Email** * **First name** * **Last name** ### Optional fields [#optional-fields] The following optional fields, which can be useful for business processes, are synced from B2CORE to SendGrid if they are specified in the client details in the B2CORE Back Office: * **Address** * **City** * **State** * **Postal code** * **Country** * **Phone** — if multiple phone numbers are specified for a client in the B2CORE Back Office, the confirmed number is sent to SendGrid; if none is confirmed, the most recently updated number is used. ## How to add custom fields for syncing from B2CORE to SendGrid [#how-to-add-custom-fields-for-syncing-from-b2core-to-sendgrid] You can sync additional fields from B2CORE to SendGrid, such as a client’s **Status**, **Client type**, **Verification level**, and **Jurisdiction** to reflect them in SendGrid contacts. In **SendGrid**, add these fields: Sign in to your SendGrid account. In the **Marketing Campaigns** section, click **Marketing** > **Contacts** > **Custom Fields**. Click **Create Custom Field**. Enter the field name, select the appropriate field type, and specify other parameters. Save the changes to add the new custom field. In the **B2CORE Back Office**, set up field mapping: Navigate to **System** > **External connections**. Find the connection configured for SendGrid and click **Edit** to open the connection details. Set up the field mapping by selecting the corresponding fields created in SendGrid for **Status**, **Client type**, **Verification level**, and **Jurisdiction**. Set up field mapping Click **Save** to apply the changes. Once the fields are added and mapped, the client’s **Status**, **Client type**, **Verification level**, and **Jurisdiction** are automatically synced from B2CORE and displayed in SendGrid contacts. If one or more fields aren't mapped, they won't be synced to SendGrid contacts. ## How to sync clients from B2CORE to specific lists in SendGrid [#how-to-sync-clients-from-b2core-to-specific-lists-in-sendgrid] Lists in SendGrid are the Marketing Campaigns feature that helps you organize contacts and manage email campaigns. In SendGrid, create one or more lists: Sign in to your SendGrid account. Go to **Marketing** > **Contacts** > **Lists & Segments** Click **Create List**. Enter the list name. Click **Save** to create the list. In the B2CORE Back Office, select the list for syncing: Sign in to the B2CORE Back Office. Navigate to **System** > **External connections**. Find the connection configured for SendGrid and click **Edit** to open the connection details. In the **List** dropdown, select the desired list created in SendGrid. This will ensure all synced clients from B2CORE are added to that list. If no list is selected, synced clients won't be added to any list. Select the SendGrid list to sync clients from B2CORE Click **Save** to apply the changes. Once the list added and mapped, all clients from B2CORE will be automatically synced to the specified list in SendGrid. Any new registrations or updates to existing clients will also reflect in the same list. Use integration with [ActiveCampaign](https://www.activecampaign.com/) to streamline your marketing efforts by automatically syncing client data from B2CORE to ActiveCampaign, managing targeted email campaigns, sending notifications, and enhancing client engagement. Follow the instructions below to configure the ActiveCampaign connection in the B2CORE Back Office and set up the required parameters. Before proceeding with the instructions, you must have signed up for ActiveCampaign and have an active account. ## How to configure a connection to ActiveCampaign [#how-to-configure-a-connection-to-activecampaign] To configure a connection to ActiveCampaign in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **ActiveCampaign**. Click **Save** to create the connection. The **ActiveCampaign** connection will appear in the list of external connections. Click **Edit** to enter the connection details and complete the following fields: * In the **API URL** field, provide the API URL as specified in your ActiveCampaign account. * In the **API Token** field, specify your ActiveCampaign API key. Both the API URL and key can be found in your ActiveCampaign account under **Settings** > **Developer**. Locate the URL and Key fields in ActiveCampaign Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. After configuring the connection, all clients listed under **Clients** > **General** in the B2CORE Back Office will be synced with ActiveCampaign and displayed in the **Contacts** section of your ActiveCampaign account. ## Overview of client data synced with ActiveCampaign [#overview-of-client-data-synced-with-activecampaign] The following required client fields are always synced from B2CORE to ActiveCampaign: * **First name** * **Last name** * **Email** * **Phone** When the ActiveCampaign external connection is enabled in the B2CORE Back Office, any new client registration or update to an existing client's details (such as first name, last name, email, or phone number) will be automatically synced with ActiveCampaign. ## How to add more fields for syncing from B2CORE to ActiveCampaign [#how-to-add-more-fields-for-syncing-from-b2core-to-activecampaign] You can sync additional fields from B2CORE to ActiveCampaign, such as a client’s **Status**, **Country**, and **Client type**, to support client segmentation and targeted email marketing. In **ActiveCampaign**, add these fields: Sign in to your ActiveCampaign account. Go to **Contacts** > **Fields**. On the **Contacts** tab, Click **Add Field**. Enter the field name, select the appropriate field type, and specify other parameters. Click **Save** to add a new field in your ActiveCampaign account. The image below shows the added Status, Country, Client type, Jurisdiction, and Verification level fields in ActiveCampaign: Added fields in ActiveCampaign In the **B2CORE Back Office**, set up field mapping: Navigate to **System** > **External connections**. Find the connection configured for ActiveCampaign and click **Edit** to open the connection details. Set up the field mapping by selecting the corresponding fields created in ActiveCampaign for **Status**, **Country**, **Client type**, **Jurisdiction**, and **Verification level**. Set up field mapping Click **Save** to apply the changes. Once the fields are added and mapped, the client’s **Status**, **Country**, **Client type**, **Jurisdiction**, and **Verification level** are automatically synced from B2CORE and shown in the client details in ActiveCampaign. ## How to sync clients from B2CORE to specific lists in ActiveCampaign [#how-to-sync-clients-from-b2core-to-specific-lists-in-activecampaign] Lists in ActiveCampaign help you organize contacts so you can send them relevant information. By assigning clients to specific lists, you can target your email campaigns more effectively and deliver personalized messages to the right audience. In **ActiveCampaign**, create one or more lists: Sign in to your ActiveCampaign account. Go to **Contacts** > **Lists**. Click **Add a list**. Enter the list name and specify other parameters. For the **Marketing Channel**, select **Email**, as it is the only supported channel for this integration. Click **Save** to create the list. In the **B2CORE Back Office**, select the list for syncing: Sign in to the B2CORE Back Office. Navigate to **System** > **External connections**. Find the connection configured for ActiveCampaign and click **Edit** to open the connection details. In the **List** dropdown, select the desired list created in your ActiveCampaign account. This will ensure all synced clients from B2CORE are added to that list. If no list is selected, synced clients won't be added to any list. Select the ActiveCampaign list to sync clients from B2CORE Click **Save** to apply the changes. Once the list is selected and saved, all clients from B2CORE will be automatically synced to the specified list in ActiveCampaign. Any new registrations or updates to existing clients will also reflect in the same list. To be able to send [event notifications](../../back-office-guide/system/event-notifications) in Slack, set up a Slack bot and obtain a token for its managing. This instruction is created based on the latest version of Slack as of this writing. Due to possible changes to the procedures described here, we suggest that you consult the official [Slack documentation](https://slack.com/help) or contact their support in case you have any questions. To set up a Slack bot: Go to the Slack website and create a [Slack app](https://api.slack.com/apps?new_app=1). In the **Create an app** window, click **From scratch**, and then fill in the following fields: * In the **App name** field, enter a name for your Slack bot. The bot name can be changed afterwards. * Select a Slack workspace for which you want to create the bot. The workspace cannot be changed. Click **Create App**. In the main menu, click **App Home**. On the **App Home** page, click **Review Scopes to Add**. Navigate to the **Scopes** section, click **Add an OAuth Scope**, and then add the following permission scopes to your bot: * `chat:write` * `chat:write.public` * `users:read` * `users:read.email` For a list of all available permission scopes, refer to [Permission scopes](https://api.slack.com/scopes). Add Slack bot scopes Navigate to the **OAuth Tokens for Your Workspace** section and click **Install to Workspace**. After installing the app, copy the token for managing your Slack bot, which is displayed in the **Bot OAuth User Token** field. Copy a Slack bot token In the B2CORE Back Office, navigate to **Systems** > **Settings**. Paste the copied token into the **Bot token** field displayed under the **SlackBot** section. Click **Save** to apply the changes. **See also** [How to set up event notifications](../manage-system-settings/how-to-set-up-event-notifications) To be able to send [event notifications](../../back-office-guide/system/event-notifications) in Telegram chats, groups and channels, create a Telegram bot and obtain a token for its managing. This instruction is created based on the latest version of Telegram as of this writing. Due to possible changes to the procedures described here, we suggest that you consult the official [Telegram documentation](https://core.telegram.org/bots) or contact their support in case you have any questions. To create a Telegram bot: In Telegram, send the `/newbot` command to [@BotFather](https://t.me/botfather). Follow the instructions and specify the following information: * Enter a name for your Telegram bot. * Enter a username for your bot. It must end with “bot” (such as `NotificationsBot` or `notifications_bot`). Copy the displayed token that is required to authorize your bot and send requests to the Bot API. In the B2CORE Back Office, navigate to **Systems** > **Settings**. Paste the copied token into the **Bot API Token** field displayed under the **Telegram Bot** section. Click **Save** to apply the changes. **See also** [How to set up event notifications](../manage-system-settings/how-to-set-up-event-notifications) To add a currency: Navigate to **Currencies** > **Currencies**. Click **+Create** in the upper-right page corner. On the **Currency creation** page, fill in the following fields: * In the **Code** field, enter a numeric code for the currency that you want to add. * In the **Alpha** field, enter an alpha code for the currency. Both codes are provided by your account manager. In the **Caption** field, enter a currency name that will be displayed to clients in the B2CORE UI. Click **Save** to add the currency. Add currency pairs that will be available for exchange in the Back Office and B2CORE UI. You can add currency pairs one by one or add multiple pairs at once. ### How to add a currency pair [#how-to-add-a-currency-pair] To add a currency pair: Navigate to **Currencies** > **Currency pairs**. Click **+Create** in the upper-right page corner. On the **Create currency pair** page, fill in the following fields: * In the **From currency** dropdown, select a base currency. * In the **To currency** dropdown, select a quote currency. * The **Enabled for admin** and **Enabled for client** options are set to **Yes** by default, meaning that the currency pair will be available for exchange in the Back Office and B2CORE UI. * If you want to make the currency pair unavailable for exchange in the Back Office or B2CORE UI, or both, select **No** for the corresponding option. * In the **Max amount** field, enter the maximum allowed amount per exchange operation in the currency pair. * In the **Step** field, the minimum increment by which an amount can be changed at a time. * In the **Request required** dropdown, select: * **Yes** — to create requests for admin approval when clients initiate exchanges in the currency pair in the B2CORE UI. After approval, exchanges are executed using the rates specified in the approved requests. * **No** — to execute exchanges in the currency pair without admin approval. Click **Save** to add the currency pair. ### How to add multiple currency pairs [#how-to-add-multiple-currency-pairs] To add multiple currency pairs at once: Navigate to **Currencies** > **Currency pairs**. Click **+Create multiple** in the upper-right page corner. On the **Create currency pair** page, fill in the following fields: * In the **Currencies** dropdown, select two or more currencies to add them as currency pairs. Press **Enter** after each selected currency. For example, selecting `USD`, `EUR`, and `BTC` in the dropdown will create the following currency pairs: `USDEUR` and `USDBTC`\ `EURUSD` and `EURBTC`\ `BTCUSD` and `BTCEUR` * In the **Max amount** field, enter the maximum allowed amount per exchange operation in the specified currency pairs. * In the **Step** field, the minimum increment by which an amount can be changed at a time. * In the **Request required** dropdown, select: * **Yes** — to create requests for admin approval when clients initiate exchanges in the specified currency pairs in the B2CORE UI. After approval, exchanges are executed using the rates specified in the approved requests. * **No** — to execute exchanges in the currency pairs without admin approval. Click **Save** to add the currency pairs. You can configure exchange rates for currencies and set up rate providers to ensure accurate currency conversions when needed for transaction processing. To set up a rate provider: Navigate to **Currencies** > **Rates**. Click **+Create** in the upper-right page corner. On the displayed page, fill in the following fields: * In the **From currencies** and **To currencies** dropdowns, select the currencies for which you want to configure exchange rates. You can select one or multiple currencies in the dropdowns, or choose **All** to apply the configured rates to all currencies. * In the **Provider** dropdown, select the desired provider for currency rates. * In the **Name** field, enter a name for your exchange rate configuration. Click **Save** to create the provider. In the rates list, find the provider that you've created and click **Edit** to enter the provider details. If additional settings are required for the provider, the **Options** section is displayed, enabling you to configure connection details for the provider. If using the **custom** provider, fill in the following fields in **Options**: * In the **Rate** field, enter the fixed rate that will be used for conversions. * In the **Base currency** dropdown, select the currency that will serve as the base for all conversions using the specified fixed rate. In the **Enabled** dropdown, select **Yes**. Click **Save** to apply the changes. After setting up the rate provider, you can designate it as the preferred provider to supply exchange rates for [deposit](../../back-office-guide/system/deposit-system#deposit-methods) and [withdrawal methods](../../back-office-guide/system/payout-system#payout-methods). If a provider is assigned to a specific method, the system will prioritize requesting rates from this provider when the method is used. ## Example [#example] This example illustrates the settings for a custom exchange rate for `USD/EUR`: * `USD` is selected in the **From currencies** field and `EUR` in the **To currencies** field. * In the **Provider** dropdown, **custom** is selected. * The **Enabled** option is set to **Yes**. In the **Options** section: * The **Rate** field displays `0.86`, which is the specified custom exchange rate. * The **Base currency** is set to USD. Custom exchange rate settings Exchanges initiated by clients in specific currency pairs through the B2CORE UI can be configured to require admin approval. When clients create exchanges in these specific pairs, requests of the **Exchange** type are created and listed on the [Clients > Requests](../../back-office-guide/clients/requests) page. These exchanges are executed only after corresponding requests are approved by the admin, using the rates specified in the approved requests. To enable requests for exchanges in a specific currency pair: Navigate to **Currencies** > **Currency pairs**. Select the currency pair for which you want to enable exchange requests and click the **Edit** button. On the **Edit currency pair** page, select **Yes** for the **Request required** option. Click **Save** to apply the changes. You can set the priority of exchange rate providers for obtaining exchange rates for each currency pair. This may help to prevent exceeding request limits to exchange rate providers. Navigate to **Currencies** > **Currency pairs**. Select the currency pair for which you want to set the priority of exchange rate providers and click the **Edit** button. In the **Rates Custom Priority** field, drag and drop the exchange rate providers supported for this currency pair to set them in a desired order. Click **Save** to apply the changes. In exchange requests from clients, which haven’t yet been approved and have the `Pending` status, you can change the rates at which the exchanges will be executed. To change the rate in an exchange request: Navigate to **Clients** > **Requests**. By default, all requests on the page are filtered by the `Pending` status. To list only pending requests of the **Exchange** type, select `Exchange` in the filter field under the **Type** column. Select the request and navigate to request details. In the request details, the **Rate** field displays the rate valid at the moment when a client created the exchange in the B2CORE UI and the request was created in the Back Office. This rate includes the markups specified for the currencies in the currency pair. To update the rate, click **Change rate**. In the displayed **Change rate** popup, update the rate that will be applied to the exchange in one of the following ways: * Enter the desired rate in the **New rate (without markup)** field. * Refresh the rate by clicking the **Refresh** button on the right side of the **New rate (without markup)** field. This retrieves the current valid rate from an exchange rate provider and displays it in the **New rate (without markup)** field. In the **Verification code** field, enter the code obtained by solving a simple math problem to confirm the rate update. Click **Save** to apply the updated rate and close the popup. The markups are applied to the updated rate, and the recalculated value is displayed in the **Rate** field in the request details. After approving the request, the exchange is executed using the updated value in the **Rate** field. Before creating a manual deposit via the Back Office, make sure that the **manual** deposit method is created and enabled. To do this, navigate to **System** > **Deposit system** > **Deposit methods**. If the **manual** deposit method is not displayed on the **Deposit methods** page, create the method by following the instructions described in [How to add the manual deposit or withdrawal method](../manage-payment-methods/how-to-add-the-manual-deposit-or-withdrawal-method). After the **manual** deposit method is created and enabled, follow the steps below to create a deposit. Navigate to **Clients** > **General**. Select the client and click the **Edit** button. You can use [filters](../../back-office-guide/get-started#filtering-and-sorting) by name or email for a quick search. Go to the **Transactions** tab, and then select **Deposit**. Click **+Create**. Select a client account to which you want to deposit funds, and then click **Select**. Fill out the form: * Make sure that **Method** is set to **manual**. Check the account number and currency. * Enter the deposit amount. * Set **commissions**. * Enable the **Don’t send email** option if you don't want to notify the client about the deposit operation. * Confirm the operation by solving a simple math problem and enter the result in the **Verification code** field. * Add the **Internal comment** if needed. It will be displayed only in the Back Office. Click **Save** to create the deposit. Before creating a manual payout via the Back Office, make sure that the **manual** withdrawal method is created and enabled. To do this, navigate to **System** > **Payout system** > **Payout methods**. If the **manual** withdrawal method is not displayed on the **Payout methods** page, create the method by following the instructions described in [How to add a manual deposit or withdrawal method](../manage-payment-methods/how-to-add-the-manual-deposit-or-withdrawal-method). After the **manual** withdrawal method is created and enabled, follow the steps below to create a payout. Navigate to **Clients** > **General**. Select the client and click the **Edit** button. You can use [filters](../../back-office-guide/get-started#filtering-and-sorting) by name or email for a quick search. Go to the **Transactions** tab, and then select **Payout**. Click **+Create**. Select a client account from which you want to create a payout, and then click **Select**. Fill out the form: * Make sure that the **Method** is set to **manual**. Check the account number and currency. * Enter the payout amount. * Set **commissions**. * Enable the **Don’t send email** option if you don't want to notify the client about the payout operation. * Confirm the operation by solving a simple math problem and enter the result in the **Verification code** field. * Add the **Internal comment** if needed. It will be displayed only in the Back Office. Click **Save** to create the payout. To create and configure a report: Navigate to **Finance** > **Reports**. Click **+Create** in the upper-right page corner. On the **Create report** page, fill in the following fields: * In the **Interval** dropdown, schedule the report delivery: * **Daily** — the report is run and sent every day * **Weekly** — the report is run and sent once a week * **Monthly** — the report is run and sent once a month * In **Data slice** dropdown, select the period for which data is included in the report, as per the Back Office server time: * **Day** — the previous day, from 00:00 to 23:59 * **Week** — the previous week, from Monday 00:00 to Sunday 23:59 * **Month** — the previous month, from the first day of the month 00:00 to the last day 23:59 * **Curweek** — the previous 7 days, from the first day 00:00 to yesterday 23:59 * **Overall** — from the beginning of track record to yesterday 23:59 * **Curmonth** — from the first day of the current month 00:00 to yesterday 23:59 * In the **File format** dropdown, select **HTML**, **XLSX**, or **CSV**. * In the **Active** dropdown, select the report status: * **Active** — to run and send the report on schedule * **Inactive** — to disable the report * In the **Name** field, enter the report name. * In the **Class** dropdown, select one or several report types that you want to generate: * **Client Finance Report** — shows the amount of deposits, withdrawals and net deposits (the difference between total deposits and total withdrawals) made by each client over a specified time period, in corresponding currencies and in conversion to USD. The report includes the following fields: **Email**, **Verification Level**, **Currency**, **Deposit**, **Withdraw**, **(D - W)**, **(Deposit, USD)**, **(Withdraw, USD)** and **(Deposit - Withdrawal, USD)**. * **Transaction Finance Report** — contains detailed information on all transactions executed over a specified time period. The report includes various fields, such as **ID**, **Account ID**, **Operation ID**, **Email**, **Transaction Type**, **Method**, **Source Currency**, **Source Amount**, **Type Commission**, **Final Amount**, **Target Amount**, **Target Currency**, **Transaction Exchange Rate**, **% Markup**, **Profit Markup**, **Markup Currency** and others. * **Method Finance Report** — contains detailed information on methods used for execution of deposit and withdrawal operations over a specified time period. The data is grouped by currencies (such as fiat and crypto) and includes information about the commissions and profit earned from each operation. The report includes various fields, such as **Method**, **Currency**, **Deposit**, **Withdraw**, **Source Commission**, **Final Deposit amount**, **Final Withdrawal amount**, **Profit Markup**, **Counterparty Commission**, **Profit (Counterparty commission)** and others. * **Currency Finance Report** — shows the amount of deposits, withdrawals and net deposits (the difference between total deposits and total withdrawals) made over a specified time period in a particular currency and in conversion to USD. The report includes the following fields: **Currency**, **Deposit**, **Withdraw**, **(D - W)**, **(Deposit, USD)**, **(Withdraw, USD)** and **(Deposit - Withdrawal, USD)**. * **Balances Report** — shows balance changes on client accounts over a specified time period. The data is grouped by each currency and also includes the total balance change on all client accounts in conversion to USD. The report includes the following fields: **ID**, **Email**, **Client Name**, **Internal Client Type**, **Verification Level**, **Company Name**, **Currency**, **Balance**, **Hold**, **Rate**, **(Balance, USD)**, **Previous Balance** and **(Previous Balance, USD)**. * **User In Out** — this report is similar to the **Client Finance Report**, while also containing additional fields, such as **Transfers (D-W)** and **Manual (D-W)**. * **IB Balances Report** — shows the reward amounts earned by IB partners over a specified time period, as well as the total reward amount in conversion to USD. The report includes the following fields: **ID** (the identifier assigned to an IB partner), **Email**, **Client Name**, **Internal Client Type**, **Verification Level**, **Company Name**, **Currency**, **Balance**, **Rate** and **(Balance, USD)**. * **Balances Simplified Report** — shows balances on client accounts in each currency along with the total balance on all client accounts in conversion to USD. The report includes the following fields: **Email**, **Internal Client Type**, **Currency** and **Balance**. * **LegalEntityBalancesReport** — shows balances on all live accounts of the clients that are served by a specific legal entity. * In the **Mail to** field, enter the email address to which a link to download the report is sent. * In the **Start hour** field, enter the hour at which you want run the report and send it to the specified email, as per the Back Office server time. The value must be in the 0 — 23 range. * In **GMT offset** dropdown, select the GMT offset of your local time zone to send the report at the specified hour in your local time zone. The Back Office server time may differ from the time in your local time zone. The current server date and time are displayed in the topbar. Click **Save** to create the report. To transfer funds between accounts of the same client via the Back Office: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. You can use [filters](../../back-office-guide/get-started#filtering-and-sorting) by name or email for a quick search. Go to the **Transactions** tab, and then select **Transfer**. Click +**Create**. Fill out the form: * Select a debiting account in the **From account** dropdown. * Select a destination account in the **To account** dropdown. * Enter the transfer amount. * Confirm the operation by solving a simple math problem and enter the result in the **Verification code** field. Click **Save** to create the transfer. To exchange funds for a client via the Back Office: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. You can use [filters](../../back-office-guide/get-started#filtering-and-sorting) by name or email for a quick search. Go to the **Transactions** tab, and then select **Exchange**. Click +**Create**. Fill out the form: * Select a debiting account in the **From account** dropdown. * Select a destination account in the **To account** dropdown. * Select the **Exchange type**: * **Source & Rate (Sell)** — when selling currency, the destination amount can't be set * **Destination & Rate (Buy)** — when buying currency, the source amount can't be set * **Source & Destination (Direct)** — when making a direct transfer, the rates can't be set * Set the exchange amounts and rates depending on the selected exchange operation type. * Confirm the operation by solving a simple math problem and enter the result in the **Verification code** field. Click **Save** to exchange the funds. To get data about transactions on wallets and accounts of a specific client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the client details page, go to the **Transactions** tab, then select **Deposit**, **Payout**, **Transfer**, **Exchange**, or **Balance change operations** from the dropdown to view the respective transactions. From each page, export data by clicking the **Export** button in the upper-right corner. If filters are applied, some transactions may be excluded. Clear all filters to ensure you see the full list of transactions. It may also be important to check the **Status** column filters. For example, filter to show only transactions with the **Done** status and exclude those with **Pending** or **Failed** statuses. In the displayed popup: * Select the file format: XLSX or CSV. * Select **Send to email** to receive the file by email or **Download** to save it to your computer. * Click **Export**. You can then use the exported files to calculate and analyze transactions made on the client’s accounts and wallets. You can get the total deposits or withdrawals for all clients by exporting data from the relevant pages of the Back Office. To get the deposit or withdrawal data: Navigate to **Finance** > **Deposits** to view all client deposit transactions or **Finance** > **Payouts** to view all withdrawals. To display only the required information, hide or add columns using the **Column visibility** option. If filters are applied to the **Deposits** or **Payouts** page, some transactions may be excluded. Clear all filters to ensure you that see the full list of transactions. It may also be important to check the **Status** column filters. For example, you can filter to show only transactions with the **Done** status and exclude those with **Pending** or **Failed** statuses. Click the **Export** button in the upper-right page corner. In the displayed popup: * Select the file format: XLSX or CSV. * Select **Send to email** to receive the file by email or **Download** to save it to your computer. * Click **Export**. You can then use the exported file to find the total deposits or withdrawals for client wallets. Requests of the **PaymentSystem Deposit Assistance** and **PaymentSystem Withdrawal Assistance** types are automatically created in **Clients** > **Requests** when a corresponding deposit and withdrawal receives the `Assistance` status. This status indicates that the transaction status couldn't be determined automatically, and the admin must decide whether to continue syncing the transaction status with the external payment system or mark the transaction as failed. ## Note the difference [#note-the-difference] Deposit and withdrawal transactions may be assigned the `Assistance` status, while the corresponding requests in **Clients** > **Requests** are given the **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** type accordingly. These requests contain all available details about the transaction to help the admin make a decision on how to process it. ## Logic for creating PaymentSystem Assistance requests [#logic-for-creating-paymentsystem-assistance-requests] * For **deposits**, **PaymentSystem Deposit Assistance** requests *aren't* created when the `Assistance` status is assigned due to the **sync deadline** error, meaning that the deposit sync time with the payment system has expired. Such deposits must be processed directly in the deposit details in **Finance** > **Deposits**. For details, refer to [How to process deposits with the Assistance status](how-to-process-transactions-with-the-assistance-status#how-to-process-deposits-with-the-assistance-status). * For any reason other than the **sync deadline**, a **PaymentSystem Deposit Assistance** request is created for the deposit, and it must be processed within the corresponding request. * For **withdrawals**, **PaymentSystem Withdrawal Assistance** requests are always created when the `Assistance` status is assigned. These withdrawals must be processed within their respective requests. To process a PaymentSystem Assistance request: Navigate to **Clients** > **Requests**. Find the request related to the deposit or withdrawal transaction with the `Assistance` status. To filter the list, select **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** in the **Type** column and **Pending** in the **Status** column. Click the **Edit** button to open the request and view the transaction payment details. For an overview, refer to the [Payment details structure](how-to-process-transactions-with-the-assistance-status#payment-details-structure). These payment details are the same as those displayed on the **Payment system** tab in the deposit or withdrawal details under **Finance** > **Deposits** and **Finance** > **Payouts**. Based on the information provided in the request, take an appropriate action to update the transaction status. Before updating the transaction status, ensure to check the external payment system for the relevant transaction details to make a correct decision. The following transition options may be available, depending on the transaction’s current state: * [Move to In progress](move-to-in-progress) or [Move to Failed](move-to-failed). * [Move to Success](move-to-success) or [Move to Failed](move-to-failed). **See also** [Move to Success](move-to-success) [Move to In progress](move-to-in-progress) [Move to Failed](move-to-failed) Deposits and withdrawals initiated via [PSS-connected](../../integrations/payment-systems#payment-system-service-pss) methods may receive the `Assistance` status during processing. This status indicates that the transaction status couldn't be determined automatically during syncing with the external payment system and the transaction processing requires manual action. ## How to process deposits with the Assistance status [#how-to-process-deposits-with-the-assistance-status] Deposits may receive the `Assistance` status due to: * The sync time with the payment system has expired, meaning the **sync deadline** has been reached. In this case, the deposit must be processed directly in the deposit details in **Finance** > **Deposits**. * Any reason other than the **sync deadline**. In this case, a **PaymentSystem Deposit Assistance** request is created automatically in **Clients** > **Requests**, and the deposit must be processed within that request. The purpose of processing deposits with the sync deadline error directly in the deposit details is to prevent an excessive number of **PaymentSystem Deposit Assistance** requests and streamline request handling. To determine why a deposit has the `Assistance` status and process it: Navigate to **Finance** > **Deposits**. Find the deposit with the `Assistance` status that you need to process. To filter the list, select `Assistance` in the **Status** column to display only deposits with this status. Select the deposit and click the **Edit** button to open its details. In the deposit details, go to the **Payment system** tab. This tab displays detailed deposit information. For an overview, refer to the [Payment details structure](#payment-details-structure). Determine why the deposit received the `Assistance` status. In the **Timeline** section, review the status details: * If the status is **Unexpected** and the **Error code** field displays `service.sync_deadline`, the deposit syncing time with the payment system has expired. In this case, continue processing the deposit directly on the **Payment system** tab. * If any other error code is displayed, process the deposit in the corresponding **PaymentSystem Deposit Assistance** request that was created automatically in **Clients** > **Requests**. For details, refer to [How to process PaymentSystem Assistance requests for deposits and withdrawals](how-to-process-ps-deposit-assistance-and-ps-withdrawal-assitance-requests). To process the deposit with the `service.sync_deadline` error code, take the appropriate action to update the deposit status on the **Payment system** tab. The following options are available: * **Move to In progress** — to resume syncing of the deposit status with the external payment system. * **Move to Failed** — to stop syncing with the external payment system and mark the deposit as failed. For details, refer to [Move to In progress](move-to-in-progress) and [Move to Failed](move-to-failed). Note that for the `service.sync_deadline` case, these actions must be performed directly within the deposit details, on the **Payment system** tab. Depending on the selected option, the deposit status will be updated to **In progress** and then can reach one of the final statuses or will be updated to **Failed** immediately. ## How to process withdrawals with the Assistance status [#how-to-process-withdrawals-with-the-assistance-status] When a withdrawal receives the `Assistance` status, a **PaymentSystem Withdrawal Assistance** request is always created automatically in **Clients** > **Requests**. Such withdrawals must be processed within these requests. No manual actions for processing withdrawals are available within withdrawal details. To process a withdrawal with the `Assistance` status: Navigate to **Finance** > **Payouts**. Find the withdrawal with the `Assistance` status that you need to process. To filter the list, select `Assistance` in the **Status** column to display only withdrawals with this status. Select the withdrawal and click the **Edit** button to open its details. In the withdrawal details, go to the **Payment system** tab. This tab displays detailed withdrawal information. For an overview, refer to the [Payment details structure](#payment-details-structure). In the **Timeline** section, review the status and error code that caused the withdrawal to receive the `Assistance` status. Unlike deposits, withdrawals with the `Assistance` status always have a **PaymentSystem Withdrawal Assistance** request created in **Clients** > **Requests**. These withdrawals must be manually processed within their respective requests. For details, refer to [How to process PaymentSystem Assistance requests for deposits and withdrawals](how-to-process-ps-deposit-assistance-and-ps-withdrawal-assitance-requests). ## Payment details structure [#payment-details-structure] The following information is available on the **Payment system** tab in the details of deposits and withdrawals listed in **Finance** > **Deposits** and **Finance** > **Payouts**, as well as in the corresponding **PaymentSystem Deposit Assistance** and **PaymentSystem Withdrawal Assistance** requests listed in **Clients** > **Requests**. This information helps the admin decide how to process a specific transaction and includes the following sections: ### Deposit/Withdrawal information [#depositwithdrawal-information] Withdrawal information The main information about the transaction: **Identifier** The transaction identifier in the B2CORE Payment Systems Service (PSS). You can click it to navigate to the transaction details in **Finance** > **Deposits** or **Finance** > **Payouts**. *** **Payment provider identifier** The transaction identifier from the external payment system, which may have two statuses: * `Verified` — a transaction with this identifier exists in the payment system. * `Unverified` — a transaction with this identifier can't be found in the payment system. *** **Status** The status of the transaction in the B2CORE PSS: * **Created** — a transaction was created. * **In Progress** — a transaction is being processed. * **Success** — a transaction was completed successfully. This is a final status. * **Failed** — a transaction failed to complete. This is a final status. * **Unexpected** — a transaction is in an unknown state. This status must be handled by the admin as part of the assistance process. * **Unprocessable** — a transaction is in a state that requires manual actions, as no further actions can be taken automatically. This status must be handled by the admin as part of the assistance process. *** **Initial amount** The amount with which the transaction was initiated. *** **Initial currency** The currency in which the transaction was initiated. *** **Creation date** The date and time when the transaction was created. *** **Last updating date** The date and time when the transaction was last updated. ### Payment input snapshot [#payment-input-snapshot] The information entered by a client on a payment form when initiating a deposit or withdrawal. The fields that clients must complete depend on the selected deposit or withdrawal method. This information is displayed as the field name and the value provided by the client. For some methods, no information is required from clients. In this case, the message `The payment input snapshot is empty` is displayed. Payment input snapshot ### External details [#external-details] Additional information about the transaction, including useful data from the payment system. The set of information depends on the specific payment system. During transaction processing, there are no details in this section. ### Timeline [#timeline] Information about the transaction’s statuses within the B2CORE PSS. The data is presented in chronological order and includes useful details for each status. Timeline ### Polling job [#polling-job] After a transaction is created within the B2CORE PSS, the service initiates periodic requests to the external payment system to check the current status of the transaction. This periodic status check is referred to as the **Polling job** process. Each polling job attempt includes information about the request date, status, and additional details about any errors, if applicable. Polling job After the transaction is successfully completed, the information in all sections of the request is updated accordingly. When transactions — such as deposits, transfers, or exchanges between wallets and trading accounts — have the `Partial` status, it indicates that processing wasn’t completed due to technical issues. These transactions should be processed manually. To process a transaction with the `Partial` status: Navigate to **Finance** > **Transactions**. On the **Transactions** page, select `Partial` in the filter field displayed under the **Status** column to list all the transactions with that status. Select the transaction that you want to process. Click magnifying glass icon displayed on the left side of the transaction row. The system will automatically attempt to determine the final status of the transaction. * If successful, the transaction status is updated accordingly. * If the final status isn’t found, the following error message is displayed: `Operation was not found` and two buttons appear: * process transaction button — the **Process transaction** button * set done status button — the **Set Done status** button Your next step depends on whether the transaction exists on the respective trading platform, such as MT4, MT5, or cTrader. Therefore, navigate to the platform and check whether the funds have been received in the relevant trading account. It's important to verify the fund location before taking any further action. If the transaction is found on the platform, has been processed there, and the funds have reached the destination, click set done status button. This action assigns the `Done` status to the transaction in B2CORE since it has already been processed on the respective platform, but the status wasn’t received back to B2CORE. If the transaction isn't found on the platform, and the funds haven't reached the destination or been deducted from the source wallet, click process transaction button, and then confirm the action in the displayed popup. This will initiate the execution of the transaction again, and upon completion, the transaction will be assigned a final status. You can deposit different amounts to wallets and trading accounts for your clients at once using the **Update balances** option. To proceed, prepare a CSV file with the following information: email addresses of registered clients, account IDs to which funds should be deposited, and deposit amounts. Download the `template_update_balances.csv` file to ensure that your CSV file includes proper headers (such as `Email,AccountID,Amount`) and correctly structured data that is ready for updating balances. Keep in mind the following: * The number of rows in a CSV file mustn’t exceed 800. * Use a comma ( , ) to separate data items in your CSV file. No other separators are accepted. * Specify decimal amounts for deposits using a dot ( . ) as the decimal separator. * If a client account appears multiple times in the CSV file, its balance will be updated based on the number of occurrences. * The **Update balances** option updates balances of demo accounts and archived accounts. To prevent deposits to archived accounts, ensure that your CSV file doesn’t contain IDs of archived accounts. Don’t use the **Update balances** option for depositing funds when migrating client accounts between different platforms. This option is prohibited for such transactions. To update client balances: Navigate to **Clients** > **Accounts**. Click **+Update balances** in the upper-right page corner. In the **Update balances** popup, click **Upload csv file** and select a CSV file containing the required information for updating client account balances. To execute the action, click **Save**. The funds are deposited to clients using the **manual** method (for details, refer to [How to add the manual deposit or withdrawal method](../manage-payment-methods/how-to-add-the-manual-deposit-or-withdrawal-method)). To stop syncing the deposit or withdrawal status with the external payment system, move it to **Failed** in the **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request. To move a transaction to **Failed**: In the related **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request, click **Move to failed**. In the displayed popup, fill in the following fields: * In the **Error code** dropdown, select one of the following failure reasons: * **Operation not found** — indicates that the transaction couldn't be found in the external payment system. * **Operation failed** — indicates that the transaction failed in the external payment system. * **Other error** — indicates any other reason not covered by the options above. * In the **Error description** field, optionally provide a reason for marking the transaction as failed. * To confirm the action, solve a simple math problem and enter the result in the **Verification code** field. Move the transaction to failed Click **OK** to change the transaction status. Once the transaction status is set to **Failed**, the request will be marked as **Rejected**. ## Move a transaction to In progress [#move-a-transaction-to-in-progress] To continue syncing the deposit or withdrawal status with the external payment system, move it to **In progress** in the **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request. This will resume the [Polling job](how-to-process-transactions-with-the-assistance-status#polling-job) process for that transaction. To move a transaction to **In progress**: In the related **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request, click **Move to in progress**. Proceed depending on the status of the **Payment provider identifier** displayed in the [Deposit/Withdrawal information](how-to-process-transactions-with-the-assistance-status#deposit/withdrawal-information). If the **Payment provider identifier** is marked as `Verified`, the following popup appears: Move the verified transaction to in progress To confirm the action, solve a simple math problem and enter the result in the **Verification code** field. If the **Payment provider identifier** is marked as `Unverified`, you must navigate to the external payment system and check that the related transaction exists and copy its identifier. Move the unverified transaction to in progress In the displayed popup, fill in the following fields: * In the **Identifier** field, specify the transaction identifier from the external payment system. * To confirm the action, solve a simple math problem and enter the result in the **Verification code** field. Click **OK** to change the transaction status. Once the transaction status is set to **In Progress**, the request will be marked as **Approved**. This request status doesn't mean that the transaction has been successfully completed. It indicates that syncing with the external payment system has resumed. If the transaction is assigned the **Unexpected** status again during repeated syncing, a new **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request with the **Pending** status will be automatically created in [Clients > Requests](../../back-office-guide/clients/requests), which will again require manual action. The deposit or withdrawal can be moved to **Success** in the **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request only if the latest attempt of the [Polling job](how-to-process-transactions-with-the-assistance-status#polling-job) process has the **Unprocessable** status, indicating that it must be finalized manually. Before moving a transaction to **Success**, you must verify in the external payment system that the corresponding transaction exists and has been successfully executed; otherwise, it may be incorrectly marked as successful, leading to discrepancies in the client's balance. To move a transaction to **Success**: In the related **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request, click **Move to success**. In the displayed popup, fill in the following fields: * In the **Final amount** field, enter the amount to be deposited to or withdrawn from the client's wallet. The amount must be in the currency in which the transaction was initiated. If a client initiates a transaction in one currency but completes the payment in another, you must manually convert the amount and enter its equivalent in the currency in which the transaction was initiated. This amount will be deposited to or deducted from the client's wallet. * To confirm the action, solve a simple math problem and enter the result in the **Verification code** field. Move the deposit to success Click **OK** to change the transaction status. Once the transaction status is set to **Success**, the request will be marked as **Approved**. B2CORE requires an active SMTP service to send email notifications to your clients. For optimal performance, select an SMTP provider that offers high deliverability and doesn’t impose strict daily sending limits. ## SMTP providers to use and to avoid [#smtp-providers-to-use-and-to-avoid] Don't use **Gmail**, **Office 365**, **Outlook.com**, **Yahoo**, or similar providers. These services impose strict daily sending limits and aren't designed for bulk or transactional email delivery. For reliable performance and scalability, use dedicated SMTP providers such as [Mailchimp](https://mailchimp.com/), [SendGrid](https://sendgrid.com/), or [Mailgun](https://www.mailgun.com/). The following information is required to configure the SMTP service connection via the B2CORE Back Office: * SMTP hostname * SMTP port * SMTP username * SMTP password ## How to sign up with an SMTP service provider [#how-to-sign-up-with-an-smtp-service-provider] This instruction describes how to sign up with an SMTP service provider (using the [Mailgun](https://www.mailgun.com/) provider for illustration purposes). You can choose any SMTP service provider that you want to use and configure the SMTP settings by following your provider’s instructions. This instruction is created based on the latest version of Mailgun as of this writing. Due to possible changes to the procedures described here, we suggest that you consult the official [Mailgun Help Center](https://help.mailgun.com/hc/en-us) or contact their support in case you have any questions. Go to the [Mailgun](https://www.mailgun.com/) website and click **Get Started**. Fill in the required fields, including your full name, email address, and payment information, select a plan that you want to use for the SMTP service, and then click **Create Account**. On the main [Mailgun](https://www.mailgun.com/) web page, click **Log In** and log in to Mailgun with your credentials. Navigate to **Sending** > **Domains** and click **Add New Domain**. Fill in the following information: * In the **Domain name** field, enter your company domain. * Select a domain region. Click **Add Domain**. Navigate to **Sending** > **Domain settings**. Select your domain name in the **Domain** dropdown located at the top of the page, and then go to the **DNS records** tab. Add the following DNS records and assign to them the appropriate values via your DNS hosting provider. * two TXT records * two MX records * one CNAME record Copy the record names and values displayed in the **Hostname** and **Enter this value** columns on the **DNS records** tab and paste them in the corresponding fields when adding DNS records via the DNS hosting provider. Green checkmarks displayed on the left side of each record indicate that the record has been set up properly. Navigate to **Sending** > **Overview** > **SMTP** to view your SMTP hostname, port, username, and default password. Use this information to configure the Mailgun SMTP connection via the B2CORE Back Office. ## How to configure an SMTP service connection via the B2CORE Back Office [#how-to-configure-an-smtp-service-connection-via-the-b2core-back-office] Navigate to **Mailing** > **System** > **Providers**, and click **+Create** in the upper-right page corner. Configure the SMTP connection settings: * In the **Caption** field, enter a caption that you want to use for the SMTP configuration. * Make sure that the **Driver** field displays “smtp”. * In the **Host** field, enter an SMTP service hostname. * In the **Port** field, enter a port number to be used for the SMTP connection. * In the **Username** and **Password** fields, enter your SMTP service credentials. * In the **Sent from** field, enter an email address that will be displayed to your email recipients. * In the **Sent from name** field, enter a name that you want to display to your email recipients (for example, this may be your company name). * In the **Encryption** dropdown, select **TLS** or **SSL** to enable a secure connection when communicating with the SMTP service. Choose **Not selected** to disable encryption. * In the **Enabled** dropdown, select **enabled** to make the SMTP service connection active. Click **Test Connection** to confirm that you can connect to the SMTP service with the current settings. The **Test Connection** button is highlighted with green if the connection is successful. Click **Save**. The SMTP configuration is now added to the list of email providers. To quickly test the SMTP configuration that you have set up, go to the B2CORE UI **Sign In** page, and click **Sign up now!** to register a new account. If you already have an account, click **Forget your password?** and then enter your email address. In both cases, you should receive appropriate emails, indicating that your SMTP service connection is properly configured. To check the status of the recently sent emails, navigate to **Mailing** > **System** > **Log** in the Back Office. There may be several reasons why clients do not receive email notifications (for example, emails sent upon logging in to B2CORE UI or successful execution of deposit or withdrawal operations): * The required email template is not enabled. * There are issues with the email service operation. * There are issues with the SMTP server connection. To determine the reason for email delivery failure: Track an email delivery with the Email log. * Navigate to **Mailing** > **System** > **Log**. * In the search box located in the **Email** column, enter the email address to which the email should have been sent. If the Email log doesn’t contain a record of the required email having been sent to the specified email address, the reason for this may be that the corresponding email template has not been enabled. Check if an email template is enabled. * Navigate to **System** > **Templates** > **Email** > **Template types**. * Find the required email template in the list (for example, `DepositSuccessful` or `WithdrawDone`) and check if it is enabled. * If not, enable the template by clicking the **Edit** button located in the template row and selecting **Yes** from the **Enabled** drop-down list. If enabling the template doesn’t solve the issue, check the email service operation and SMTP settings. Check the email service operation by sending test emails to your email address. For example, you can request to withdraw funds from one of your accounts and check if the corresponding email notification has been sent to your email address. If you have received the email, this means there are issues with the email service operation on the client side. If you have failed to receive the email, this means that there are issues with the SMTP server connection. To solve the issues, check your [SMTP configuration settings](how-to-configure-smtp) or contact your SMTP service provider. This article explains how amounts are calculated in the **Pay** and **Receive** fields in the B2CORE UI when transactions involve currency conversions. For such transactions, the resulting amounts depend on the following: * The **rounding rules** applied to the amount in the **Pay** and **Receive** fields. * The configured **currency scales** defining the number of decimal places supported for both the source and target currencies involved in a transaction. ## Rounding rules [#rounding-rules] For the **Pay** and **Receive** fields, different rounding rules are applied in B2CORE: * The **Pay** field: the amount is always **rounded up**. This ensures that the broker does not lose profit due to rounding differences. * The **Receive** field: the amount is always **rounded down** according to the scale of the target currency. ## Currency scales [#currency-scales] All currencies used for transactions in B2CORE have configured **scales**, which define the number of allowed decimal places. The scale determines the precision of rounding for any transaction involving that currency. You can configure the scale for each currency by navigating to **Currencies** > **Currencies**, opening the currency details, and setting the required value in the **Precision** field. For example: * **THB** (Thai Baht): scale `0` (no decimals) * **USD** (US Dollar): scale `2 `(two decimals) ## Example [#example] Suppose a client initiates a deposit to a **USD** wallet and pays in **THB** (Thai Baht). * When **THB** has a scale of `0` (no decimals): * Enter **245 USD** in the **Receive** field → the **Pay** field displays **7,968 THB**. * Enter **7,968 THB** in the **Pay** field → the **Receive** field displays **245.01 USD**. THB with scale 0 * When **THB** has a scale of `1` (one decimal): * Enter **245 USD** in the **Receive** field → the **Pay** field displays **7,967.4 THB**. * Enter **7,967.4 THB** in the **Pay** field → the **Receive** field displays **245 USD**. THB with scale 1 The mismatch occurs because the scale of `0` can't preserve decimal values, while scales of `1` or higher allow fractional amounts, resulting in more precise conversions. This instruction explains how to add deposit and withdrawal methods that use payment systems that can be connected to B2CORE through PSS. Payment System Service (PSS) is a new B2CORE service that offers enhanced connections to external payment providers and cashier systems. Payment systems marked with `Yes` in the **PSS-supported** column in [Integration > Payment systems](../../integrations/payment-systems) can be connected through PSS. ## General procedure [#general-procedure] Before adding deposit and withdrawal methods in B2CORE, ensure that you are signed up for the selected payment system and have an active account in that system. The procedure for adding a deposit or withdrawal method for payment systems that support connections through PSS includes two steps: Configure connections to a payment system in **System** > **External connections**. If the payment system supports both deposits and withdrawals, and you plan to use it for both, you must create two separate connections: one for deposits and another for withdrawals. For details, refer to [Step 1. How to configure a connection to a PSS-supported payment system](#step-1-how-to-configure-a-connection-to-a-pss-supported-payment-system). Add the deposit or withdrawal method that will use the selected payment systems. * To add a deposit method, navigate to **System** > **Deposit system** > **Deposit methods**. * To add a withdrawal method, navigate to **System** > **Payout system** > **Payout methods**. For details, refer to [Step 2. How to add a deposit or withdrawal method](#step-2-how-to-add-a-deposit-or-withdrawal-method). ## Step 1. How to configure a connection to a PSS-supported payment system [#step-1-how-to-configure-a-connection-to-a-pss-supported-payment-system] If a payment system supports both deposits and withdrawals and you intend to use it for both, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to a payment system: Navigate to **System** > **External connection**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name can only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to configure a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to configure a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select the payment system that you want to use for the deposit or withdrawal method. In the **Credentials** section that appears, fill in the required connection settings specific to the selected payment system. Click **Save** to create the connection. The connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. The connection is now ready to be used for adding a deposit or withdrawal method. ## Step 2. How to add a deposit or withdrawal method [#step-2-how-to-add-a-deposit-or-withdrawal-method] After configuring the required connections to the payment system, proceed to add and set up a deposit or withdrawal method: Navigate to **System** > **Deposit system** > **Deposit methods** or **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a deposit method. * **PaymentSystemWithdrawal** — to add a withdrawal method. After selecting the provider, the following fields will appear: * In the **Available account currencies** dropdown, select one or more currencies. The method can only be applied to accounts denominated in the selected currencies. * In the **Driver** dropdown, select the payment system that will be used for this method. * In the **Connection** dropdown, select the previously configured [connection](#step-1-how-to-configure-a-connection-to-a-pss-supported-payment-system) to the payment system. After specifying the connection, the **Configuration** section will appear, in which you may need to configure additional settings for the method. If the message `Configuration form is empty` is displayed, no additional settings are required. Click **Save** to create the method. The method will appear in the list of deposit methods. Click the **Edit** button to enter the method details and complete the following fields: * On the **Settings** tab, select one or more groups in which the method will be included, such as **Crypto**, **Fiat**, or both. * In the **Icon** field, specify the icon name that can be found in [Payment systems](../../integrations/payment-systems) to display the icon for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab (for the tab description, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details) or [Payout methods](../../back-office-guide/system/payout-system#details)). * If needed, configure commissions for the methods on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Click **Save** to apply the changes. The deposit or withdrawal method that uses the selected payment system is now configured in the B2CORE Back Office. ## Step 3. How to test a method configuration [#step-3-how-to-test-a-method-configuration] To validate the configuration and connection settings of a deposit or withdrawal method and ensure the method is operational, use **configuration testing**, which is available: * during method creation * during method configuration editing * during background testing while the method is in use ### How to manually test a method configuration [#how-to-manually-test-a-method-configuration] Use manual configuration testing when creating a method or editing its configuration to verify that the method connection and configuration settings are correct before saving your changes. To test a method configuration: Navigate to **System** > **Deposit system** > **Deposit methods** or **System** > **Payout system** > **Payout methods**. Select the method and click **Edit** to open the method details. Click the **Test configuration** button below the **Configuration** form to validate the method connection and configuration settings. The test is performed using two data sources: the information entered in the **Configuration** form and the **Credentials** specified in the external connection selected for the method. The test result is displayed on the page and can be one of the outcomes listed in [Method configuration test results](#method-configuration-test-results). ### How to view background method configuration test results [#how-to-view-background-method-configuration-test-results] After a deposit or withdrawal method is successfully created, a **background testing process** starts automatically. At defined intervals, the system validates two data sources: the information entered in the **Configuration** form and the **Credentials** provided by the external connection selected for the method. These checks may result in one of the outcomes listed in [Method configuration test results](#method-configuration-test-results). Unlike manual testing performed using the **Test configuration** button, background testing can detect issues that weren't present when the method was created or edited but appeared later due to changes in the payment system behavior. To view background test results: Navigate to **System** > **Deposit system** > **Deposit methods** or **System** > **Payout system** > **Payout methods**. Select the method and click **Edit** to open the method details. Go to the **Test configuration** tab to view the background test results. Manual configuration testing performed using the **Test configuration** button doesn't affect background test results and isn't displayed on this tab. The background test results are displayed as follows. When a method is initially created and the **Configuration** form (if applicable) is completed, along with the creation of an external connection containing **Credentials**, both the **Configuration** and **Credentials** records are assigned **version 1**. The current versions are shown in the lower-right corner of the tab. New method configuration testing Each time the **Configuration** or the associated **Credentials** from the external connection used by the method are updated, the system automatically increments the corresponding version number. When a new version is created, background testing for that version starts automatically. As a result, the test outcome may differ from the previous one. Updated method configuration testing After the **Configuration** or **Credentials** are updated: * The corresponding version is increased. * Background testing of the new version starts and may take some time. * Results of the previous tests become outdated: * They are moved to the **Previous** tests section. * Their **Relevance** value changes to `Old`. Once background testing of the new version is completed: * The latest test result becomes the current one. * The **Relevance** value changes to `Actual`, indicating that the result corresponds to the current configuration version. Background test result may also change without updating versions of the **Configuration** or **Credentials** from the respective external connection. This can occur for several reasons, including temporary unavailability of the external payment system, changes to the external service API, errors during the testing process. In such cases, a new background test result is also displayed on the tab. ### Method configuration test results [#method-configuration-test-results] Configuration testing can return one of the following results, indicating the current status of a deposit or withdrawal method: * **Authorized** — successful authentication with the payment system. The payment system account has sufficient permissions to perform financial operations. Successful — Authorized * **Available** — successful authentication with the payment system. This status doesn't guarantee that the account has permissions to create deposits or withdrawals. Successful — Available * **Failed** — configuration testing has failed. This status includes an error code and description. Failed * **Unexpected** — an unexpected configuration test result. This status includes an error code and description. Unexpected * **Not implemented** — configuration testing is not implemented for this payment driver. Not implemented **See also** [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods) [How to restrict the use of deposit and withdrawal methods](how-to-restrict-the-use-of-deposit-and-withdrawal-methods) [How to process transactions with the Assistance status](../manage-finances/how-to-process-transactions-with-the-assistance-status) This instruction explains how to add deposit and withdrawal methods using non-PSS connections for payment systems that haven't yet migrated to the new [B2CORE Payment System Service (PSS)](../../integrations/payment-systems#payment-system-service-pss). Non-PSS systems are marked with `No` in the **PSS-supported** column in [Integration > Payment systems](../../integrations/payment-systems). Before adding deposit and withdrawal methods in B2CORE, ensure that you are signed up for the selected payment system and have an active account in that system. To add and set up a deposit or withdrawal method: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the displayed page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select a payment system that you want to use for deposits or withdrawals. * In the displayed **Currency** dropdown, select a currency for deposits or withdrawals. After creating the method, you can add multiple currencies to it on the **TR Currencies** tab. * Leave the **Connection** field empty. Click **Save** to create the method. The created method is enabled by default. Locate the newly created method in the list and click the **Edit** button in the method row. On the **Settings** tab, select one or more groups in which the method should be included, such as **Fiat**, **Crypto**, or both. In the **Icon** field, specify the icon name that can be found in [Payment systems](../../integrations/payment-systems) to display the icon for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. Depending on the payment system that you selected as a provider, you may need to configure additional options that are specific to the provider in the **Provider settings** section. Review the currencies added on the **TR Currencies** and **PS Currencies** tabs, and add more if necessary (for tab descriptions, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details) or [Payout methods](../../back-office-guide/system/payout-system#details)). If needed, configure commissions for the methods on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Click **Save** to apply the changes. Click **Test connection** to validate the connection settings. The deposit or withdrawal method that uses the selected payment system is now configured in the B2CORE Back Office. **See also** [How to add the manual deposit or withdrawal method](how-to-add-the-manual-deposit-or-withdrawal-method) [How to add the Constructor deposit or withdrawal method](how-to-add-the-constructor-deposit-or-withdrawal-method) [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods) [How to restrict the use of deposit and withdrawal methods](how-to-restrict-the-use-of-deposit-and-withdrawal-methods) You can use the **Constructor** method for deposits or withdrawals when customization is needed to meet specific requirements. With **Constructor** methods, you can add and configure fields that clients must fill in when making deposits or withdrawals in the B2CORE UI. This flexibility is useful when additional details, such as bank information, payment references, or required documents, must be provided by clients. By ensuring that all necessary information is collected, these methods help streamline deposit and withdrawal processing. To add the **Constructor** method for deposits or withdrawals: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create method** page, fill in the following fields: * In the **Name** field, enter a name for the method, such as `Constructor`. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **Constructor**. * In the displayed **Currency** dropdown, select a currency for deposits or withdrawals. After creating the method, you can add multiple currencies to it on the **TR Currencies** tab. * Leave the **Connection** dropdown empty. Click **Save** to create the method. The **Constructor** method will appear in the list of methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, select one or more groups in which the method should be included, such as **Fiat**, **Crypto**, or both. * Review the currencies added on the **TR Currencies** and **PS Currencies** tabs, and add more if necessary (for tab descriptions, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details) or [Payout methods](../../back-office-guide/system/payout-system#details)). * Check the method status. Keep the method inactive (**No** is displayed in the **Enabled** field) until the method configuration is fully completed, including adding [custom fields](#how-to-add-custom-fields-for-the-constructor-deposit-or-withdrawal-method). Once done, activate the method. Click **Save** to apply the changes. The initial setup of the **Constructor** method is complete. Next, proceed with adding the required custom fields. ## How to add custom fields for the Constructor deposit or withdrawal method [#how-to-add-custom-fields-for-the-constructor-deposit-or-withdrawal-method] You can add and set up custom fields for deposit and withdrawal methods that use the **Constructor** provider. To add a custom field: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Select the deposit or withdrawal method that uses the **Constructor** provider. Click **Edit** to enter the method details. On the **Settings** tab, navigate to the **Custom fields** section, and then click **Add field**. In the **Add field** popup, fill in the following fields: * In the **Caption** field, enter a field name. The name will be displayed in the B2CORE UI. You can optionally add localizations to the field name by clicking the button on the right side of the **Caption** field and providing translations for the required languages. When switching languages in the B2CORE UI, the field name will be displayed according to the selected language. * In the **Type** dropdown, select a field type. The following types are available: * **Text** — to add a text field. * **Select with autocomplete** — to add a field with predefined options. When a client begins typing in this field, options that match the entered characters are displayed, enabling the client to select the desired one. * **File** — to add a field for attaching a document necessary for depositing or withdrawing funds. Click **Save** to add the custom field. To configure properties of the newly added field, click the **Edit** button located in the field row: * In the displayed **Main field settings** section, you can make the field mandatory by selecting `required` in the **Rules** field. * For a field of the **Select with autocomplete** type, add a list of predefined options. The options can be added manually or uploaded automatically by connecting to an appropriate API resource (for details, refer to [How to upload a list of predefined options for a custom field](#how-to-upload-a-list-of-predefined-options-for-a-custom-field)) * For a field of the **File** type, in the **Document type** dropdown, select the type of a document that clients should attach. The list of available document types includes all the types configured on the **Verification** > **Document types** page. Clients can attach files in JPEG, PNG, or PDF format with the file size up to 3 MB. Once you have completed the method configuration, activate it by selecting **Yes** in the **Enabled** dropdown. Click **Save** to apply the changes. When clients deposit or withdraw funds with the **Constructor** method, the added custom fields are displayed to them in the same order as they are listed in the **Custom fields** section of the Back Office. ## How to upload a list of predefined options for a custom field [#how-to-upload-a-list-of-predefined-options-for-a-custom-field] For each custom field of the **Select with autocomplete** type, you can automatically upload predefined options that clients can select when they deposit or withdraw funds in the B2CORE UI. For example, instead of manually adding bank names as predefined options for the “Bank name” field, you can retrieve them from an appropriate resource defined for your application API. To upload a list of predefined options for a custom field: Navigate to the details of a deposit or withdrawal method that uses the **Constructor** provider. On the **Settings** tab, navigate to the **Custom fields** section. Select a field of the **Select with autocomplete** type for which you want to upload a list of predefined options (such as “Bank name”), and then click **Edit**. Navigate to the **Field dynamic options** section, which is displayed below the **Custom fields** list, and specify the following fields: * In the **Endpoint** field, specify a URL of a specific API resource that includes field values that you want to use as predefined options for the selected custom field (such as the following sample endpoint: `https://[host]/api/banks`). The structure of the specified API resource is displayed in the **Endpoint result preview** field. The following example illustrates a possible resource structure: ```json [ { "bankId": 1, "bankName": "Bank name 1", "countryCode": "AE", "countryName": "UAE" }, { "bankId": 2, "bankName": "Bank name 2", "countryCode": "AE", "countryName": "UAE" }, { "bankId": 3, "bankName": "Bank name 3", "countryCode": "GE", "countryName": "Georgia" }, { "bankId": 4, "bankName": "Bank name 4", "countryCode": "GE", "countryName": "Georgia" }, { "bankId": 5, "bankName": "Bank name 5", "countryCode": "MZ", "countryName": "Mozambique" } ] ``` * In the **Options from key** dropdown, select the root element of the specified API resource (such as `root`). * In the **Option value from key** dropdown, select the resource field specifying the values of predefined options displayed for the custom field (such as `bankId`). * In the **Option caption from key** dropdown, select the resource field specifying the captions of the predefined options (such as `bankName`). Click **Save** to apply the changes. In the B2CORE UI, the list of predefined options for the “Bank name” custom field will include all the values retrieved from the `bankName` fields of the sample API resource. ## How to dynamically form a list of predefined options for a custom field [#how-to-dynamically-form-a-list-of-predefined-options-for-a-custom-field] A list of predefined options for a custom field can be formed dynamically, with the available options changing based on the selection made in an associated field. For example, a list of predefined options for the “Bank name” field can depend on the country that is selected in the “Country” field. To form dynamic lists of predefined options, both the associated custom fields must be populated with the options retrieved from the same API resource (for details, refer to [How to upload a list of predefined options for a custom field](#how-to-upload-a-list-of-predefined-options-for-a-custom-field)). To dynamically form a list of predefined options for a custom field: Navigate to the details of a deposit or withdrawal method that uses the **Constructor** provider. On the **Settings** tab, navigate to the **Custom fields** section. Select a field of the **Select with autocomplete** type for which you want to form a dynamic list of predefined options (such as “Bank name”), and then click **Edit**. Navigate to the **Field dynamic options** section, which is displayed below the **Custom fields** list, and specify the following field settings: * In the **Depends on field** dropdown, select another custom field (such as “Country”) that you want to associate with the “Bank name” field. * In the **Depends on field by key** dropdown, select the resource field that will be used to filter the options for the “Bank name” field (such as `countryCode`). Dynamic options for custom fields Click **Save** to apply the changes. In the B2CORE UI, the list of bank names displayed for the “Bank name” field will be filtered based on the country selected by the client in the the “Country” field. You can use the **manual** deposit and withdrawal methods to make deposits and withdrawals for your clients in the Back Office. For the **manual** method to work correctly, you must configure exchange rates in **Currencies** > **Rates** for all currencies that you plan to use with this method. These rates are required to calculate the **daily** and **monthly limits** for deposits and withdrawals, specified in verification level settings (for details, refer to [How to set up deposit, withdrawal, and transfer limits by verification levels](../manage-verification-options/how-to-use-the-kyc-constructor#how-to-set-up-deposit-withdrawal-and-transfer-limits-by-verification-levels)). Because the limits are calculated in `USD`, you must configure rates to `USD` for each currency added to the **manual** method. For example, if you deposit funds in `EUR` to a client wallet denominated in `EUR` using the **manual** method, the `EURUSD` exchange rate is still required to calculate the client’s daily and monthly deposit limits; otherwise, an error will occur when processing the deposit. To add the manual methods for deposits and withdrawals: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a method** page, fill in the following fields: * In the **Name** field, enter a name for the method, such as `manual`. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption that will be applied to the method in the Back Office, such as `Manual Deposit` or `Manual Withdrawal`. * In the **Provider** dropdown, select **manual**. * In the displayed **Currency** dropdown, select a currency for deposits or withdrawals. After creating the method, you can add multiple currencies to it on the **TR Currencies** tab. * Leave the **Connection** dropdown empty. Click **Save** to create the method. The manual method appears in the list of methods and is enabled by default. To add more currencies for deposits or withdrawals using this method, click **Edit** to open the method details. On the **TR Currencies** tab, add the needed currencies. Click **Save** to apply the changes. The **manual** method is now ready for making deposits or withdrawals in the selected currencies via the Back Office. **See also** [How to create a deposit](../manage-finances/how-to-create-a-deposit) [How to create a payout](../manage-finances/how-to-create-a-payout) For deposit and withdrawal methods, you can configure commissions that will be deducted from clients when they make deposits or withdrawals in the B2CORE UI. To configure commissions: Navigate to **System** > **Deposit system** > **Deposit methods** or\ **System** > **Payout system** > **Payout methods**. Select the method and click the **Edit** button in the method row. On the **Edit method** page, go to the **Commissions** tab and click **+Add**. In the **Create commission** popup, fill in the following fields: * In the **Currency** dropdown, select a commission currency. * In the **Type** dropdown, select the commission type **TR** or **PSP** (for details, refer to [Deposit methods](../../back-office-guide/system/deposit-system#commissions-tab) and [Payout methods](../../back-office-guide/system/payout-system#commissions-tab)). * Enter commission rates in the respective fields shown in the image below. Fields for configuring commissions The use of these fields follows the formula: `Minimum commission amount (1) <= Fixed rate (2) + Percentage rate % (3) <= Maximum commission amount (4)` You can set a fixed commission rate, a percentage commission rate, or a combination of both. * To set a fixed commission rate, enter the commission amount in the field `2`. The specified commission amount is charged for each deposit or withdrawal transaction regardless of the transaction amount. For fixed commission rates, leave the other fields empty. * To set a percentage commission rate, enter the percentage value in the field `3`. The specified percentage of a deposit or withdrawal amount is charged as a commission. For percentage commission rates, it’s recommended that you set the minimum commission amount in the field `1` and the maximum commission amount in the field `4`. The commission can’t be be lower than the minimum amount or exceed the maximum amount. * If both a fixed rate in the field `2` and a percentage rate in the field `3` are entered, the commission is calculated as the sum of the fixed amount and the specified percentage of a deposit or withdrawal amount. For combined commissions, it’s also recommended that you set the minimum and maximum commission amounts. Click **Save** to apply the commission settings to the selected method. ## Example [#example] Suppose that commission rates for deposits in `USD` are configured as follows: `15 ≤ 10 + 5% ≤ 50` In this case: * The commission amount is calculated as 5% of a deposit amount plus a fixed rate of 10 USD. * The commission amount can't be less than 15 USD and can't exceed 50 USD. If 100 USD are credited to the client's account after the deposit is successfully processed by the payment provider, the commission is calculated as: `10 + (100 * 0.05) = 15 USD` If 1,000 USD are credited to the client's account, the commission is calculated as: `10 + (1,000 * 0.05) = 60 USD`, which exceeds the maximum commission limit. Therefore, the commission will be capped at `50 USD`. [1-2-Pay](https://1-2-pay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss). It supports deposits via QR codes and withdrawals to bank accounts, processed in `THB`. Follow the instructions below to configure the 1-2-Pay connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to 1-2-Pay. Before proceeding with the instructions, you must have signed up for 1-2-Pay and have an active account. All the details required for configuring connections to 1-2-Pay, including the **API start base URL**, **API sync base URL**, and other credentials, must be requested from the 1-2-Pay support. ## Configure connections to 1-2-Pay [#configure-connections-to-1-2-pay] If you plan to use 1-2-Pay for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to 1-2-Pay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_1-2-Pay` or `Withdrawals_1-2-Pay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **1-2-PAY**. In the **Credentials** section that appears, configure the settings specific to 1-2-Pay: * In the **Sandbox** dropdown, select: * **Yes** — for the sandbox testing environment * **No** — for the production environment * In the **API start base URL** field, specify the base URL for creating payment requests, provided by 1-2-Pay. * In the **API sync base URL** field, specify the base URL used by B2CORE to receive and validate callbacks, also provided by 1-2-Pay. ### Key points about URLs [#key-points-about-urls] * The **API start base URL** and **API sync base URL** are different endpoints and must be requested directly from 1-2-Pay. * Make sure to always use HTTPS, for example: * API start base URL: `https://api.example.com/` * API sync base URL: `https://inquiry.example.com/` * 1-2-Pay provides specific URLs for each environment. The URLs for sandbox differ from those for production, so be sure to request both sets and use the appropriate ones for your configuration. * In the **Channel** field, enter the channel assigned to your integration by 1-2-Pay. * In the **Partner code** field, enter the partner code assigned to your company by 1-2-Pay. * In the **Auth key** field, enter the API key for signing requests, provided by 1-2-Pay. Click **Save** to create the connection. The **1-2-Pay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via 1-2-Pay, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through 1-2-Pay [#add-a-deposit-method-through-1-2-pay] To add and set up a method for making deposits through 1-2-Pay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through 1-2-Pay will be available to accounts denominated in the selected currencies. For these currencies, conversion rates for `THB` must be configured. * In the **Driver** dropdown, select **1-2-PAY**. * In the **Connection** dropdown, select the previously configured [1-2-Pay connection](#configure-connections-to-1-2-pay). Skip the **Configuration** section as no settings are required for the 1-2-Pay deposit method. Click **Save** to create the deposit method. The **1-2-Pay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-12pay` to display the [predefined icon](../../integrations/payment-systems) for the 1-2-Pay deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `THB`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). 1-2-Pay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **1-2-Pay** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through 1-2-Pay [#add-a-withdrawal-method-through-1-2-pay] To add and set up a method for making withdrawals through 1-2-Pay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through 1-2-Pay will be available from accounts denominated in the selected currencies. For these currencies, conversion rates for `THB` must be configured. * In the **Driver** dropdown, select **1-2-PAY**. * In the **Connection** dropdown, select the previously configured [1-2-Pay connection for withdrawals](#configure-connections-to-1-2-pay). Skip the **Configuration** section as no settings are required for the 1-2-Pay withdrawal method. Click **Save** to create the withdrawal method. The **1-2-Pay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-12pay` to display the [predefined icon](../../integrations/payment-systems) for the 1-2-Pay withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `THB`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). 1-2-Pay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **1-2-Pay** withdrawal method is now configured in the B2CORE Back Office. ## Set up webhooks in 1-2-Pay [#set-up-webhooks-in-1-2-pay] To receive status updates for deposits and withdrawals in B2CORE, notification webhooks must be set up on the side of 1-2-Pay. ### Copy webhook URLs from the B2CORE Back Office [#copy-webhook-urls-from-the-b2core-back-office] You will need separate webhook URLs for both deposit and withdrawal methods. In the B2CORE Back Office, navigate to: * **System** > **Deposit system** > **Deposit methods** * **System** > **Payout system** > **Payout methods** Find the configured 1-2-Pay deposit or withdrawal method and click **Edit** to open its details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Provide URLs to 1-2-Pay [#provide-urls-to-1-2-pay] Send the copied webhook URLs (for both deposits and withdrawals) to the 1-2-Pay support for configuration on their side. [B2BINPAY](https://b2binpay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits with [static payment details](#deposits-with-static-payment-details-via-b2binpay) and withdrawals. The **Travel Rule** isn't currently supported for this integration because the corresponding driver for connecting to B2BIТPAY doesn't yet support **Travel Rule** requirements. Follow the instructions below to configure the B2BINPAY connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to B2BINPAY. Before proceeding with the instructions, you must have signed up for B2BINPAY and have an active wallet. ## Supported currencies [#supported-currencies] For the list of supported currencies for deposits and withdrawals via B2BINPAY, refer to [Currency codes](https://docs.b2binpay.com/references/currency-codes) in the B2BINPAY documentation. ## Configure connections to B2BINPAY [#configure-connections-to-b2binpay] If you plan to use B2BINPAY for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to B2BINPAY: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_B2BINPAY` or `Withdrawals_B2BINPAY`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemStaticDeposit** — to add a connection that will be used for a deposit method that supports **static payment details**. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **B2BINPAY V3**. In the **Credentials** section that appears, configure the B2BINPAY-specific settings: * In **API base URL** field, specify the base URL provided by B2BINPAY for your integration environment. * In the **Client ID** field, enter your client identifier provided by B2BINPAY. * In the **Client secret** field, enter the secret key associated with your client ID. * In the **Callback secret** field, enter the key used to verify callback notifications from B2BINPAY. For more details, refer to [How to access the API](https://docs.b2binpay.com/how-tos/manage-your-profile-and-system/how-to-access-api) in the B2BINPAY documentation. Click **Save** to create the connection. The B2BINPAY connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via B2BINPAY, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through B2BINPAY [#add-a-deposit-method-through-b2binpay] To add and set up a deposit method through B2BINPAY that supports **static payment details**: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemStaticDeposit**. After selecting **PaymentSystemStaticDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. The method will be available for depositing funds to client wallets in B2CORE, which are denominated in the currencies added on this tab. * In the **Driver** dropdown, select **B2BINPAY V3**. * In the **Connection** dropdown, select the previously configured [B2BINPAY connection for deposits](#configure-connections-to-b2binpay). After selecting the connection, the **Configuration** form appears. You may see the message `Configuration form is temporarily unavailable.` Wait a short while for the form to become available. In the **Configuration** section, fill in the following fields: * In the **Wallet** dropdown, select your B2BINPAY wallet that will be used for processing transactions. For each wallet in the list, the identifier assigned by B2BINPAY, the wallet type (**Merchant** or **Enterprise**), the wallet currency, and the label (if specified in B2BINPAY) are displayed. For details, refer to [Blockchain selection for Merchant and Enterprise wallets](#blockchain-selection-for-merchant-and-enterprise-wallets). * The **Collect personal data** field displays **No**, which can't be changed as the **Travel rule** isn't currently supported for this B2BINPAY integration. Click **Save** to create the deposit method. The B2BINPAY deposit method will appear in the list of deposit methods. Click **Edit** to open the method details and fill in the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-b2binpay` to display the [predefined icon](../../integrations/payment-systems) for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * In the **Rates provider** dropdown, select B2BINPAY as the preferred rate provider for processing deposits with conversions. To do this, B2BINPAY must first be added as an exchange rate provider under **Currencies** > **Rates** (for details, refer to [How to configure currency exchange rates](../manage-currencies/how-to-configure-currency-exchange-rates)). * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the currencies in which deposits can be processed. These are the currencies supported by the B2BINPAY wallet selected in the **Configuration** section. To enable deposits in a specific currency via this method, make sure that this currency is added on the **PS Currencies** tab. B2BINPAY deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The B2BINPAY deposit method with **static payment details** is now configured in the Back Office and available to clients in the B2CORE UI. ## Add a withdrawal method through B2BINPAY [#add-a-withdrawal-method-through-b2binpay] To add and set up a method for making withdrawals through B2BINPAY: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. The method will be available for withdrawing funds from client wallets in B2CORE, which are denominated in the currencies added on this tab. * In the **Driver** dropdown, select **B2BINPAY V3**. * In the **Connection** dropdown, select the previously configured [B2BINPAY connection for withdrawals](#configure-connections-to-b2binpay). After selecting the connection, the **Configuration** form appears. You may see the message `Configuration form is temporarily unavailable.` Wait a short while for the form to become available. In the **Configuration** section, fill in the following fields: * In the **Wallet** dropdown, select your B2BINPAY wallet that will be used for processing transactions. For each wallet in the list, the identifier assigned by B2BINPAY, the wallet type (**Merchant** or **Enterprise**), the wallet currency, and the label (if specified in B2BINPAY) are displayed. For details, refer to [Blockchain selection for Merchant and Enterprise wallets](#blockchain-selection-for-merchant-and-enterprise-wallets). * In the **Blockchain fee level** dropdown, select **Low**, **Medium**, or **High**. * In the **Force blockchain** dropdown (applicable for **Merchant** wallets only), select: * **Yes** — to use only [on-chain transactions](https://docs.b2binpay.com/references/key-terms?q=fee+level#on-chain-transaction). * **No** — to allow [off-chain transactions](https://docs.b2binpay.com/references/key-terms#off-chain-transaction) when possible. All transactions involving **Enterprise** wallets are always processed on the blockchain. * The **Collect personal data** field displays **No**, which can't be changed as the **Travel rule** isn't currently supported for this B2BINPAY integration. Click **Save** to create the withdrawal method. The B2BINPAY withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-b2binpay` to display the [predefined icon](../../integrations/payment-systems) for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * In the **Rates provider** dropdown, select B2BINPAY as the preferred rate provider for processing withdrawals with conversions. To do this, B2BINPAY must first be added as an exchange rate provider under **Currencies** > **Rates** (for details, refer to [How to configure currency exchange rates](../manage-currencies/how-to-configure-currency-exchange-rates)). * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the currencies in which withdrawals can be processed. These are the currencies supported by the B2BINPAY wallet selected in the **Configuration** section. To enable withdrawals in a specific currency via this method, make sure that this currency is added on the **PS Currencies** tab. B2BINPAY withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **B2BINPAY** withdrawal method is now configured in the B2CORE Back Office. ## Blockchain selection for Merchant and Enterprise wallets [#blockchain-selection-for-merchant-and-enterprise-wallets] In the **Configuration** section of a deposit or withdrawal method, you must select the wallet that will be used for processing transactions. The wallet type determines how the blockchain for processing transactions is defined. * When using **Merchant** wallets, clients can select a blockchain for processing their transactions, depending on the chosen deposit or withdrawal currency. For example, if the deposit currency is USDT, available blockchain options such as **Ethereum** (ETH), **Tron** (TRX), or **BNB Smart Chain** (BSC) may appear, depending on your **Merchant** wallet configuration in B2BINPAY. * When using **Enterprise** wallets, the blockchain on which transactions are processed is predefined by the wallet currency. For example, if your **Enterprise** wallet holds **USDT on Ethereum** (ETH), deposits will always be processed on the **Ethereum** (ETH) blockchain. ## Deposits with static payment details via B2BINPAY [#deposits-with-static-payment-details-via-b2binpay] Deposits with static payment details via B2BINPAY allow clients to generate one or more blockchain-specific deposit addresses in the B2CORE UI. These addresses are saved for future use and can be reused for subsequent deposits. The example below shows how the payment form appears in the B2CORE UI for the B2BINPAY deposit method with **static payment details**. On the form, a client can generate payment details for making deposits in USDT on either the **Ethereum** (ETH) or **Tron** (TRX) blockchain. The generated address are saved and can be reused for future deposits. These addresses can be copied and used without the need to open the **Deposit** page in the B2CORE UI. B2BINPAY deposit method with static payment details Follow the instructions below to configure a connection and set up deposit and withdrawal methods through [B2BINPAY](https://b2binpay.com/) in the B2CORE Back Office. This instruction describes the **non-PSS** B2BINPAY integration that includes support for the **Travel Rule**. ## B2BINPAY integration with Notabene [#b2binpay-integration-with-notabene] B2BINPAY is integrated with **Notabene** to ensure compliance with the **Travel Rule**, which requires collecting client data for crypto transactions, including deposits and withdrawals. **Notabene** evaluates incoming client data for compliance and issues directives to either block or approve crypto transactions. When setting up deposit and withdrawal methods through B2BINPAY in the B2CORE Back Office, you can select whether to collect and transmit client data to B2BINPAY for further forwarding to **Notabene** or disable data collection using the **Collect personal info option** described below. Before proceeding with the instructions, you must have signed up for B2BINPAY and have an active wallet. ## Configure connections to B2BINPAY [#configure-connections-to-b2binpay] The non-PSS B2BINPAY integration allows you to use a single connection to configure both deposit and withdrawal methods. To configure a connection to B2BINPAY: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `B2BINPAY`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **B2BINPAY**. Click **Save** to create the connection. The B2BINPAY connection will appear in the list of external connections. Click **Edit** to open the connection details and fill in the following fields: * In **Service location** field, enter the URL of the B2BINPAY API. * In the **Login** and **Password** fields, enter your API credentials generated in B2BINPAY. For more details, refer to [How to access the API](https://docs.b2binpay.com/how-tos/manage-your-profile-and-system/how-to-access-api) in the B2BINPAY documentation. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), enable it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. Once the connection is configured, you can use it to create and set up deposit and withdrawal methods via B2BINPAY. ## Add a deposit method through B2BINPAY [#add-a-deposit-method-through-b2binpay] To add and set up a deposit method through B2BINPAY: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `B2BINPAY_Deposits`). * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **B2BINPAY**. * In the displayed **Currency** dropdown, select a currency for the method. After creating the method, you can add multiple currencies to it on the **TR Currencies** tab. * In the **Connection** dropdown, select the previously configured [B2BINPAY connection](#configure-connections-to-b2binpay). Click **Save** to create the method. The B2BINPAY method will appear in the list of methods. Click **Edit** to open the method details and fill in the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-b2binpay` to display the [predefined icon](../../integrations/payment-systems) for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * In the **Rates provider** dropdown, select B2BINPAY as the preferred rate provider for processing deposits with conversions. To do this, B2BINPAY must first be added as an exchange rate provider under **Currencies** > **Rates** (for details, refer to [How to configure currency exchange rates](../manage-currencies/how-to-configure-currency-exchange-rates)). In the **Provider settings** section, configure the following B2BINPAY-specific settings: * In the **Wallet ID** dropdown, select your B2BINPAY wallet that will be used for processing transactions. * In the **Payment page** dropdown, select **Local**. * The **Local URL** field displays the payment page URL, such as: `https://{your-Front-Office-URL}/`\ `conversion/payment/qrcode/{address}/{currency}/{message}` * In the **Client type** dropdown, select **Enterprise** or **Merchant**, depending on your wallet type. * In the **Collect personal info** dropdown, select: * **No** — to disable the collection of client personal data. * **Yes** — to enable the collection of client personal data, which is sent to B2BINPAY and then forwarded to **Notabene** for verifying crypto transactions. On the **TR Currencies** tab, check the added currency and add more if needed. The deposit method will be available for funding client wallets in B2CORE, which are denominated in the currencies added on this tab. On the **PS Currencies** tab, add the currencies in which deposits can be processed. These are the currencies supported by B2BINPAY. For details, refer to [Currency codes](https://docs.b2binpay.com/references/currency-codes) in the B2BINPAY documentation. To enable deposits in a specific currency via this method, make sure that this currency added on the **PS Currencies** tab. For details, refer to [Add currencies on the PS Currencies tab](#add-currencies-on-the-ps-currencies-tab). Click the **Test connection** button to validate the connection settings. The green button indicates that the connection has been configured properly. The red button indicates that some connection settings aren’t valid. The errors displayed below the button specify the connection issues that need to be addressed. Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. The B2BINPAY deposit method is now configured in the Back Office and available to clients in the B2CORE UI. ## Add a withdrawal method through B2BINPAY [#add-a-withdrawal-method-through-b2binpay] To add and set up a withdrawal method through B2BINPAY: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `B2BINPAY_Withdrawals`). * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **B2BINPAY**. * In the displayed **Currency** dropdown, select a currency for the method. After creating the method, you can add multiple currencies to it on the **TR Currencies** tab. * In the **Connection** field, select the previously configured [B2BINPAY connection](#configure-connections-to-b2binpay). Click **Save** to create the method. The B2BINPAY method will appear in the list of methods. Click **Edit** to open the method details and fill in the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-b2binpay` to display the [predefined icon](../../integrations/payment-systems) for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * In the **Rates provider** dropdown, select B2BINPAY as the preferred rate provider for processing withdrawals with conversions. To do this, B2BINPAY must first be added as an exchange rate provider under **Currencies** > **Rates** (for details, refer to [How to configure currency exchange rates](../manage-currencies/how-to-configure-currency-exchange-rates)). In the **Provider settings** section, configure the following B2BINPAY-specific settings: * In the **Fee level** dropdown, select **Low**, **Medium**, or **High**. * In the **Wallet ID** dropdown, select your B2BINPAY wallet that will be used for processing transactions. * In the **WithdrawDone Notification** dropdown, select **No**. * In the **Client type** dropdown, select **Enterprise** or **Merchant**, depending on your wallet type. * In the **Destination tag** dropdown, select: * **Yes** — if a destination tag is required for making withdrawals. * **No** — if a destination tag isn't required for withdrawals. This depends on the blockchain on which withdrawals will be processed. * In the **Tag type** dropdown, select the type of the destination tag, either **Numeric** or **String**. Select **Not set** if you set the **Destination tag** dropdown to **No**. * In the **Off-chain transactions** dropdown, select: * **Enabled** — to allow [off-chain transactions](https://docs.b2binpay.com/references/key-terms#off-chain-transaction) when possible. * **Disabled** — to use only [on-chain transactions](https://docs.b2binpay.com/references/key-terms?q=fee+level#on-chain-transaction). * In the **Collect personal info** dropdown, select: * **No** — to disable the collection of client personal data. * **Yes** — to enable the collection of client personal data, which is sent to B2BINPAY and then forwarded to **Notabene** for verifying crypto transactions. On the **TR Currencies** tab, check the added currency and add more if needed. The method will be available for withdrawing funds from client wallets in B2CORE, which are denominated in the currencies added on this tab. On the **PS Currencies** tab, add the currencies in which withdrawals can be processed. These are the currencies supported by B2BINPAY. For details, refer to [Currency codes](https://docs.b2binpay.com/references/currency-codes) in the B2BINPAY documentation. To enable withdrawals in a specific currency via this method, make sure that this currency is added on the **PS Currencies** tab. For details, refer to [Add currencies on the PS Currencies tab](#add-currencies-on-the-ps-currencies-tab). Click the **Test connection** button to validate the connection settings. The green button indicates that the connection has been configured properly. The red button indicates that some connection settings aren’t valid. The errors displayed below the button specify the connection issues that need to be addressed. Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. The B2BINPAY withdrawal method is now configured in the Back Office and available to clients in the B2CORE UI. ## Add currencies on the PS Currencies tab [#add-currencies-on-the-ps-currencies-tab] To add a currency: Click **+Add** and select the currency in the dropdown. For the selected currency, specify the following parameters: * **Block explorer** — the URL template of the blockchain explorer used to track transactions. * **Blockchain code** — the numeric identifier of the blockchain used for processing transactions. This ensures the deposit is processed on the correct network. These codes must be taken from the B2BINPAY documentation: [Currency codes](https://docs.b2binpay.com/references/currency-codes) and [Block explorer list](https://docs.b2binpay.com/references/block-explorer-list). ### Example [#example] For example, `USDT` deposits can be processed on different blockchains, depending on the token standard: For **Tron (TRC20)**, specify: * **Block explorer**: —`https://tronscan.org/#/transaction/{address}` * **Blockchain code** — 2145 For **Ethereum (ERC20)**, specify: * **Block explorer**: —`https://etherscan.io/tx/{address}` * **Blockchain code** — 2015 For **Binance Smart Chain (BSC/BEP20)**, specify: * **Block explorer**: — `https://bscscan.com/tx/{address}` * **Blockchain code** — 2065 In the **Min** and **Max** fields, specify the minimum and maximum transaction amounts. Add a currency on the PS Currencies tab Click **Save** to add the currency on the tab. Add as many currencies as needed for your deposit and withdrawal methods. [BridgerPay](https://bridgerpay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits only. Follow the instructions below to configure the BridgerPay connection and set up the deposit method in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to BridgerPay. Before proceeding with the instructions, you must have signed up for BridgerPay and have an active account. ## Create a payment link in your BridgerPay account [#create-a-payment-link-in-your-bridgerpay-account] To create a payment link in BridgerPay, you need to create a checkout of the payment link type: Sign in to your BridgerPay account. In the main menu, navigate to **Checkouts**. Click the **plus** icon to add a new checkout, and then fill in the following fields: * In the **Title** field, enter a title for the checkout. * In the **Type** dropdown, select **Payment link**. Create a payment link in BridgerPay Click **Create**. After the checkout of the payment link type is successfully created, the required credentials for configuring the deposit method in the B2CORE Back Office will become available. ## Configure a connection to BridgerPay [#configure-a-connection-to-bridgerpay] To configure a connection to BridgerPay for making deposits: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_BridgerPay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **PaymentSystemDeposit**. In the **Driver** dropdown that appears, select **BridgerPay**. In the **Credentials** section that appears, configure the BridgerPay-specific settings: * In the **API base URL** field, specify `https://api.bridgerpay.com`. * In the **API user name** and **API password** fields, enter your credentials for accessing the BridgerPay API. * In the **API key** field, enter the API key generated in your BridgerPay account. Click **Save** to create the connection. The **BridgerPay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. ## Add a deposit method through BridgerPay [#add-a-deposit-method-through-bridgerpay] To add and set up a method for making deposits through BridgerPay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through BridgerPay will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **BridgerPay**. * In the **Connection** dropdown, select the previously configured [BridgerPay connection](#configure-a-connection-to-bridgerpay). In the **Configuration** section that appears, complete the following setting: * In the **Cashier key** field, specify the unique identifier provided by BridgerPay. Create the BridgerPay deposit method Click **Save** to create the deposit method. The **BridgerPay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-bridgerpay` to display the [predefined icon](../../integrations/payment-systems) for the BridgerPay deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab. To enable the method to process deposits in a specific currency, ensure it is added on this tab (for the tab description, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). BridgerPay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test is performed based on the settings specified in the method form and the data provided in the selected external connection. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **BridgerPay** deposit method is now configured in the B2CORE Back Office. ## Set up webhooks in your BridgerPay account [#set-up-webhooks-in-your-bridgerpay-account] To receive status updates for initiated deposits in B2CORE, you need to set up notification webhooks for PSPs in BridgerPay. ### Copy the webhook URL from the B2CORE Back Office [#copy-the-webhook-url-from-the-b2core-back-office] In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Find the configured **BridgerPay** deposit method and click **Edit** to enter the method details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. BridgerPay deposit method — Webhooks tab ### Add the webhook URL to PSPs in BridgerPay [#add-the-webhook-url-to-psps-in-bridgerpay] Sign in to your BridgerPay account. In the main menu, navigate to **Checkouts**. Select the added PSP and click it to open its details. In the details, click **Settings**. PSP Settings in BridgerPay Go to the **URLs** tab. Paste the webhook URL copied from the B2CORE Back Office into the **Webhook Notification URL** field. Add the webhook URL to a PSP in BridgerPay Save your changes. Repeat these steps for each PSP added and configured in your BridgerPay account. ## Specify redirect URLs for PSPs in BridgerPay [#specify-redirect-urls-for-psps-in-bridgerpay] To ensure proper redirection after a deposit is completed, failed, or canceled, set up the corresponding redirect URLs for PSPs in BridgerPay. To st up redirect URLs: In your BridgerPay account, navigate to **Checkouts** in the main menu. Select the added PSP and click it to open its details. In the details, click **Settings**. Go to the **URLs** tab. Specify the following URLs: * In the **Success Redirect URL**, specify `https://{your-Front-Office-URL}/en/payment/success`. * In the **Failure Redirect URL** and **Cancel Redirect URL** fields, specify `https://{your-Front-Office-URL}/en/payment/failed`. Make sure to replace `{your-Front-Office-URL}` with the domain of your B2CORE UI. Add redirect URLs for a PSP in BridgerPay Save your changes. Repeat these steps for each PSP added and configured in your BridgerPay account. ## Enable the 'Notify with original amount' option for PSPs in BridgerPay [#enable-the-notify-with-original-amount-option-for-psps-in-bridgerpay] The **Notify with original amount** option for PSPs in BridgerPay ensures that payment notifications include the original deposit amounts, without any modifications or additional charges. To enable this option: In your BridgerPay account, navigate to **Checkouts** in the main menu. Select the added PSP and click it to open its details. In the details, click **Settings**. In the section named **PSP Specific Settings**, enable the **Notify with original amount** option. Save your changes. Repeat these steps for each PSP added and configured in your BridgerPay account. The **BridgerPay** deposit method is now fully configured and available for clients to use when making deposits in the B2CORE UI. The **Canonical** driver lets you connect a payment service provider (PSP) of your choice to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), even when B2CORE does not yet offer a dedicated driver for that provider. ## Why use the Canonical driver [#why-use-the-canonical-driver] Most payment systems in B2CORE rely on a dedicated driver built specifically for one provider. The Canonical driver takes a different approach: it defines a single, standard API contract — the Canonical Deposit API — that any provider can implement. B2CORE then handles authentication, the deposit start flow, polling, webhooks, and the status lifecycle in a uniform way, regardless of which provider sits behind the contract. The Canonical driver is useful when you want to: * Connect a preferred or in-house PSP that has no dedicated B2CORE driver, without waiting for custom development. * Reduce time to market by having your provider implement one documented, stable contract instead of a bespoke integration. * Keep full control of the provider side, while B2CORE manages the deposit workflow on its side. The Canonical driver currently supports deposit flows. To offer deposits through your provider, the provider must implement the Canonical Deposit API described in the [OpenAPI specification](#openapi-specification) below and follow the behavioral requirements on this page. ## OpenAPI specification [#openapi-specification] The Canonical Deposit API is defined in the following OpenAPI specification, which covers authentication, request and response schemas, endpoints, and status codes. Download it to review the full contract that your provider must implement: The rest of this page describes the behavioral requirements, B2CORE-side configuration, and design decisions that the specification cannot express. Read both together for a complete picture of the integration. ## B2CORE driver credentials [#b2core-driver-credentials] These fields are configured **on the B2CORE side** (Back Office) and used to authenticate with the PSP API. See the [OpenAPI specification](#openapi-specification) for full JWT token generation and verification details. | Field | Description | | ------------ | ------------------------------------------------------------------------------------------------------------------------------------ | | API base URL | HTTPS base URL of the PSP API. | | App ID | Unique merchant identifier. Used as the `sub` claim in the JWT. | | App secret | Secret key for HMAC-SHA256 signing. Base64 URL-encoded, 32 bytes (43 characters). Never sent in requests — used only to sign tokens. | ## B2CORE driver configuration fields [#b2core-driver-configuration-fields] These fields are configured **on the B2CORE side** (Back Office) and control driver behavior. They are not part of the PSP-facing API. ### Global parameters (`globalParam1`, `globalParam2`, `globalParam3`) [#global-parameters-globalparam1-globalparam2-globalparam3] Three configuration-level string fields sent with **every authenticated request** to the PSP. * For `POST` endpoints, they are included in the JSON request body. * For `GET` endpoints, they are included as query parameters. These represent PSP-specific values such as merchant ID, channel, or project ID. The exact semantics depend on the PSP implementation. The B2CORE admin fills them in during configuration setup. ### Required fields (read-only) [#required-fields-read-only] **Type:** Multi-select Selects which user info fields are displayed in the payment form as **read-only** (non-editable). Selected fields **must** already be configured and saved in the user's B2CORE profile. If any selected field is missing from the profile, the payment form generation fails with a missing fields error — the user cannot proceed until the data is filled in their B2CORE profile. The selected fields, along with the fields from Required fields (editable), determine which user data is meaningfully populated in the `startDepositUserInfo` object sent to the PSP in the `POST /api/v1/deposits` request. Fields not selected in either list are hidden in the form and may be sent as empty values. ### Required fields (editable) [#required-fields-editable] **Type:** Multi-select Selects which user info fields are displayed in the payment form as **editable**. The user can fill in or modify these fields directly in the payment form. Unlike Required fields (read-only), there is no requirement for these fields to be pre-configured in the user's B2CORE profile. **Priority rule:** If a field is selected in both Required fields (read-only) and Required fields (editable), it is displayed as **read-only**. The read-only setting always takes priority. **Email behavior:** Email is always displayed in the payment form and always sent in the `startDepositUserInfo`, regardless of whether it is selected in either list. The configuration only controls how it is displayed: | Email selected in | Behavior | | --------------------------- | ---------------------------------------------------------- | | Neither list | Displayed as an editable field | | Required fields (editable) | Displayed as an editable field | | Required fields (read-only) | Displayed as a read-only field (value from B2CORE profile) | | Both lists | Displayed as a read-only field (read-only takes priority) | ### Default sync deadline [#default-sync-deadline] **Type:** Select\ **Default:** `4h` Maximum duration after deposit creation during which B2CORE polls for the deposit status. After this deadline: * `StatusSyncInProgress` → the deposit is moved to `unexpected`. * `StatusSyncUnexpected` → the deposit is moved to `unexpected`. The `unexpected` status requires manual admin investigation via the LifecycleService. ### Safe to fail at start [#safe-to-fail-at-start] **Type:** Boolean (currently hardcoded to `yes`, no choice) Determines whether it is safe to mark a deposit as `failed` (terminal) when the start request encounters an unexpected error. * `yes` — if the PSP returns an error during deposit start, and B2CORE is confident the deposit was not created on the PSP side (for example, B2CORE never received a redirect URL), the deposit can safely be moved to `failed`. The client has not lost any money. * `no` — even on error, the deposit is moved to `in_progress` with an unverified external ID and polled, because the PSP might have created the deposit despite the error. **Currently, always `yes`.** The typical case: without a redirect URL, the client cannot complete the PSP payment page, so the deposit cannot succeed. ### Wait for webhook before polling [#wait-for-webhook-before-polling] **Type:** Boolean (currently hardcoded to `yes`, no choice) Controls whether B2CORE waits for a webhook notification before it starts polling `GET /api/v1/deposits/{externalID}`. | Value | Behavior | | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `yes` | After deposit start, B2CORE waits **up to 5 minutes** for a webhook before it begins to poll. If no webhook arrives within 5 minutes, B2CORE proceeds to standard polling. | | `no` | B2CORE begins polling immediately according to the standard backoff schedule. | **Rationale:** Many PSPs send a webhook notification quickly when the deposit status changes. Waiting for the webhook before polling reduces the number of unnecessary API calls, which helps stay within rate limits. The 5-minute timeout ensures progress even if the webhook is delayed or lost. ## Test configuration flow [#test-configuration-flow] When an admin clicks **Test Configuration** in B2CORE: ``` 1. B2CORE generates a one-time JWT signed with appSecret 2. B2CORE → POST /api/v1/configuration/test (with Bearer JWT + globalParams) 3. If response status = "available" → test result: "available" 4. If response status = "failed" → test result: "failed" (with error from PSP) 5. If unexpected error (5xx, timeout, and similar) → test result: "unexpected" ``` The test configuration method is the only method where any credential issue is expected to return not `401 Unauthorized`, but `200 OK` with a response body. The `code` and `description` are shown to the B2CORE administrator, so return clean, non-sensitive data. ## Webhook system design [#webhook-system-design] ### Two webhook channels [#two-webhook-channels] B2CORE supports **two webhook channels** per deposit: | Channel | Registration | Description | | ---------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | | **Automatic** | Via `notificationURL` in the `POST /api/v1/deposits` request | Always active. B2CORE generates the URL and passes it to the PSP. | | **Admin-configurable** | Set by the admin in the B2CORE Back Office | Optional. The admin can configure a separate webhook URL that the PSP sends notifications to (for example, registered in the PSP's admin panel). | Both channels feed into the same B2CORE webhook handler → `driver_transit` store → poller optimization pipeline. ### Webhook as polling optimization [#webhook-as-polling-optimization] The webhook is **not** the source of truth. It is an **optimization** that reduces unnecessary polling requests. ``` PSP → B2CORE webhook handler → driver_transit (key-value store) → poller ``` How it works: 1. When a webhook arrives, B2CORE stores a flag in `driver_transit` keyed by `externalID`. 2. The poller checks `driver_transit` before it makes an API call: * If a webhook flag exists for the `externalID`, B2CORE immediately calls `GET /api/v1/deposits/{externalID}`. * If no flag exists and less than 5 minutes have passed, B2CORE waits (see [Wait for webhook before polling](#wait-for-webhook-before-polling)). * If no flag exists and more than 5 minutes have passed, B2CORE proceeds with standard polling. 3. When the deposit reaches a terminal status (success or failed), the `driver_transit` entry is deleted. ### Webhook payload [#webhook-payload] The webhook payload is minimal (see the webhook callback under `POST /api/v1/deposits` in the [OpenAPI specification](#openapi-specification)): ```json { "externalID": "550e8400-e29b-41d4-a716-446655440000", "status": "success" } ``` The payload contains the following fields: * `externalID` — matches the UUID from the `POST /api/v1/deposits` request. * `status` — one of `"success"`, `"failed"`, or `"unprocessable"`. The webhook should be sent only when the deposit transitions to a **terminal status**. ## Deposit start flow [#deposit-start-flow] ### Start request [#start-request] B2CORE initiates a deposit by calling `POST /api/v1/deposits`. The request includes a `returnURL` field — a B2CORE frontend page URL to redirect the user back to after PSP page interaction. This is **not a webhook** — it is a browser redirect only. For all other details, see the [OpenAPI specification](#openapi-specification). ### Start result mapping [#start-result-mapping] The PSP response maps to a B2CORE action as follows: | PSP response | B2CORE action | | ----------------------------------------------------------------- | --------------------- | | PSP returns a redirect URL | Move to `in_progress` | | 2xx with a specification violation (for example, no redirect URL) | Move to `failed` | | HTTP 4xx / 5xx / timeout / network error | Move to `failed` | All failure scenarios result in `failed` (not `unexpected`) because Safe to fail at start is `yes` (see [Safe to fail at start](#safe-to-fail-at-start)): without a valid redirect URL, the end user cannot interact with the PSP payment page, so no money can be lost. ### Redirect flow [#redirect-flow] On a successful start, B2CORE receives a redirect URL and sends the end user to the PSP payment page: * The `returnURL` takes the user back to a B2CORE frontend page that indicates the deposit is being processed. * After start, B2CORE begins the polling and webhook flow (see [Polling and status sync](#polling-and-status-sync)). * Currently, `"redirect"` is the only supported action type. ## Polling and status sync [#polling-and-status-sync] ### Polling backoff schedule [#polling-backoff-schedule] B2CORE uses **progressive backoff** to poll `GET /api/v1/deposits/{externalID}`: | Time since deposit start | Poll interval | | ------------------------ | ---------------- | | 0–15 minutes | Every 1 minute | | 15–60 minutes | Every 3 minutes | | 1–3 hours | Every 5 minutes | | 3–5 hours | Every 10 minutes | | 5+ hours | Every 15 minutes | ### Deadline handling [#deadline-handling] Default deadline: **4 hours** after deposit creation (configurable, see [Default sync deadline](#default-sync-deadline)). When the deadline is exceeded, intermediate statuses are resolved as follows: | Last poll result | B2CORE action | | -------------------------------------------- | -------------------- | | `inProgress` | Move to `unexpected` | | Network error, 5xx, parse error, and similar | Move to `unexpected` | The `unexpected` status stops automatic polling and requires manual admin action via B2CORE's LifecycleService. ### Webhook wait logic [#webhook-wait-logic] When Wait for webhook before polling is `yes` (current default, see [Wait for webhook before polling](#wait-for-webhook-before-polling)): ### Polling result mapping [#polling-result-mapping] Each poll result from `GET /api/v1/deposits/{externalID}` maps to a B2CORE internal action: | PSP response status | B2CORE action | | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | `"inProgress"` + deadline not exceeded | Continue polling (retry) | | `"inProgress"` + deadline exceeded | Move to `unexpected` | | `"success"` | Move to `success`, stop polling. Save `finalAmount` and `finalCurrencyCode` | | `"failed"` | Move to `failed`, stop polling. Save `reason` | | `"unprocessable"` | Move to `unexpected`, stop polling. Save `reason`. Requires admin investigation | | HTTP 5xx / timeout / parse error | Treat as an `unexpected` poll attempt. Continue polling if the deadline is not exceeded | | HTTP 404 with `X-Safe-To-Fail-After-Seconds` | Continue polling. After the indicated time plus a safety margin (5 minutes), if still 404, move to `failed` with reason "deposit redirect URL is expired" | | HTTP 404 without the header | Continue polling. Wait for the deposit to appear on the PSP side or the sync deadline to be exceeded | ## Deposit status lifecycle [#deposit-status-lifecycle] This section describes B2CORE deposit statuses. For the mapping of PSP response statuses to B2CORE statuses, see [Start result mapping](#start-result-mapping) and [Polling result mapping](#polling-result-mapping). ### Full status diagram [#full-status-diagram] ### Recovery from the `unexpected` status [#recovery-from-the-unexpected-status] An admin can perform these manual transitions via the LifecycleService: | Transition | When to use | | ---------------------------- | -------------------------------------------------------------------------------- | | `unexpected` → `in_progress` | Retry polling (for example, after a PSP outage is resolved) | | `unexpected` → `success` | Only if the last poll attempt was `unprocessable` and the admin confirms success | | `unexpected` → `failed` | The admin confirms the deposit failed | ### Deposit status definitions [#deposit-status-definitions] The following table defines each B2CORE deposit status: | Status | Business meaning | | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `in_progress` | The deposit is being processed. Covers all intermediate states: pending bank transfer, 3DS verification in progress, awaiting manual review on the PSP side, the client interacting with the PSP payment page, and similar. This is a non-terminal status — B2CORE continues polling. | | `success` | The broker has received the client's money. The PSP has confirmed the funds were credited. The `finalAmount` and `finalCurrencyCode` fields reflect the actual amount and currency received, which may differ from the initial request due to fees or conversion. | | `failed` | The deposit did not go through. The client did **not** lose any money, and the broker did **not** receive any funds. Examples: card declined, bank transfer rejected, user canceled on the PSP page, or redirect link expired. | | `unexpected` | The deposit could not be resolved automatically and requires manual admin action via B2CORE (see [Recovery from the `unexpected` status](#recovery-from-the-unexpected-status)); automatic polling has stopped. Entered on a deadline timeout while `in_progress`, or when the PSP reports `unprocessable`. | ### Deposit creation timing [#deposit-creation-timing] PSPs follow one of two patterns for deposit creation: | Pattern | Behavior | Polling impact | | ---------------------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------- | | **Immediate creation** | The PSP creates the deposit record on `POST /api/v1/deposits`. | `GET /api/v1/deposits/{externalID}` returns a result immediately after start. | | **Deferred creation** | The PSP creates the deposit record only after the end user completes the PSP payment page. | `GET /api/v1/deposits/{externalID}` returns `404 Not Found` until the user completes the page. | For deferred creation, the PSP **should** return the `X-Safe-To-Fail-After-Seconds` header with the 404 response. This header tells B2CORE how long the redirect link is valid. After `redirect_time + header_value + safety_margin`, if the deposit is still 404, B2CORE marks it as `failed` with reason **"deposit redirect URL is expired"**. If the header is absent, B2CORE continues polling until the deposit appears or the sync deadline (default 4 hours) is exceeded, at which point the deposit moves to `unexpected`. ## Behavioral requirements [#behavioral-requirements] ### Distributed tracing [#distributed-tracing] All HTTP requests from B2CORE to the PSP include standard tracing headers per the [W3C Trace Context](https://www.w3.org/TR/trace-context/) specification: * `traceparent` — contains the trace ID, parent span ID, and trace flags. * `tracestate` — vendor-specific trace data. PSP implementations should propagate these headers to their downstream services for end-to-end observability. ### PSP payment page currency lock [#psp-payment-page-currency-lock] When the start deposit response includes a redirect to a PSP payment page: * The PSP page **must not** allow the end user to change the `currencyCode` to any analog, equivalent, or alternative currency. * The currency shown on the PSP page must match exactly what was sent in the start deposit request. * If the PSP page allows currency selection, the currency must be pre-selected and locked. ### IP whitelisting recommendation [#ip-whitelisting-recommendation] While not required by the API specification, PSP implementations are **strongly recommended** to configure IP whitelisting on their side. This provides an additional layer of security beyond JWT authentication, limiting API access to known B2CORE IP addresses. To make the Canonical driver available in your environment, please reach out to your account manager. Kindly specify how exactly and for what purposes you plan to use the Canonical driver so we can arrange access accordingly. [ChipPay](https://www.chippay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. ChipPay processes payments in `CNY`, which serves as its settlement currency, while the B2CORE PPS sends and receives amounts to and from ChipPay in `USDT`. For this reason, `USDT` must be added as a PS currency in the deposit and withdrawal methods configured in B2CORE. Follow the instructions below to configure the ChipPay connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to ChipPay. Before proceeding with the instructions, you must have signed up for ChipPay and have an active account. If you have any questions, consult the official [ChipPay Help Center](https://chippayhelp.zendesk.com/hc/en-gb) or contact their support team. ## Configure connections to ChipPay [#configure-connections-to-chippay] If you plan to use ChipPay for both deposits and withdrawals, you must configure separate connections, each dedicated to a specific deposit or withdrawal method. Each connection must be configured with the appropriate driver to ensure the correct operation of the respective deposit or withdrawal method. To configure a connection to ChipPay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_ChipPay` or `Withdrawals_ChipPay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select: * **ChipPay P2P buying order** — for deposits processed through ChipPay payment orders. Clients can pay using one of the available methods configured in your ChipPay merchant account, such as bank cards, **AliPay**, or **WeChat Pay**, if those options are enabled. * **ChipPay express buying order** — for deposits via bank card payments. * **ChipPay** — for withdrawals via bank card payments. In the **Credentials** section that appears, configure the ChipPay-specific settings: * In the **API base URL** field, specify `https://open-v2.chippay.com/`. * In the **Merchant ID** field, enter your ChipPay Merchant ID. * Generate a pair of 4096-bit RSA *private* and *public* keys using a secure tool, such as **OpenSSL** or another trusted method. For security reasons, it isn't recommended to use online tools to generate the keys. * In the **Private key** field, specify the *private* key, and make sure to specify the corresponding *public* key in your ChipPay account. Click **Save** to create the connection. The **ChipPay** connection for deposits or withdrawals will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need additional ChipPay connections for other payment methods, follow the same instruction to create a new connection with a different driver. The image below displays three configured ChipPay connections: one for the withdrawal method and two for deposit methods. External connections to ChipPay ## Add a deposit method through ChipPay [#add-a-deposit-method-through-chippay] To add and set up a method for making deposits through ChipPay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through ChipPay will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **ChipPay P2P buying order** or **ChipPay express buying order**. * In the **Connection** dropdown, select the previously configured [ChipPay connection for deposits](#configure-connections-to-chippay). If you selected the **ChipPay P2P buying order** driver, skip the **Configuration** section, as no settings are required for this deposit method. If you selected the **ChipPay express buying order** driver, in the **Configuration** section that appears, fill in the following fields: * In the **Exchange rate adjustment** dropdown, select: * **Yes** — to adjust the exchange rate provided by ChipPay when converting deposited funds into `CNY`, which is the settlement currency used by ChipPay for processing payments. * **No** — to use the default rate provided by ChipPay. * If you selected **Yes**, specify the adjustment value (as a percentage) in the **Adjustment value** field. The rate can only be adjusted within a ±3% range. For example, entering `3` increases the exchange rate by 3%, while `-3` decreases it by 3%. The adjusted rate will appear in the details of the ChipPay P2P buying order created to process the deposit. Click **Save** to create the deposit method. The **ChipPay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-chippay` to display the [predefined icon](../../integrations/payment-systems) for the ChipPay deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USDT`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). ChipPay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test is performed based on the settings specified in the method form and the data provided in the selected external connection. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **ChipPay** deposit method is now configured in the B2CORE Back Office. If you want to support both deposit methods offered by ChipPay, add and set up another deposit method that uses a different driver and connection. ## Add a withdrawal method through ChipPay [#add-a-withdrawal-method-through-chippay] To add and set up a method for making withdrawals through ChipPay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through ChipPay will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **ChipPay**. * In the **Connection** dropdown, select the previously configured [ChipPay connection for withdrawals](#configure-connections-to-chippay). Skip the **Configuration** section, as no settings are required for ChipPay withdrawals. Click **Save** to create the withdrawal method. The **ChipPay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-chippay` to display the [predefined icon](../../integrations/payment-systems) for the ChipPay withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USDT`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). ChipPay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test is performed based on the settings specified in the method form and the data provided in the selected external connection. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **ChipPay** withdrawal method is now configured in the B2CORE Back Office. [Jetapay](https://jetapay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and bank account withdrawals. Jetapay processes transactions only in `USD`, with a minimum amount of 10 USD and a maximum of 5,000 USD. Follow the instructions below to configure the Jetapay connection and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Jetapay. Before proceeding with the instructions, you must have signed up for Jetapay and have an active account. ## Configure connections to Jetapay [#configure-connections-to-jetapay] If you plan to use Jetapay for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to Jetapay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Jetapay` or `Withdrawals_Jetapay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **Jetapay**. In the **Credentials** section that appears, configure the Jetapay-specific settings: * In the **API base URL** field, specify `https://api.jetapay.com`. * In the **Token** fields, enter the token generated in your Jetapay account, which will be used to authenticate requests sent to the Jetapay API. Click **Save** to create the connection. The **Jetapay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via Jetapay, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through Jetapay [#add-a-deposit-method-through-jetapay] To add and set up a method for making deposits through Jetapay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select `USD`. * In the **Driver** dropdown, select **Jetapay**. * In the **Connection** dropdown, select the previously configured [Jetapay connection for deposits](#configure-connections-to-jetapay). Skip the **Configuration** section, as no settings are required for the Jetapay deposit method. Click **Save** to create the deposit method. The **Jetapay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the deposit method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USD`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Jetapay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Jetapay** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through Jetapay [#add-a-withdrawal-method-through-jetapay] To add and set up a method for making withdrawals through Jetapay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select `USD`. * In the **Driver** dropdown, select **Jetapay**. * In the **Connection** dropdown, select the previously configured [Jetapay connection for withdrawals](#configure-connections-to-jetapay). Skip the **Configuration** section, as no settings are required for the Jetapay withdrawal method. Click **Save** to create the withdrawal method. The **Jetapay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USD`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Jetapay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Jetapay** withdrawal method is now configured in the B2CORE Back Office. [KoraPay](https://www.korahq.com/payin) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits, withdrawals to bank accounts, and withdrawals to to mobile wallets via mobile money. Follow the instructions below to configure the KoraPay connection and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to KoraPay. Before proceeding with the instructions, you must have signed up for KoraPay and have an active account. You can consult the official [KoraPay documentation](https://developers.korapay.com/) or contact their support in case you have any questions. ## Supported currencies [#supported-currencies] Below is the table listing the currencies supported for deposits and withdrawals via KoraPay: For `XAF` and `XOF` currencies, amounts are rounded down to the nearest multiple of 5, as required by KoraPay. For example, if a client enters 2,573 `XAF`, it will be rounded down to 2,570 for the transaction. ## Configure connections to KoraPay [#configure-connections-to-korapay] If you plan to use KoraPay for both deposits and withdrawals, you must configure separate connections, each dedicated to a specific deposit or withdrawal method. Each connection must be configured with the appropriate driver to ensure the correct operation of the respective deposit or withdrawal method. To configure a connection to KoraPay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_KoraPay` or `Withdrawals_KoraPay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select: * **KoraPay** — for deposits. * **KoraPay bank account** — for withdrawals to bank accounts. * **KoraPay mobile money** — for withdrawals to mobile wallets via mobile money. In the **Credentials** section that appears, configure the KoraPay-specific settings: * In the **API base URL** field, specify `https://api.korapay.com`. * In the **Secret key** field, enter the secret key from your KoraPay account. * In the **Public key** field, enter the public key from your KoraPay account. To find both your secret and public keys, sign in to your KoraPay account, navigate to **Settings**, and open the **API Configuration** tab. API keys in KoraPay Click **Save** to create the connection. The **KoraPay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need additional KoraPay connections for other payment methods, follow the same instruction to create a new connection with a different driver. ## Add a deposit method through KoraPay [#add-a-deposit-method-through-korapay] To add and set up a method for making deposits through KoraPay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies that are supported for deposits, such as `NGN`, `GHS`, `KES`, `XAF`, and `XOF`. Deposits through KoraPay will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **KoraPay**. * In the **Connection** dropdown, select the previously configured [KoraPay connection for deposits](#configure-connections-to-korapay). In the **Configuration** section, set the **Merchant bears cost** option to: * **Yes** — the broker (merchant) pays the transaction fee. * **No** — the trader (client) pays the transaction fee. Click **Save** to create the deposit method. The **KoraPay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-korapay` to display the [predefined icon](../../integrations/payment-systems) for the KoraPay deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process deposits in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). KoraPay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **KoraPay** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through KoraPay [#add-a-withdrawal-method-through-korapay] To add and set up a method for making withdrawals through KoraPay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through KoraPay will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select: * **KoraPay bank account** — for withdrawals to bank accounts. Only withdrawals to Nigerian bank accounts are supported. * **KoraPay mobile money** — for withdrawals to mobile wallets via mobile money. Withdrawals are supported for Kenyan (KES), Ghanaian (GHS), Ivorian (XOF), and Cameroonian (XAF) mobile money accounts. * In the **Connection** dropdown, select the previously configured [KoraPay connection for withdrawals](#configure-connections-to-korapay). In the **Configuration** section, complete the following settings: For the **KoraPay bank account** driver: * In the **Merchant bears cost** dropdown, select: * **Yes** — the broker (merchant) pays the transaction fee. * **No** — the trader (client) pays the transaction fee. For the **KoraPay mobile money** driver: * Configure the **Merchant bears cost** option as described above. * In the **Country** dropdown, select the where this withdrawal method will be available, such as Kenya, Ghana, Côte d’Ivoire, or Cameroon. Click **Save** to create the withdrawal method. The **KoraPay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-korapay` to display the [predefined icon](../../integrations/payment-systems) for the KoraPay withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). KoraPay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **KoraPay** withdrawal method is now configured in the B2CORE Back Office. To add another withdrawal method via KoraPay using a different driver, follow the same instructions and select the other driver. [LuqaPay](https://luqapay.com/) can be connected to B2CORE through PSS, supporting withdrawals via bank transfers in `TRY`. Follow the instructions below to configure the LuqaPay connection and set up the withdrawal method in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to LuqaPay. Before proceeding with the instructions, you must have signed up for LuqaPay and have an active account. ## Configure a connection to LuqaPay [#configure-a-connection-to-luqapay] To configure a connection to LuqaPay for making withdrawals: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Withdrawals_LuqaPay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. In the **Driver** dropdown that appears, select **LuqaPay**. In the **Credentials** section that appears, configure the LuqaPay-specific settings: * In the **API base URL** field, specify: * `https://wallet.luqapay.com` — for the production environment * `https://sandbox-wallet.luqapay.com` — for the sandbox testing environment * In the **API key** field, enter the API key generated in your LuqaPay account. * In the **API secret key** field, enter the API secret generated in your LuqaPay account. Click **Save** to create the connection. The **LuqaPay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. ## Add a withdrawal method through LuqaPay [#add-a-withdrawal-method-through-luqapay] To add and set up a method for making withdrawals through LuqaPay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through LuqaPay will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **LuqaPay**. * In the **Connection** dropdown, select the previously configured [LuqaPay connection](#configure-a-connection-to-luqapay). In the **Configuration** section, select **Türkiye** in the **Country** dropdown. This is the only supported country for this integration. Click **Save** to create the withdrawal method. The **LuqaPay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `TRY`. This is the only currency supported for processing withdrawals with this integration. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). LuqaPay withdrawal method — Settings tab Click **Save** to apply the changes. The **LuqaPay** withdrawal method is now configured in the B2CORE Back Office. ## Set up a webhook in LuqaPay [#set-up-a-webhook-in-luqapay] To receive status updates for withdrawals in B2CORE, a notification webhook must be set up on the side of LuqaPay. ### Copy the webhook URL from the B2CORE Back Office [#copy-the-webhook-url-from-the-b2core-back-office] In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Find the configured **LuqaPay** withdrawal method and click **Edit** to open the method details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Provide the webhook URL to LuqaPay [#provide-the-webhook-url-to-luqapay] Send the copied webhook URL to the LuqaPay support for configuration on their side. [PayPaymentAsia](https://www.paymentasia.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. Follow the instructions below to configure the PaymentAsia connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to PaymentAsia. Before proceeding with the instructions, you must have signed up for PaymentAsia and have an active account. ## Supported currencies [#supported-currencies] Below is the table listing the currencies supported for deposits and withdrawals via PaymentAsia: ## Configure connections to PaymentAsia [#configure-connections-to-paymentasia] If you plan to use PaymentAsia for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to PaymentAsia: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_PaymentAsia` or `Withdrawals_PaymentAsia`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **PaymentAsia**. In the **Credentials** section that appears, configure the PaymentAsia-specific settings: ## For deposits: [#for-deposits] * In the **Payment base URL** field, specify `https://payment.pa-sys.com`. * In the **Gateway base URL** field, specify `https://gateway.pa-sys.com`. * In the **Merchant token** field, enter the token generated in your PaymentAsia account. * In the **Secret code** field, enter the secret code generated in your PaymentAsia account. You can find both the **Merchant token** and **Secret code** in your PaymentAsia account under **Merchants** > **Info**. ## For withdrawals: [#for-withdrawals] Specify the **Gateway base URL**, **Merchant token**, and **Secret code** fields as described above. Click **Save** to create the connection. The **PaymentAsia** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via PaymentAsia, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through PaymentAsia [#add-a-deposit-method-through-paymentasia] To add and set up a method for making deposits through PaymentAsia: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through PaymentAsia will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PaymentAsia**. * In the **Connection** dropdown, select the previously configured [PaymentAsia connection for deposits](#configure-connections-to-paymentasia). Skip the **Configuration** section, as no settings are required for the PaymentAsia deposit method. Click **Save** to create the deposit method. The **PaymentAsia** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-asia` to display the [predefined icon](../../integrations/payment-systems) for the PaymentAsia deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process deposits in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PaymentAsia deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PaymentAsia** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through PaymentAsia [#add-a-withdrawal-method-through-paymentasia] To add and set up a method for making withdrawals through PaymentAsia: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through PaymentAsia will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PaymentAsia**. * In the **Connection** dropdown, select the previously configured [PaymentAsia connection for withdrawals](#configure-connections-to-paymentasia). In the **Configuration** section, select one or more banks in the **Available banks** dropdown, which clients can choose when making withdrawals in the B2CORE UI. The list of banks must correspond to the [currencies available for withdrawals](#supported-currencies). These currencies should be added on the **PS Currencies** tab after creating the withdrawal method. If a currency doesn’t have a corresponding bank selected in the **Available banks** dropdown, withdrawals in that currency won't be available. Click **Save** to create the withdrawal method. The **PaymentAsia** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-asia` to display the [predefined icon](../../integrations/payment-systems) for the PaymentAsia withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PaymentAsia withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PaymentAsia** withdrawal method is now configured in the B2CORE Back Office. [PayPal](https://www.paypal.com) can be connected to B2CORE **only** through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. Follow the instructions below to configure the PayPal connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to PayPal. Before proceeding with the instructions, you must have signed up for PayPal and have an active account. ## Configure connections to PayPal [#configure-connections-to-paypal] If you plan to use PayPal for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to PayPal: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_PayPal` or `Withdrawals_PayPal`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **PayPal**. In the **Credentials** section that appears, configure the PayPal-specific settings: * In the **API base URL** field, specify `https://api-m.paypal.com`. * In the **Client ID** field, enter the ID of the REST API app that you created in your PayPal account. * In the **Client secret** field, enter the client secret associated with that app. To find your client ID and secret, sign in to your PayPal account and navigate to **My Apps & Credentials** in the main menu. On the **Live** tab, select your app to view and copy the credentials. Click **Save** to create the connection. The **PayPal** connection for deposits or withdrawals will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via PayPal, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through PayPal [#add-a-deposit-method-through-paypal] To add and set up a method for making deposits through PayPal: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through PayPal will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PayPal**. * In the **Connection** dropdown, select the previously configured [PayPal connection for deposits](#configure-connections-to-paypal). In the **Configuration** section that appears, configure the following parameter: * In the **Amount type** dropdown, select how the final deposit amount will be calculated: * **Net amount** (the default option) — the amount received by the broker after PayPal transaction fees are deducted. If no commission is set for the method in B2CORE, this net amount will be deposited to the client’s account. If a commission is set, it will be deducted from the net amount, and the client will receive a smaller amount. In both cases, the broker doesn't incur any losses. * **Gross amount** — the full deposit amount before PayPal transaction fees are deducted. If no commission is set for the method in B2CORE, the broker will receive less than the gross amount due to PayPal fees and will have to cover the difference, resulting in a loss. For more details on setting commissions, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods). Click **Save** to create the deposit method. The **PayPal** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-paypal` to display the [predefined icon](../../integrations/payment-systems) for the PayPal deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab. To enable the method to process deposits in a specific currency, ensure it is added on this tab (for the tab description, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PayPal deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PayPal** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through PayPal [#add-a-withdrawal-method-through-paypal] To add and set up a method for making withdrawals through PayPal: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through PayPal will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PayPal**. * In the **Connection** dropdown, select the previously configured [PayPal connection for withdrawals](#configure-connections-to-paypal). Skip the **Configuration** section, as no settings are required for the PayPal withdrawal method. Click **Save** to create the withdrawal method. The **PayPal** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-paypal` to display the [predefined icon](../../integrations/payment-systems) for the PayPal withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab (for the tab description, refer to [Payout methods](../../back-office-guide/system/payout-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PayPal withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PayPal** withdrawal method is now configured in the B2CORE Back Office. [PayRetailers](https://payretailers.com/en/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. Follow the instructions below to configure the PayRetailers connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to PayRetailers. Before proceeding with the instructions, you must have signed up for PayRetailers and have an active account. You can consult the official [PayRetailers documentation](https://payretailers.dev/docs/welcome) or contact their support in case you have any questions. ## Supported currencies [#supported-currencies] Below is the table listing the currencies supported for deposits and withdrawals via PayRetailers: ## Configure connections to PayRetailers [#configure-connections-to-payretailers] If you plan to use PayRetailers for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to PayRetailers: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_PayRetailers` or `Withdrawals_PayRetailers`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **PayRetailers**. In the **Credentials** section that appears, configure the PayRetailers-specific settings: * In the **API base URL** field, specify: * `https://api.payretailers.com` — for the production environment * `https://api-sandbox.payretailers.com` — for the sandbox testing environment * In the **Shop ID** field, enter the identifier assigned to your account by PayRetailers. * In the **Secret key** field, specify the secret key from your PayRetailers account. * In the **Subscription key** field, specify the subscription key from your PayRetailers account. All of these details are provided by PayRetailers during the onboarding process and can also be found in the **Shops** section of your PayRetailers account. PayRetailers — Shops menu Click **Save** to create the connection. The **PayRetailers** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via PayRetailers, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through PayRetailers [#add-a-deposit-method-through-payretailers] To add and set up a method for making deposits through PayRetailers: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through this method will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PayRetailers**. * In the **Connection** dropdown, select the previously configured [PayRetailers connection for deposits](#configure-connections-to-payretailers). In the **Configuration** section that appears, fill in the following fields: * In the **Channel** dropdown, select the payment channel: * **Online** — for online payments * **Wallet** — for payments via e-wallets * **Credit card** — for funding deposits with bank cards * **Cash** — for making cash payments through banks * In the **Country** dropdown, select the country where the payment will be processed. Click **Save** to create the deposit method. The **PayRetailers** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-payretailers` to display the [predefined icon](../../integrations/payment-systems) for the PayRetailers deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process deposits in a specific currency, ensure it is added on this tab. For PayRetailers **deposits**, the currencies used to process deposits are tied to the country selected in the method **Configuration** section. A single country may support more than one **deposit currency**: * **Argentina** → ARS, USD * **Brazil** → BRL, USD * **Chile** → CLP, USD * **Colombia** → COP, USD * **Costa Rica** → CRC, USD * **Ecuador** → USD * **El Salvador** → USD * **Mexico** → MXN, USD * **Panama** → USD * **Peru** → PEN, USD * **Rwanda** → RWF, USD * **Tanzania** → TZS, USD * **Kenya** → KES, USD * **Nigeria** → NGN, USD * **South Africa** → ZAR, USD For example, for Brazil, deposits can be processed in `BRL` and `USD`, both of which can be added on the **PS Currencies** tab. Additionally, the method can be restricted for use in a specific country by applying country restrictions (for details, refer to [How to restrict the use of deposit and withdrawal methods](how-to-restrict-the-use-of-deposit-and-withdrawal-methods#how-to-restrict-the-use-by-country)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PayRetailers deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PayRetailers** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through PayRetailers [#add-a-withdrawal-method-through-payretailers] To add and set up a method for making withdrawals through PayRetailers: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through this method will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PayRetailers**. * In the **Connection** dropdown, select the previously configured [PayRetailers connection for withdrawals](#configure-connections-to-payretailers). In the **Configuration** section, select the payment channel in the **Channel** dropdown. Click **Save** to create the withdrawal method. The **PayRetailers** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-payretailers` to display the [predefined icon](../../integrations/payment-systems) for the PayRetailers withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. For PayRetailers **withdrawals**, each currency is tied to a specific country in a strict one-to-one relationship. This means that a withdrawal in a given currency is available only for its corresponding country. As a result, clients must select the appropriate country and provide the required bank details for that location. The following mapping shows which country is associated with each **withdrawal currency**: * **Argentina** → ARS * **Brazil** → BRL * **Chile** → CLP * **Colombia** → COP * **Ecuador** → USD * **Mexico** → MXN * **Peru** → PEN * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PayRetailers withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PayRetailers** withdrawal method is now configured in the B2CORE Back Office. [Payrock](https://payroc.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss). It supports: * Deposits in the following currencies: `CNY` (via Alipay, P2P, and bank transfers), `JPY` (via P2C and bank transfers), and `EGP` (via mobile money). * Withdrawals in: `CNY` (via Alipay, P2P, and bank transfers) and `JPY` (via P2C). In Payrock, each currency corresponds to a specific country, which means that the details shown in the payment form will be specific to that country — for example, the list of available banks for transfers. Follow the instructions below to configure the Payrock connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Payrock. Before proceeding with the instructions, you must have signed up for Payrock and have an active account. You can consult the official [Payrock documentation](https://support.payroc.com/s/) or contact their support in case you have any questions. ## Configure connections to Payrock [#configure-connections-to-payrock] If you plan to use Payrock for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to Payrock: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Payrock` or `Withdrawals_Payrock`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **Payrock**. In the **Credentials** section that appears, configure the Payrock-specific settings: * In the **API base URL** field, specify `https://gateway-dev.payrock.io`. * In the **Merchant code** field, enter the Merchant code assigned to your account by Payrock. * In the **Merchant key** field, enter the secret key provided by Payrock for your merchant account, used to authenticate API requests. You need to request the **Merchant code** and **Merchant key** from the Payrock support. Click **Save** to create the connection. The **Payrock** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via Payrock, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through Payrock [#add-a-deposit-method-through-payrock] To add and set up a method for making deposits through Payrock: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through Payrock will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Payrock**. * In the **Connection** dropdown, select the previously configured [Payrock connection for deposits](#configure-connections-to-payrock). Skip the **Configuration** section, as no settings are required for the Payrock deposit method. Click **Save** to create the deposit method. The **Payrock** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the deposit method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process deposits in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Payrock deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Payrock** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through Payrock [#add-a-withdrawal-method-through-payrock] To add and set up a method for making withdrawals through Payrock: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through Payrock will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Payrock**. * In the **Connection** dropdown, select the previously configured [Payrock connection for withdrawals](#configure-connections-to-payrock). Skip the **Configuration** section, as no settings are required for the Payrock withdrawal method. Click **Save** to create the withdrawal method. The **Payrock** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Payrock withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Payrock** withdrawal method is now configured in the B2CORE Back Office. [Paytiko](https://www.paytiko.com/) can be connected to B2CORE through PSS, with support for deposits only. For a full list of payment systems that can be connected through PSS, refer to [Integrations > Payment systems](../../integrations/payment-systems). Such systems are marked with `Yes` in the **PSS-supported** column. Follow the instructions below to configure the Paytiko connection and set up the deposit method in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Paytiko. Before proceeding with the instructions, you must have signed up for Paytiko and have an active account. ## Configure a connection to Paytiko [#configure-a-connection-to-paytiko] To configure a connection to Paytiko for making deposits: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Paytiko`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **PaymentSystemDeposit**. In the **Driver** dropdown that appears, select **Paytiko**. In the **Credentials** section that appears, configure the Paytiko-specific settings: * In the **API base URL** field, specify `https://core.paytiko.com`. * In the **Secrete key** field, enter your secret key. To find your secret key, sign in to your Paytiko account and navigate to **Payment settings** > **Merchants**, where you can copy it. Create the connection to Paytiko Click **Save** to create the connection. The **Paytiko** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. ## Add a deposit method through Paytiko [#add-a-deposit-method-through-paytiko] To add and set up a method for making deposits through Paytiko: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through Paytiko will be available for accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Paytiko**. * In the **Connection** dropdown, select the previously configured [Paytiko connection](#configure-a-connection-to-paytiko). Skip the **Configuration** section, as no settings are required for Paytiko. Create the Paytiko deposit method Click **Save** to create the deposit method. The **Paytiko** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, select **Fiat** in the **Group** dropdown. * In the **Icon** field, specify `paymethod-paytiko` to display the [predefined icon](../../integrations/payment-systems) for the Paytiko deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab (for the tab description, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Deposit method details Click **Save** to apply the changes. The **Paytiko** deposit method is now configured in the B2CORE Back Office. ## Set up a webhook in your Paytiko account [#set-up-a-webhook-in-your-paytiko-account] To receive status updates for initiated deposits in B2CORE, you need to set up a notification webhook in your Paytiko account. ### Copy the webhook URL from the B2CORE Back Office [#copy-the-webhook-url-from-the-b2core-back-office] In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Find the configured **Paytiko** deposit method and click **Edit** to enter the method details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Add the webhook URL to your Paytiko account [#add-the-webhook-url-to-your-paytiko-account] In your Paytiko account, navigate to **Payment settings** > **Merchants**. In the **Merchant settings**, paste the copied webhook URL into the **Url** field under the **External service** section. Add the webhook URL to your Paytiko account Click **Save** to apply the changes. The **Paytiko** deposit method is now fully configured and available for clients to use when making deposits in the B2CORE UI. [Praxis](https://praxis.tech/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. Follow the instructions below to configure the Praxis connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Praxis. Before proceeding with the instructions, you must have signed up for Praxis and have an active account. ## Configure connections to Praxis [#configure-connections-to-praxis] If you plan to use Praxis for both deposits and withdrawals, you must configure separate connections, each dedicated to a specific deposit or withdrawal method. Withdrawals through Praxis can be processed to **bank cards** or via an **alternative payment method** (APM) such as e-wallets. Each connection must be configured with the appropriate driver to ensure the correct operation of the respective deposit or withdrawal method. To configure a connection to Praxis: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Praxis` or `Withdrawals_Praxis`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select: * **Praxis cashier** — for processing deposits. * **Praxis bank card** — for withdrawals to bank cards. * **Praxis alternative payment method** — for withdrawals via an APM, such as e-wallets. In the **Credentials** section that appears, configure the Praxis-specific settings: * In the **Environment** dropdown (applicable only to the **Praxis bank card** driver), select **Production**. * In the **API base URL** field, specify `https://gw.praxisgate.com`. * In the **API secret** fields, enter the secret key provided by Praxis. * In the **Merchant ID** field, enter your Praxis Merchant ID. * In the **Application key** field, enter the key generated in your Praxis account. Click **Save** to create the connection. The **Praxis** connection for deposits or withdrawals will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need additional Praxis connections for other payment methods, follow the same instruction to create a new connection with a different driver. The image below displays three configured Praxis connections: one for the deposit method and two for withdrawal methods. External connections to Praxis ## Add a deposit method through Praxis [#add-a-deposit-method-through-praxis] To add and set up a method for making deposits through Praxis: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through Praxis will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Praxis cashier**. * In the **Connection** dropdown, select the previously configured [Praxis connection for deposits](#configure-connections-to-praxis). Skip the **Configuration** section, as no settings are required for the Praxis deposit method. Click **Save** to create the deposit method. The **Praxis** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-praxis` to display the [predefined icon](../../integrations/payment-systems) for the Praxis deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab. To enable the method to process deposits in a specific currency, ensure it is added on this tab (for the tab description, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Praxis deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test is performed based on the settings specified in the method form and the data provided in the selected external connection. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Praxis** deposit method is now configured in the B2CORE Back Office. In your Praxis account, make sure to apply the settings outlined below for proper processing of deposits. ## Set up the settings for deposit processing in your Praxis account [#set-up-the-settings-for-deposit-processing-in-your-praxis-account] Sign in to your Praxis account and apply the following settings: * The **Allow Payment Link Generation** option must be enabled. You can't activate this option on your own. To enable it, submit a request to Praxis support. * The **Validate IP** option should be either disable or contain the IP address of the host where your B2CORE Back Office resides. * The **Validate domain** option: * If you have the [mobile app](../../release-notes/release-notes-mobile) in addition to the B2CORE UI, this option must be disabled. * If you only have the B2CORE UI, this option should be either disabled or contain the domain on which your B2CORE UI resides. ## Add a withdrawal method through Praxis [#add-a-withdrawal-method-through-praxis] To add and set up a method for making withdrawals through Praxis: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through Praxis will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select: * **Praxis bank card** — the driver for withdrawals to bank cards. * **Praxis alternative payment method** — the driver for withdrawals via an APM (Alternative payment method), such as e-wallets. * In the **Connection** dropdown, select the previously configured [Praxis connection for withdrawals](#configure-connections-to-praxis). In the **Configuration** section that appears: * The **Gateway hash** field displays: * **Card processor** — if you selected the **Praxis bank card** driver. * **E-Wallet** — if you selected the **Praxis alternative payment method** driver. * In the **Profile ID** dropdown (applicable only to the **Praxis bank card** driver), select your Praxis profile type. Click **Save** to create the withdrawal method. The **Praxis** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-praxis` to display the [predefined icon](../../integrations/payment-systems) for the Praxis withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab (for the tab description, refer to [Payout methods](../../back-office-guide/system/payout-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Praxis withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test is performed based on the settings specified in the method form and the data provided in the selected external connection. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Praxis** withdrawal method is now configured in the B2CORE Back Office. If you need both withdrawals to bank cards and e-wallets, add and set up another withdrawal method that uses a different driver and connection. [Proxpay](https://www.proxpay.co/auth/login) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss). It supports deposits via QR codes and withdrawals to bank accounts, processed in `THB`. Follow the instructions below to configure the Proxpay connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Proxpay. Before proceeding with the instructions, you must have signed up for Proxpay and have an active account. ## Configure connections to Proxpay [#configure-connections-to-proxpay] If you plan to use Proxpay for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to Proxpay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Proxpay` or `Withdrawals_Proxpay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **Proxpay**. In the **Credentials** section that appears, configure the Proxpay-specific settings. ### For deposits: [#for-deposits] * In the **API base URL** field, specify: * `https://api.proxpay.co` — for the production environment * `https://stg-api.proxpay.co` — for the sandbox testing environment * In the **API key** field, enter the API key provided by Proxpay to authenticate requests. * In the **Username** and **Password** fields, specify the credentials associated with your Merchant ID. * In the **API start base URL** field, specify `https://payment.thehabito.com`. This URL is only intended for the production environment and isn't available for the testing environment. * In the **Start token** field, enter the token used to initiate API sessions with Proxpay. * In the **Merchant ID** field, specify your Merchant ID assigned by Proxpay. * In the **Proxpay merchant ID** filed, specify the unique merchant identifier used for QR code deposits. ### For withdrawals: [#for-withdrawals] * In the **API base URL** field, specify: * `https://api.proxpay.co` — for the production environment * `https://stg-api.proxpay.co` — for the sandbox testing environment * In the **API key** field, enter the API key provided by Proxpay to authenticate requests. * In the **Username** and **Password** fields, specify the credentials associated with your Merchant ID. * In the **Merchant ID** field, specify your Merchant ID assigned by Proxpay. You need to request all the credentials required for configuring connections from the Proxpay support. Click **Save** to create the connection. The **Proxpay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via Proxpay, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through Proxpay [#add-a-deposit-method-through-proxpay] To add and set up a method for making deposits through Proxpay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through Proxpay will be available to accounts denominated in the selected currencies. For these currencies, conversion rates for `THB` must be configured. * In the **Driver** dropdown, select **Proxpay**. * In the **Connection** dropdown, select the previously configured [Proxpay connection for deposits](#configure-connections-to-proxpay). In the **Configuration** section, enter the value for the **Product detail** field as provided by the Proxpay support. Click **Save** to create the deposit method. The **Proxpay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the deposit method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `THB`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Proxpay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Proxpay** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through Proxpay [#add-a-withdrawal-method-through-proxpay] To add and set up a method for making withdrawals through Proxpay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through Proxpay will be available from accounts denominated in the selected currencies. For these currencies, conversion rates for `THB` must be configured. * In the **Driver** dropdown, select **Proxpay**. * In the **Connection** dropdown, select the previously configured [Proxpay connection for withdrawals](#configure-connections-to-proxpay). Skip the **Configuration** section, as no settings are required for the Proxpay withdrawal method. Click **Save** to create the withdrawal method. The **Proxpay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `THB`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Proxpay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Proxpay** withdrawal method is now configured in the B2CORE Back Office. ## Set up webhooks in Proxpay [#set-up-webhooks-in-proxpay] To receive status updates for deposits and withdrawals in B2CORE, notification webhooks must be set up on the side of Proxpay. ### Copy webhook URLs from the B2CORE Back Office [#copy-webhook-urls-from-the-b2core-back-office] You will need separate webhook URLs for both deposit and withdrawal methods. In the B2CORE Back Office, navigate to: * **System** > **Deposit system** > **Deposit methods** * **System** > **Payout system** > **Payout methods** Find the configured Proxpay deposit or withdrawal method and click **Edit** to open its details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Provide URLs to Proxpay [#provide-urls-to-proxpay] Send the copied webhook URLs (for both deposits and withdrawals) to the Proxpay support for configuration on their side. [Sticpay](https://www.sticpay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. Follow the instructions below to configure the Sticpay connection and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Sticpay. Before proceeding with the instructions, you must have signed up for Sticpay and have an active account. ## Supported currencies [#supported-currencies] Below are the tables listing the currencies supported for deposits and withdrawals via Sticpay. Transactions are processed through wallets created in your Sticpay account. To enable a particular currency, you must first create a wallet in that currency. ### Fiat currencies [#fiat-currencies] The following fiat currencies are supported for **both deposits and withdrawals**: ### Cryptocurrencies [#cryptocurrencies] The following cryptocurrencies are supported for **deposits only**: ## Minimum deposit and withdrawal amounts [#minimum-deposit-and-withdrawal-amounts] Sticpay applies a dynamic minimum amount to deposits and withdrawals, equivalent to **1 USD** based on Sticpay’s exchange rates. If a deposit or withdrawal request is created below this minimum threshold (in conversion to USD), Sticpay will reject the transaction. For deposits, a client will see an error if the amount is below the limit when redirected to the Sticpay page. For withdrawals, if the amount is below the limit, the transaction will fail when processed on the Sticpay side, and the client won’t see the reason for the failure. To prevent this, it is strongly recommended to configure a minimum withdrawal amount for each supported currency in the Sticpay withdrawal method in the B2CORE Back Office. ## Configure API settings in your Sticpay account [#configure-api-settings-in-your-sticpay-account] To enable integration between Sticpay and B2CORE, you need to configure specific API settings in your Sticpay account. To configure API settings: Sign in to your Sticpay account and navigate to the **Sticpay API** section. Configure the following settings, which are required for deposit and withdrawal methods to function correctly with B2CORE: * Select the **Enable** checkbox to activate API-based payments. * Select the **Unique order-no** checkbox to ensure that each transaction has a unique order number, preventing duplicates. * In the **Success URL** field, specify the URL to which clients will be redirected after a successful deposit, using the format: `https://{your-Front-Office-URL}/en/payment/success` * In the **Failure URL** field, specify the URL to which clients will be redirected after a failed deposit, using the format: `https://{your-Front-Office-URL}/en/payment/failed` * In the **Referrer URL** field, specify the URL to which clients will be redirected after canceling a deposit (for example, the **Funds** > **Deposit** page of your B2CORE UI), using the format: `https://{your-Front-Office-URL}/en/funds/deposit` Make sure to replace `{your-Front-Office-URL}` with the domain of your B2CORE UI. * In the **Callback URL** field, enter the webhook URL generated on the **Webhooks** tab of the deposit method settings after configuring the method in the B2CORE Back Office (for details, refer to [Set up a webhook in your Sticpay account](#set-up-a-webhook-in-your-sticpay-account)). * Select the **Plain JSON Callback** checkbox to ensure callback responses are formatted as plain JSON. * In the **Whitelist IPs** field, enter the comma-separated IP addresses from which requests to your API will be accepted. * In the **Encryption type** dropdown, select **SHA256** to use this encryption method for request signing and validation. Only **SHA256** is supported for integration with B2CORE. Sticpay API settings Click **Save** to apply your changes. ## Configure connections to Sticpay [#configure-connections-to-sticpay] If you plan to use Sticpay for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to Sticpay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Sticpay` or `Withdrawals_Sticpay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **Sticpay**. In the **Credentials** section that appears, configure the Sticpay-specific settings: * In the **Interface version** dropdown, select **Live** or **Sandbox**, depending on whether you're setting up a production or test integration. * In the **API base URL** field, specify `https://api.sticpay.com`, which is used for both production and sandbox environments. * In the **Merchant email** field, enter the email address associated with your Sticpay merchant account. The email can be found in the **Account** section. * In the **API key** field, enter the API key generated in the **Sticpay API** section of your account. Click **Save** to create the connection. The **Sticpay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via Sticpay, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through Sticpay [#add-a-deposit-method-through-sticpay] To add and set up a method for making deposits through Sticpay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through Sticpay will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Sticpay**. * In the **Connection** dropdown, select the previously configured [Sticpay connection for deposits](#configure-connections-to-sticpay). Skip the **Configuration** section, as no settings are required for the Sticpay deposit method. Click **Save** to create the deposit method. The **Sticpay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-sticpay` to display the [predefined icon](../../integrations/payment-systems) for the Sticpay deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process deposits in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Sticpay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Sticpay** deposit method is now configured in the B2CORE Back Office. ## Set up a webhook in your Sticpay account [#set-up-a-webhook-in-your-sticpay-account] To receive status updates for initiated deposits in B2CORE, you need to set up a notification webhook in your Sticpay account. ### Copy the webhook URL from the B2CORE Back Office [#copy-the-webhook-url-from-the-b2core-back-office] In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Find the configured **Sticpay** deposit method and click **Edit** to enter the method details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Add the webhook URL to your Sticpay account [#add-the-webhook-url-to-your-sticpay-account] In your Sticpay account, navigate to the **Sticpay API** section. Paste the copied webhook URL into the **Callback URL** field. Click **Save** to apply the changes. ## Add a withdrawal method through Sticpay [#add-a-withdrawal-method-through-sticpay] To add and set up a method for making withdrawals through Sticpay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through Sticpay will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Sticpay**. * In the **Connection** dropdown, select the previously configured [Sticpay connection for withdrawals](#configure-connections-to-sticpay). Skip the **Configuration** section, as no settings are required for the Sticpay withdrawal method. Click **Save** to create the withdrawal method. The **Sticpay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-sticpay` to display the [predefined icon](../../integrations/payment-systems) for the Sticpay withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. Sticpay applies a dynamic minimum withdrawal amount, equivalent to **1 USD** based on Sticpay's exchange rates. If a withdrawal is created below this minimum, the transaction will fail when processed on the Sticpay side, and the client won’t see the reason for the failure. To prevent this, specify a minimum amount for each currency (in conversion to USD) when adding it to the **PS Currencies** tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Sticpay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Sticpay** withdrawal method is now configured in the B2CORE Back Office. [TopChange Pay](https://www.topchange.net/) (TC Pay) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals in `USD`, `IRR`, `EUR`, `AED`, `TRY`, `CNY`, `RUB`, and `USDT`. Follow the instructions below to configure the TC Pay connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to TC Pay. Before proceeding with the instructions, you must have signed up for TC Pay and have an active account. You can consult the official [TC Pay documentation](https://topchange1.zendesk.com/) or contact their support in case you have any questions. ## Configure connections to TopChange Pay [#configure-connections-to-topchange-pay] If you plan to use TC Pay for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to TC Pay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_TC_Pay` or `Withdrawals_TC_Pay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **TC Pay**. In the **Credentials** section that appears, configure the TC Pay-specific settings: * In the **API base URL** field, specify `https://pg.topayment.net`. * In the **Merchant ID** field, enter the Merchant ID assigned to your account by TC Pay. * Generate a pair of RSA *private* and *public* keys using the **TC RSA Key Generator**. You can consult the official [TC Pay documentation](https://topchange1.zendesk.com/) or contact their support in case you have any questions. * In the **Private RSA key** field, specify the *private* key, and make sure to specify the corresponding *public* key in your TC Pay account. Click **Save** to create the connection. The **TC Pay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via TC Pay, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through TopChange Pay [#add-a-deposit-method-through-topchange-pay] To add and set up a method for making deposits through TC Pay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through TC Pay will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **TC Pay**. * In the **Connection** dropdown, select the previously configured [TC Pay connection for deposits](#configure-connections-to-topchange-pay). In the **Configuration** section, fill in the **Terminal ID** associated with your TC Pay merchant account. This ensures that transactions are correctly routed and attributed to the appropriate payment terminal. Note that the allowed currency is determined by the specified Terminal ID. Click **Save** to create the deposit method. The **TC Pay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the deposit method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process deposits in a specific currency, ensure it is added on this tab. For TC Pay, each deposit method can support only one currency under the **PS Currencies** tab. Therefore, if you want to allow your clients to deposit in all supported currencies (`USD`, `IRR`, `EUR`, `AED`, `TRY`, `CNY`, `RUB`, and `USDT`), you must create eight separate deposit methods — one for each currency, corresponding to the specified **Terminal ID**. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). TC Pay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **TC Pay** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through TC Pay [#add-a-withdrawal-method-through-tc-pay] To add and set up a method for making withdrawals through TC Pay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through TC Pay will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **TC Pay**. * In the **Connection** dropdown, select the previously configured [TC Pay connection for withdrawals](#configure-connections-to-topchange-pay). In the **Configuration** section, fill in the **Terminal ID** associated with your TC Pay merchant account. This ensures that transactions are correctly routed and attributed to the appropriate payment terminal. Note that the allowed currency is determined by the specified Terminal ID. Click **Save** to create the withdrawal method. The **TC Pay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. For TC Pay, each withdrawal method can support only one currency under the **PS Currencies** tab. Therefore, if you want to allow your clients to withdraw in all supported currencies (`USD`, `IRR`, `EUR`, `AED`, `TRY`, `CNY`, `RUB`, and `USDT`), you must create eight separate withdrawal methods — one for each currency, corresponding to the specified **Terminal ID**. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). TC Pay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **TC Pay** withdrawal method is now configured in the B2CORE Back Office. [UniPayment](https://unipayment.io/en/) can be connected to B2CORE through PSS, with support for deposits via bank cards, processed in `EUR`, `GBP`, and `USD`. Follow the instructions below to configure the UniPayment connection and set up the deposit method in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to UniPayment. Before proceeding with the instructions, you must have signed up for UniPayment and have an active account. You can consult the official [UniPayment Help Center](https://help.unipayment.io/en/) or contact their support in case you have any questions. ## Configure a connection to UniPayment [#configure-a-connection-to-unipayment] To configure a connection to UniPayment for making deposits: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_UniPayment`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **PaymentSystemDeposit**. In the **Driver** dropdown that appears, select **UniPayment**. In the **Credentials** section that appears, configure the UniPayment-specific settings: * In the **API base URL** field, specify: * `https://api.unipayment.io/` — for the production environment * `https://sandbox-api.unipayment.io/` — for the sandbox testing environment * In the **Client ID** field, enter the client identifier generated in your UniPayment account. * In the **Client secret** field, enter the secret key associated with your UniPayment client. To generate both your client ID and secret, sign in to your UniPayment account, click the profile icon and select **API Management**. Click **Save** to create the connection. The **UniPayment** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. ## Add a deposit method through UniPayment [#add-a-deposit-method-through-unipayment] To add and set up a method for making deposits through UniPayment: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through UniPayment will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **UniPayment**. * In the **Connection** dropdown, select the previously configured [UniPayment connection](#configure-a-connection-to-unipayment). In the **Configuration** section, fill in the following fields: * In the **Application ID** field, enter the identifier of the app created in your UniPayment account. * In the **Payment method type** dropdown, select **Card**. App in UniPayment Click **Save** to create the deposit method. The **UniPayment** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-unipayment` to display the [predefined icon](../../integrations/payment-systems) for the UniPayment deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies, such as `EUR`, `GBP`, and `USD`. Deposits through UniPayment will be processed in the currencies added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). UniPayment deposit method — Settings tab Click **Save** to apply the changes. The **UniPayment** deposit method is now configured in the B2CORE Back Office. [Visionpay (HILZI)](https://visionpay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals processed in `USD` via the Whish Money app. Follow the instructions below to configure the Visionpay (HILZI) connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Visionpay. Before proceeding with the instructions, you must have signed up for Visionpay and have an active account. All the details required for configuring connections to Visionpay, including the API base URL and credentials, must be requested from the Visionpay support. ## Configure connections to Visionpay (HILZI) [#configure-connections-to-visionpay-hilzi] If you plan to use Visionpay (HILZI) for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to Visionpay (HILZI): In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Hilzi` or `Withdrawals_Hilzi`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **Hilzi**. In the **Credentials** section that appears, configure the Visionpay-specific settings: * In the **API base URL** field, specify the base URL provided by Visionpay for your integration environment. * In the **Login** and **Password** field, enter the credentials provided by Visionpay. You need to request the **API base URL** and credentials from the Visionpay support. Click **Save** to create the connection. The **Visionpay (HILZI)** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via Visionpay (HILZI), follow the same instruction to create a new connection for the other operation. ## Add a deposit method through Visionpay (HILZI) [#add-a-deposit-method-through-visionpay-hilzi] To add and set up a method for making deposits through Visionpay (HILZI): In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select `USD`. * In the **Driver** dropdown, select **Hilzi**. * In the **Connection** dropdown, select the previously configured [Visionpay (HILZI) connection for deposits](#configure-connections-to-visionpay-hilzi). Skip the **Configuration** section, as no settings are required for the deposit method. Click **Save** to create the deposit method. The **Visionpay (HILZI)** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the deposit method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USD`, the only supported currency for processing deposits. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Visionpay (HILZI) deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Visionpay (HILZI)** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through Visionpay (HILZI) [#add-a-withdrawal-method-through-visionpay-hilzi] To add and set up a method for making withdrawals through Visionpay (HILZI): In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select `USD`. * In the **Driver** dropdown, select **Hilzi**. * In the **Connection** dropdown, select the previously configured [Visionpay (HILZI) connection for withdrawals](#configure-connections-to-visionpay-hilzi). Skip the **Configuration** section, as no settings are required for the withdrawal method. Click **Save** to create the withdrawal method. The **Visionpay (HILZI)** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USD`, the only supported currency for processing withdrawals. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Visionpay (HILZI) withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Visionpay (HILZI)** withdrawal method is now configured in the B2CORE Back Office. ## Set up webhooks in Visionpay (HILZI) [#set-up-webhooks-in-visionpay-hilzi] To receive status updates for deposits and withdrawals in B2CORE, notification webhooks must be set up on the side of Visionpay. ### Copy webhook URLs from the B2CORE Back Office [#copy-webhook-urls-from-the-b2core-back-office] You will need separate webhook URLs for both deposit and withdrawal methods. In the B2CORE Back Office, navigate to: * **System** > **Deposit system** > **Deposit methods** * **System** > **Payout system** > **Payout methods** Find the configured Visionpay (HILZI) deposit or withdrawal method and click **Edit** to open its details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Provide URLs to Visionpay [#provide-urls-to-visionpay] Send the copied webhook URLs (for both deposits and withdrawals) to the Visionpay support for configuration on their side. You can restrict the use of deposit and withdrawal methods based on **verification level**, **country**, or **client type**. Additionally, you can apply a combination of these restrictions to fine-tune access. ## How to restrict the use by verification level [#how-to-restrict-the-use-by-verification-level] You can restrict the use of deposit or withdrawal methods so that they can only be used by clients who have achieved specific [verification levels](../../back-office-guide/verification/levels) (for example, due to regulator requirements). To restrict the use of a deposit or withdrawal method by verification level: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Select the method and click the **Edit** button in the method row. Click **Actions** in the upper-right page corner, and then select **Verification level restrictions** in the dropdown. In the **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option forbids the use of the method for selected verification levels. * **Allow only** — this option allows the use of the method only for selected verification levels. * In the **Rules** dropdown, select one or several verification levels. Click **Save** to apply the changes. ## How to restrict the use by country [#how-to-restrict-the-use-by-country] You can restrict the use of deposit or withdrawal methods so that they can only be used by clients from specific countries. To restrict the use of a deposit or withdrawal method by country: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Select the method and click the **Edit** button in the method row. Click **Actions** in the upper-right page corner, and then select **Country restrictions** in the dropdown. In the **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option forbids the use of the method for selected countries. * **Allow only** — this option allows the use of the method only for selected countries. * In the **Rules** dropdown, select one or several countries. Click **Save** to apply the changes. ## How to restrict the use by client type [#how-to-restrict-the-use-by-client-type] You can restrict the use of deposit or withdrawal methods so that they can only be used by clients belonging to a specific [type](../../back-office-guide/clients/types), such as *individual* or *corporate*. To restrict the use of a deposit or withdrawal method by client type: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Select the method and click the **Edit** button in the method row. Click **Actions** in the upper-right page corner, and then select **Client type restrictions** in the dropdown. In the **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option forbids the use of the method for selected client types. * **Allow only** — this option allows the use of the method only for selected client types. * In the **Rules** dropdown, select one or several client types. Click **Save** to apply the changes. To create a wallet: Navigate to **Products** > **Products**. Click +**Create**, and then select **eWallet** in the dropdown. Fill out the form: * The **Platform** field displays **eWallet**. * In the **Platform Group** dropdown, select **eWallet**. * In the **Currency** dropdown, select one or more currencies that you want to enable for the wallet. * In the **Name** field, enter the wallet name that will be displayed on the [Products](../../back-office-guide/products/products) page * In the **Group** dropdown, select a [group](../../back-office-guide/products/groups). The wallet will be displayed in the selected group in the B2CORE UI. * In the **Factory** dropdown, select `1`, as wallets can't be denominated in currency subunits. Only standard currency denominations are allowed for wallets. * In the **Type** dropdown, select **Personal**. Click **Save**. Fill out the details: * Set the **Caption**, which will be displayed in the B2CORE UI. Set localizations if needed. * Set **Status** to **Enabled**. * Set **Group rights** to **eWallet** or select the **Rights** if group rights were not configured. * Set **Max accounts** to **1**. * Set an external **Link** to display the available currencies or other information. This link appears in the B2CORE UI as the `i` icon. * Set **Autocreation on login** to **Yes** to make this wallet available to each client upon initial sign-in to the B2CORE UI. Click **Save** to apply the changes. You can restrict access to a product so that it can only be used by clients who have achieved specific verification levels (for example, due to regulator requirements). Verification levels must be already created and configured (for details, refer to [Manage verification options](../manage-verification-options/)). Navigate to **Products** > **Products**. Choose a product the use of which you want to restrict, and click the **Edit** button located in the product row. Click **Actions** in the upper-right page corner, and then select **Verification level restrictions** in the dropdown. In the displayed **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option forbids the use of the product for selected verification levels. * **Allow only** — this option allows the use of the product only for selected verification levels. * In the **Rules** dropdown, select one or several verification levels. Click **Save** to apply the changes. To view all interest payments made to all clients, go to [Finance > Transactions](../../back-office-guide/finance/transactions) and filter the **Type** column by **Savings Payment**. The payments in the **Done** status are listed in the **Transactions**. To view interest payment details for a client in a specific savings program: Navigate to **Savings** > **Plans**. Click view-button displayed next to the plan for which you want to review interest payment details. In the plan details, go to the **Payments** section: * For `Fixed` strategies, the payments list includes scheduled payments as well as payments that have already been made to the client’s wallet. From this list, you can calculate the total amount of interest that the client will receive in the program. * For `Flexible` strategies, the list displays only payments made to a client. From this list, you can calculate the total amount of interest that has been paid. For each payment, you can view: * **Amount** – the payment amount. * **Due date** – for `Fixed` strategies, the date and time when the payment is scheduled to be made. For `Flexible` strategies, no scheduled payments are displayed. * **Status** — the payment status: * `Scheduled` — indicates that a payment is scheduled but hasn’t yet been made. * `Paid` — indicates that a payment has been made to a client. * `Cancelled` — indicates that a payment was cancelled because the client decided to withdraw the investment amount before the end of the plan length (for `Fixed` strategies) or before the end of the penalty period (for `Flexible` strategies). * `Paid date` – the date and time when the interest was paid to the client. Payment details in a Fixed savings planPayment details in a Fixed savings plan Enable one-click access to trading platform web terminals for your clients directly from the B2CORE UI and mobile apps for Android and iOS for a seamless trading experience. To enable clients to open web trading terminals from B2CORE UI and mobile app: In the Back Office, navigate to **Products** > **Platforms**. Select the platform and click the **Edit** button. On the **Edit platform** page, specify the URL of the web trading terminal for the selected platform in the **Web Terminal URL** field. Click **Save** to apply the changes. For the selected platform, the **Trade** button will appear on account cards in the B2CORE UI and mobile app, enabling clients to open the web terminal with a single click. For **cTrader**, the terminal will directly open the account from which the **Trade** button was clicked, eliminating the need for clients to search for the desired account. This instruction describes how to create a platform, product group, and products that are required for enabling B2TRADER functionalities via the the B2CORE Back Office. Before you start configuring the B2TRADER platform and product in the Back Office, make sure that a connection to B2TRADER has already been set up by your account manager who is assigned the permissions to manage external connections. ## How to create a platform for B2TRADER [#how-to-create-a-platform-for-b2trader] To create a platform for B2TRADER: Navigate to **Products** > **Platforms**. Click **Create** in the upper-right page corner, and then select **B2TraderBrokeragePlatform** in the dropdown. In the **Create platform** popup, fill in the following fields: * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office. * In the **Available connection providers** dropdown, select **B2TraderBrokeragePlatform**. * In the **Connection** dropdown, select the previously configured B2TRADER connection. Click **Save** to proceed. On the **Edit platform** page, specify the following settings: * In the **Short caption** field, you can optionally specify a short platform name. * Make sure that **No** is selected in the **Demo** dropdown. * In the **Status** dropdown, select **Enabled**. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. After the connection settings have been successfully validated, click **Save**. ## How to create a product group for B2TRADER [#how-to-create-a-product-group-for-b2trader] To create a product group for B2TRADER: Navigate to **Products** > **Groups**. Click **+Create** in the upper-right page corner. On the **Create group** page, fill in the following fields: * In the **Caption** field, enter a caption that you want to use for the group. This caption will be assigned to the product group in the Back Office and will be visible to clients in the B2CORE UI. * In the **Description** field, enter a group description. * In the **Type** dropdown, select **Default**. Click **Save** to create the product group. ## How to create a product for B2TRADER [#how-to-create-a-product-for-b2trader] To manage both live and demo accounts, as well as **Hedging** and **Netting** types, separate products must be created for B2TRADER in the B2CORE Back Office. To create a product for B2TRADER: Navigate to **Products** > **Products**. Click **Create** in the upper-right page corner, and then select the caption assigned to the previously configured [B2TRADER platform](#how-to-create-a-platform-for-b2trader) in the dropdown. In the **Create product** popup, fill in the following fields: * In the **Platform group** dropdown, select the appropriate group existing on the B2TRADER platform. * In the **Currency** dropdown, select the currency for the product. The available currency options in B2CORE depend on the settings of the selected platform group. * In the **Account type** dropdown, select **Hedging** or **Netting**. * In the **Name** field, enter a unique name for the product. * In the **Group** dropdown, select the previously created [product group](#how-to-create-a-product-group-for-b2trader) to include the product into that group. * In the **Type** dropdown, select: * **Trade** — if you create a product for managing live accounts * **Demo** — if you create a product for managing demo accounts Click **Save** to proceed. On the **Edit product** page, specify the following product settings: * In the **Name** field, you can modify the product name. The name must be unique. * In the **Caption** field, enter a caption for the product. This caption will be assigned to the product in the Back Office and will be visible to clients in the B2CORE UI. * In the **Default** leverage field, enter the default leverage ratio that will be assigned to accounts created automatically when the **Auto creation on login** option is triggered. * In the **Leverage** field, enter one or more leverage ratios that client can select when creating accounts via the B2CORE UI. * In the **Rights** and **Default account rights** dropdowns, select the required permissions that will be applied to the product (such as `Enabled`, `Deposit`, `Withdraw`, `Visible`, `Transfer deposit`, `Transfer withdraw`, and `Exchange`). * In the **Max accounts** field, enter an integer value to define the maximum number of accounts that clients can create when using this product. * To set no limit on the number of accounts, specify **-1**. * To forbid clients to create accounts, specify **0**. * In the **Mail** dropdown, select: * **Send** or **Default** — to automatically send email notifications to clients when new accounts are created, providing them with the necessary details to start trading. * **Don't send** — to disable email notifications about new accounts. * In the **Mail template** dropdown, select the email template `accountCreated` that will be used to send notifications about new accounts. * In the **Start amount** field, specify the amount that will be automatically deposited to *demo* accounts upon their creation. * In the **Auto creation on login** dropdown, select: * **Yes** – to automatically create accounts based on the product settings when clients first sign in to the B2CORE UI. * **No** – to create accounts based on this product manually. * In the **Agreement link** field, specify a link to the document to which clients must consent in order to open accounts via the B2CORE UI. * In the **Link info** field, specify a link to a resource with additional product information, which clients can access when creating accounts via the B2CORE UI. * On the **Currencies** tab, you can review the currency associated with the product and add more currencies if necessary. The available currency options are limited by the settings of the platform groups configured on the B2TRADER platform. * After configuring the product settings, activate it by selecting **Enabled** in the **Status** dropdown. Click **Save** to create the product. B2TRADER accounts can now be created based on the product via the Back Office or B2CORE UI. Any changes to product settings will directly impact how the product is displayed and functions for clients in the B2CORE UI. This instruction describes how to create platforms, product groups, and products that are required for enabling DXtrade via the Back Office. To manage live and demo trading accounts, you must configure two separate platforms and products. However, if both live and demo accounts are located on the same DXtrade platform in your infrastructure and are separated only by groups, it isn’t necessary to create two platforms. In this case, create one platform and two products — one for live accounts and one for demo accounts — in the B2CORE Back Office. Before you start configuring DXtrade platforms and products in the Back Office, make sure that a connection to DXtrade has already been set up by your account manager who is assigned the permissions to manage external connections. ## How to create a platform for DXtrade [#how-to-create-a-platform-for-dxtrade] If both live and demo accounts are located on the same DXtrade platform in your infrastructure, create a single platform in the B2CORE Back Office. If they are located on separate platforms, create two separate platforms for DXtrade. To create a platform for DXtrade: Navigate to **Products** > **Platforms**. Click the **Create** in the upper-right page corner, and then select **DXtrade** in the dropdown. * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office (such as **DXtrade Live** or **DXtrade Demo**). * In the **Available connection providers** dropdown, select **DXtrade**. * In the **Connection** dropdown, select **DXtrade**. Click **Save** to proceed. On the **Edit platform** page, specify the following settings: * In the **Short caption** field, you can optionally specify a short platform name. * If you configure a demo platform for DXtrade, select **Yes** in the **Demo** dropdown; otherwise, make sure that **No** is selected. * In the **Status** dropdown, select **Enabled**. * In the **Web Terminal URL**, optionally specify the URL of the web trading terminal for DXtrade. If specified, the **Trade** button will be displayed on account cards in the B2CORE UI, enabling clients to open the web terminal by clicking the button. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. After the connection settings have been successfully validated, click **Save**. ## How to create a product group for DXtrade [#how-to-create-a-product-group-for-dxtrade] To create a product group for DXtrade: Navigate to **Products** > **Groups**. Click **+Create** in the upper-right page corner. On the **Create group** page, fill in the following fields: * In the **Caption** field, enter a caption that you want to use for the group. * In the **Description** field, enter a group description. * In the **Type** dropdown, select **Default**. Click **Save** to create the product group. ## How to create a product for DXtrade [#how-to-create-a-product-for-dxtrade] To separate live and demo accounts, two products must be created in the B2CORE Back Office — one for live accounts and one for demo accounts. To create a product for DXtrade: Navigate to **Products** > **Products**. Click the **Create** in the upper-right page corner, and then select the previously created [DXtrade platform](#how-to-create-a-platform-for-dxtrade) in the dropdown. In the **Create product** popup, fill in the following fields: * In the **Platform Group** dropdown, select **Default**. * In the **Currency** dropdown, select one or more currencies that you want to enable for the product. * In the **Account number prefix** field, enter a prefix to be added to DXtrade account numbers. This helps distinguish, for example, live and demo accounts or accounts belonging to different brands within one DXtrade infrastructure. The maximum prefix length is 14 characters. The prefix is applied only to newly created accounts. Existing accounts remain unchanged. * Set up the following DXtrade-specific settings: **Auto Execution**, **Commissions**, **Financing**, **Limits**, **Margining**, **Spreads**, and **Trading**, which are used to customize trading conditions on the DXtrade platform. After the product is created, the DXtrade-specific settings can't be modified. * In the **Name** field, enter a name that you want to use for the product. * In the **Group** dropdown, select the previously created [product group](#how-to-create-a-product-group-for-dxtrade). * In the **Type** dropdown, select: * **Trade** — if you create a product for managing live accounts * **Demo** — if you create a product for managing demo accounts Click **Save** to proceed. On the **Edit product** page, specify the following product settings: * In the **Rights** and **Default account rights** dropdowns, select the required permissions that will be applied to the product (such as `Enabled`, `Visible`, `Trade enabled`, `Transfer deposit`, and `Transfer withdraw`). * In the **Max accounts** field, enter an integer value to define the maximum number of accounts that clients can create when using this product. * To set no limit on the number of accounts, specify **-1**. * To forbid clients to create accounts, specify **0**. * In the **Mail** dropdown, **Don't send** must be selected. Upon creating the first account, a client receives an email with the credentials for the trading terminal. No emails are sent when subsequent accounts are created. * In the **Start amount** field, specify the amount that will be automatically deposited to demo trading accounts upon their opening. * In the **Auto creation on login** dropdown, select either of the two values: * **Yes** — to automatically create trading accounts based on the product settings for all clients upon their first sign in to the B2CORE UI. * **No** — to create trading accounts manually. * In the **Status** dropdown, select **Enabled**. * If you want to enable additional currencies for the product, add them on the **Currencies** tab. You may also want to configure the other product settings available on the **Edit product** page. Click **Save** to create the product. All settings changes made on the **Edit product** page will directly impact how the product is displayed and functions in the B2CORE UI for clients. This instruction describes how to create a platform and product that are required for enabling Match-Trader via the Back Office, as well as how to create Match-Trader trading accounts for your clients. For managing live and demo trading accounts, it is required to configure two separate platforms and products. Before you start configuring Match-Trader platforms and products in the Back Office, make sure that a connection to Match-Trader has already been set up by your account manager who is assigned the permissions to manage external connections. ## How to create a platform for Match-Trader [#how-to-create-a-platform-for-match-trader] To create a platform for Match-Trader: Navigate to **Products** > **Platforms**. Click the **Create** in the upper-right page corner, and then select **MatchTrader** in the dropdown. In the **Create platform** popup, fill in the following fields: * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office (such as **MatchTrader** or **MatchTrader Demo**). * In the **Available connection providers** dropdown, select **MatchTrader**. * In the **Connection** dropdown, select **MatchTrader**. Click **Save** to proceed. On the **Edit platform** page, specify the following settings: * In the **Short caption** field, you can optionally specify a short platform name. * If you configure a demo platform for Match-Trader, select **Yes** in the **Demo** dropdown; otherwise, make sure that **No** is selected. * In the **Status** dropdown, select **Enabled**. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. After the connection settings have been successfully validated, click **Save**. ## How to create a product for Match-Trader [#how-to-create-a-product-for-match-trader] To create a product for Match-Trader: Navigate to **Products** > **Products**. Click **Create** in the upper-right page corner, and then select: * **MatchTrader** — if you create a product for managing live accounts * **MatchTrader Demo** — if you create a product for managing demo accounts In the **Create product** popup, fill in the following fields: * In the **Platform Group** dropdown, select **Fiat**. * In the **Currency** dropdown, select one or more currencies that you want to enable for the product. * In the **Name** field, enter a name that you want to use for the product. * In the **Group** dropdown, select the appropriate group that has been previously configured in **Products** > **Groups**. * In the **Type** dropdown, select: * **Trade** — if you create a product for managing live accounts * **Demo** — if you create a product for managing demo accounts Click **Save** to proceed. On the **Edit product** page, specify the following product settings: * In the **Rights** and **Default account rights** dropdowns, select the required permissions that will be applied to the product (such as `Enabled`, `Visible`, `Trade enabled`, `Transfer deposit`, and `Transfer withdraw`). * In the **Max accounts** field, enter an integer value to define the maximum number of accounts that clients can create when using this product. * To set no limit on the number of accounts, specify **-1**. * To forbid clients to create accounts, specify **0**. * In the **Start amount** field, specify the amount that will be automatically deposited to demo trading accounts upon their opening. * In the **Auto creation on login** dropdown, select either of the two values: * **Yes** — to automatically create trading accounts based on the product settings for all clients upon their first sign in to the B2CORE UI. * **No** — to create trading accounts manually. * In the **Status** dropdown, select **Enabled**. * If you want to enable additional currencies for the product, add them on the **Currencies** tab. You may also want to configure the other product settings available on the **Edit product** page. Click **Save** to create the product. All settings changes made on the **Edit product** page will directly impact how the product is displayed and functions in the B2CORE UI for clients. ## How to create Match-Trader accounts for clients [#how-to-create-match-trader-accounts-for-clients] To create a Match-Trade trading account for a client via the Back Office: Navigate to **Clients** > **Accounts**. Click **+Create** in the upper-right page corner, and then select a client for whom you want to create the account. On the **Create account** page, specify the following settings: * In the **Product group** dropdown, select **Fiat**. * In the **Product** dropdown, select: * **MatchTrader** — to create a live trading account. * **MatchTrader Demo** — to create a demo account. * In the **Currency** dropdown, select a currency in which the account must be denominated. * In the **Leverage** dropdown, select a leverage ratio to be assigned to the account. To create an account in B2CORE using the trading account that already exists on the Match-Trade platform, select the option **Create account that already exists on external platform**, and then specify the existing Match-Trader account number in the **External account number** field. Click **Save** to create the account. The created Match-Trader account is available to the client upon navigating to **Platforms** > **MatchTrader** in the B2CORE UI. To start trading on the Match-Trader platform, deposit or transfer funds to the newly created Match-Trader account. This can be done by the admin via the Back Office (for details, refer to [How to create a deposit](../manage-finances/how-to-create-a-deposit), [How to create a transfer](../manage-finances/how-to-create-a-transfer), and [How to create a payout](../manage-finances/how-to-create-a-payout)) or by a client via the B2CORE UI. ## How to archive Match-Trader accounts [#how-to-archive-match-trader-accounts] Match-Trader trading accounts can be archived via the Back Office. Only the accounts with zero balances can be archived. If there are available funds on a trading account, transfer them to another client account denominated in the same currency as an archived account. To archive a Match-Trader account: Navigate to **Clients** > **Accounts**. Select a Match-Trader account that you want to archive and click the **Edit** button located in the account row. On the **Edit account** page, click the **Actions** button, and then select **Archive**. Click **Save** to apply the changes. The account has been marked with **A**, indicating that it is archived and hidden from the client in the B2CORE UI. The archived accounts are unavailable for trading and depositing. The archived accounts can be restored so that clients can use them again. To do this, click the **Actions** button, and then select **Unarchive**. This instruction describes how to configure platforms and products required for enabling OneZero and PrimeXM via the Back Office, as well as how to create OneZero and PrimeXM accounts for your clients. Before you start configuring OneZero or PrimeXM platforms and products in the Back Office, make sure that connections to these platforms have already been set up by your account manager who is assigned the permissions to manage external connections. ## How to create a platform for OneZero [#how-to-create-a-platform-for-onezero] To create a platform for OneZero: Navigate to **Products** > **Platforms**. Click **Create** in the upper-right corner of the page, and then select **OneZero** in the dropdown. In the **Create platform** popup, fill in the following fields: * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office. Click **Save** to proceed. On the **Edit connection** page, specify the following settings: * In the **Service location** field, specify `https://onezero.b2broker.net/api/rest/`. * In the **Token endpoint** field, specify `https://onezero.b2broker.net/api/token`. * In the **Service user** and **Service password** fields, enter the login and password that are used for the service connection. * In the **REST Api version** field, specify **1.01**. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. In the **Status** dropdown, select **Enabled**. Click **Save** to create the platform. ## How to create a platform for PrimeXM [#how-to-create-a-platform-for-primexm] To create a platform for PrimeXM: Navigate to **Products** > **Platforms**. Click **Create** in the upper-right page corner, and then select **PrimeXM** in the dropdown. In the **Create platform** window, fill in the following fields: * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office. Click **Save** to proceed. On the **Edit connection** page, specify the following settings: * In the **Pxm username** and **Pxm password** fields, specify the login and password that are used to connect to the PrimeXM server. * In the **Rabbitmq host** field, specify `xcore-api-ld4.primexm.com`. * In the **Rabbitmq port** field, specify **5673**. * In the **Rabbitmq user** and **Rabbitmq password** fields, specify the login and password that are used to connect to RabbitMQ. * In the **Rabbitmq vhost** field, specify `/primebrokerage_uk`. * In the **Rabbitmq exchange** field, specify `XServerAPI`. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. In the **Status** dropdown, select **Enabled**. Click **Save** to create the platform. ## How to create products for OneZero and PrimeXM [#how-to-create-products-for-onezero-and-primexm] To create products for OneZero and PrimeXM: Navigate to **Products** > **Products**. Click **Create** in the upper-right page corner, and then select either **OneZero** or **PrimeXM** in the dropdown. In the **Create product** popup, fill in the following fields: * In the **Platform Group** dropdown, select **Group**. * In the **Currency** dropdown, select one or more currencies that you want to enable for the product. * In the **Name** field, enter the name that you want to use for the product. * In the **Group** dropdown, select the appropriate group that have been previously configured in **Products** > **Groups**. * In the **Type** dropdown list, select **External**. Click **Save** to proceed. On the **Edit product** page, specify the appropriate settings for your product: * In the **Rights** and **Default account rights** dropdowns, select the required permissions that you want to apply to the product (such as `Enabled`, `Deposit`, `Withdraw`, `Visible`, `Transfer deposit`, `Transfer withdraw`, and `Exchange`). * In the **Status** dropdown, select **Enabled**. * If you want to enable additional currencies for the product, add them on the **Currencies** tab. You may also want to configure the other product settings available on the **Edit product** page. Click **Save** to create the product. All settings changes made on the **Edit product** page will directly impact how the product is displayed and functions in the B2CORE UI for clients. ## How to create OneZero and PrimeXM accounts for clients [#how-to-create-onezero-and-primexm-accounts-for-clients] OneZero and PrimeXM accounts are created in B2CORE based on the accounts that have already been registered on the corresponding external platforms. To create a OneZero or PrimeXM account for a client via the Back Office: Navigate to **Clients** > **General**. From the clients list, select a client for whom you want to create a OneZero or PrimeXM account, and then click **Edit**. Go to the **Accounts** tab, and then click **+Create** in the upper-right page corner. On the **Creating account** page, fill in the following fields: * In the **Product group** dropdown, select **External**. * In the **Product** dropdown, select the product previously created for OneZero or PrimeXM. * In the **Currency** dropdown, select the corresponding currency. * In the **Leverage** dropdown, select the leverage ratio. * Enable the option to **Create account that exists on external platform**. * In the **External account number** field, specify the ID of an account that has been already registered on the corresponding external platform. Click **Save** to create the account. After the account has been created, it is available to the client upon navigating to **Platforms** > **OZ/PXM** via the B2CORE UI. This instruction describes how to create a connection, platforms and products that are required for enabling TradeLocker functionalities via the the B2CORE Back Office. For managing live and demo trading accounts, you need to create one connection to TradeLocker, but configure two separate platforms and products. After creating user groups in TradeLocker, they aren't automatically available to systems where TradeLocker is integrated. To make them visible, please contact TradeLocker support with a corresponding request. ## How to configure a connection to TradeLocker [#how-to-configure-a-connection-to-tradelocker] To configure a connection to TradeLocker in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **TradeLocker**. Click **Save** to create the connection. The **TradeLocker** connection will appear in the list of external connections. Click **Edit** to enter the connection details and complete the following fields: * In the **API Base URL** field, specify `https://api.tradelocker.com`. * In the **API Key** field, specify your API key provided by TradeLocker. This key is used to authenticate requests to the API. * The **Trading Terminals** section displays the URLs of the TradeLocker live and demo terminals. In the B2CORE UI, when clients click the **Trade** button on the account card, they are redirected to the corresponding terminal, enabling them to start trading in one click. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. ## How to create a platform for TradeLocker [#how-to-create-a-platform-for-tradelocker] To manage live and demo trading accounts, create two separate platforms for TradeLocker in the B2CORE Back Office. To create a platform for TradeLocker: Navigate to **Products** > **Platforms**. Click **Create** in the upper-right page corner, and then select **TradeLocker** in the dropdown. In the **Create platform** popup, fill in the following fields: * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office (such as **TradeLocker** or **TradeLocker Demo**). * In the **Available connection providers** dropdown, select **TradeLocker**. * In the **Connection** dropdown, select the previously configured [TradeLocker connection](#configure-a-connection-to-tradelocker). Click **Save** to proceed. On the **Edit platform** page, specify the following settings: * In the **Short caption** field, you can optionally specify a short platform name. * If you configure a demo platform for TradeLocker, select **Yes** in the **Demo** dropdown; otherwise, make sure that **No** is selected. * In the **Status** dropdown, select **Enabled**. * In the **Settings** section, specify the name of your TradeLocker server in the **Trading Server name** field. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. After the connection settings have been successfully validated, click **Save**. ## How to create a product group for TradeLocker [#how-to-create-a-product-group-for-tradelocker] To create a product group for TradeLocker in the B2CORE Back Office: Navigate to **Products** > **Groups**. Click **+Create** in the upper-right page corner. On the **Create group** page, fill in the following fields: * In the **Caption** field, enter a caption for the product group. This caption will be assigned to the product group in the Back Office and will be visible to clients in the B2CORE UI. * In the **Description** field, enter a group description. * In the **Type** dropdown, select **Default**. Click **Save** to create the product group. ## How to create a product for TradeLocker [#how-to-create-a-product-for-tradelocker] To manage live and demo trading accounts, create two separate products for TradeLocker in the B2CORE Back Office. To create a product for TradeLocker: Navigate to **Products** > **Products**. Click the **Create** in the upper-right page corner, and then select: * **TradeLocker** — if you create a product for managing live accounts * **TradeLocker Demo** — if you create a product for managing demo accounts In the **Create product** popup, fill in the following fields: * In the **Platform Group** dropdown, select the appropriate group existing on your TradeLocker server. TradeLocker accounts created based on this product via B2CORE will be assigned to this group. * In the **Currency** dropdown, select one or more currencies that you want to enable for the product. * In the **Name** field, enter a name that you want to use for the product. * In the **Group** dropdown, select the previously configured [TradeLocker product group](#how-to-create-a-product-group-for-tradelocker). * In the **Type** dropdown, select: * **Trade** — if you create a product for managing live accounts * **Demo** — if you create a product for managing demo accounts Click **Save** to proceed. On the **Edit product** page, specify the following product settings: * In the **Name** field, you can modify the product name. The name must be unique. * In the **Caption** field, enter a caption for the product. This caption will be assigned to the product in the Back Office and will be visible to clients in the B2CORE UI. * Leave the **Leverage** and **Default leverage** fields empty. The leverage parameter isn't applied directly to accounts on the TradeLocker platform. Instead, leverage is configured per instrument within the platform. * In the **Rights** and **Default account rights** dropdowns, select the required permissions that will be applied to the product (such as `Enabled`, `Visible`, `Trade enabled`, `Transfer deposit`, and `Transfer withdraw`). The default rights will be assigned to TradeLocker accounts created automatically when the **Auto creation on login** option is triggered. For a list of possible permissions, refer to [Product permissions](../../back-office-guide/references/product-permissions). * In the **Max accounts** field, enter an integer value to define the maximum number of TradeLocker accounts that a client can create for each currency added to the product. For example, if `USD` and `EUR` are added as currencies to the product and the **Max accounts** option is set to `1`, the client can create one account in `USD` and one account in `EUR` based on this product. * To set no limit on the number of accounts, specify **-1**. * To forbid clients to create accounts, specify **0**. * In the **Mail** dropdown, select **Don't send**. This option is required to ensure that email notifications in B2CORE work correctly using the designated `TradeLockerUserCreated` email template. * In the **Start amount** field, specify the amount that will be automatically deposited to *demo* TradeLocker accounts upon their creation. * In the **Min deposit amount (USD)** field, you can optionally specify the minimum deposit, in USD, required to create a TradeLocker account based on this product. * In the **Auto creation on login** dropdown, select: * **Yes** — to automatically create TradeLocker accounts based on the product settings when clients first sign in to the B2CORE UI. * **No** — to create TradeLocker accounts based on this product manually. * In the **Agreement link** field, specify a link to the document to which clients must consent in order to open TradeLocker accounts via the B2CORE UI. * In the **Link info** field, specify a link to a resource with additional product information, which clients can access when creating TradeLocker accounts via the B2CORE UI. * On the **Currencies** tab, you can review the currency associated with the product and add more currencies if necessary. * After configuring the product settings, activate it by selecting **Enabled** in the **Status** dropdown. Click **Save** to create the product. TradeLocker accounts can now be created based on the product via the Back Office or B2CORE UI. Any changes to product settings will directly impact how the product is displayed and functions for clients in the B2CORE UI. This instruction explains how to create platforms, product groups, and products that are required for enabling MT4 and MT5 functionalities via the B2CORE Back Office. For managing live and demo trading accounts on both MT4 and MT5, it's required to configure separate platforms, product groups, and products for each in the Back Office. No external connections are required for MT platforms. Connections to these platforms are established within B2CORE via the internal WEBAPI service. All credentials needed to connect to the respective MT platform are configured in **Products** > **Platforms**. ## How to create a platform for MT [#how-to-create-a-platform-for-mt] To create a platform for MT: Navigate to **Products** > **Platforms**. Click **Create** in the upper-right page corner, and then select **MetaTrader 4** or **MetaTrader 5** in the dropdown. In the **Create platform** popup, fill in the following fields: * In the **Name** field, enter a unique name for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office. * In the **Income transfer request** dropdown, select: * **Yes** — to require admin approval and create requests for transfers to MT accounts via the B2CORE UI. * **No** — to process transfers to MT accounts via the B2CORE UI without requests. * In the **Outcome transfer request** dropdown, select: * **Yes** — to require admin approval and create requests for transfers from MT accounts via the B2CORE UI. * **No** — to process transfers from MT accounts via the B2CORE UI without requests. Click **Save** to proceed. On the **Edit platform** page, specify the following settings: * In the **Short caption** field, you can optionally specify a short platform caption. * If you configure a demo platform for MT, select **Yes** in the **Demo** dropdown; otherwise, make sure that **No** is selected. * In the **Status** dropdown, select **Enabled**. In the **Settings** section, specify the following connection setting: ### MetaTrader connection [#metatrader-connection] * In the **Host** field, specify the IP address and port number for accessing the MT server. * In the **Login** field, enter the login for accessing the MT Manager. * In the **Password** field, enter the password for accessing the MT Manager. ### WEBAPI connection [#webapi-connection] The WEBAPI connection settings are provided by your account manager. * In the **Host** field, specify the domain name and port number for accessing WEBAPI. * In the **Access token** field, specify the token used to access WEBAPI. ### Settings [#settings] In this section, specify the additional settings: * In the **Max inactivity days** field, enter the number of days after which MT accounts will be archived if no activity is detected during that period. * In the **Web Terminal URL** field, specify the URL of the web trading terminal. When specified, the **Trade** button will appear on account cards for the respective platform in the B2CORE UI and mobile app, enabling clients to navigate to trading with a single click. * In the **Use reporting on the platform** dropdown, select: * **Enabled** — to activate the **Send reports** option for MT accounts created via B2CORE. * **Disabled** — to keep the **Send reports** option disabled for MT accounts created via B2CORE. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. After the connection settings have been successfully validated, click **Save**. ## How to create a product group for MT [#how-to-create-a-product-group-for-mt] To create a product group for MT: Navigate to **Products** > **Groups**. Click **+Create** in the upper-right page corner. On the **Create group** page, fill in the following fields: * In the **Caption** field, enter a caption for the product group. This caption will be assigned to the product group in the Back Office and will be visible to clients in the B2CORE UI. * In the **Description** field, enter a group description. * In the **Type** dropdown, select **Default**. Click **Save** to create the product group. ## How to create a product for MT [#how-to-create-a-product-for-mt] To create a product for MT: Navigate to **Products** > **Products**. Click the **Create** in the upper-right page corner, and then select: * **MetaTrader 5 Live** — to create a product for managing live accounts on MT5 * **MetaTrader 5 Demo** — to create a product for managing demo accounts on MT5 * **MetaTrader 4 Live** — to create a product for managing live accounts on MT4 * **MetaTrader 4 Demo** — to create a product for managing demo accounts on MT4 In the **Create product** popup, fill in the following fields: * In the **Platform Group** dropdown, select the appropriate group existing in your MT manager. MT accounts created based on this product via B2CORE will be assigned to this group. * In the **Currency** dropdown, select the currency for the product. The available currency options in B2CORE depend on the settings of the selected platform group. For example, if a platform group in the MT manager is configured for `USD`, then `USD` will be the default currency option for MT accounts created with this product via B2CORE. * In the **Name** field, enter a unique name for the product. * In the **Group** dropdown, select the previously created [product group](#how-to-create-a-product-group-for-mt) to include the product into that group. * In the **Factory** dropdown, select `100` to denominate MT accounts created with this product in currency subunits (for example, cents); otherwise, leave `1`. * In the **Type** dropdown, select: * **Trade** — if you create a product for managing live accounts * **Demo** — if you create a product for managing demo accounts Click **Save** to proceed. On the **Edit product** page, specify the following product settings: * In the **Name** field, you can modify the product name. The name must be unique. * In the **Caption** field, enter a caption for the product. This caption will be assigned to the product in the Back Office and will be visible to clients in the B2CORE UI. * In the **Default leverage** field, enter the default leverage ratio that will be assigned to MT accounts created automatically when the **Auto creation on login** option is triggered. * In the **Leverage** field, enter one or more leverage ratios that client can select when creating MT accounts via the B2CORE UI. * In the **Rights** and **Default account rights** dropdowns, select the required permissions that will be applied to the product (such as `Enabled`, `Visible`, `Trade enabled`, `Transfer deposit`, and `Transfer withdraw`). The default rights will be assigned to MT accounts created automatically when the **Auto creation on login** option is triggered. For a list of possible permissions, refer to [Product permissions](../../back-office-guide/references/product-permissions). * In the **Max accounts** field, enter an integer value to define the maximum number of MT accounts that a client can create for each currency added to the product. For example, if `USD` and `EUR` are added as currencies to the product and the **Max accounts** option is set to `1`, the client can create one account in `USD` and one account in `EUR` based on this product. * To set no limit on the number of accounts, specify **-1**. * To forbid clients to create accounts, specify **0**. * In the **Mail** dropdown, select: * **Send** or **Default** — to automatically send email notifications to clients when new MT accounts are created, providing them with the necessary details to start trading. * **Don't send** — to disable email notifications about new MT accounts. * In the **Mail template** dropdown, select the email template that will be used to send notifications about new MT accounts. * In the **Start amount** field, specify the amount that will be automatically deposited to *demo* MT accounts upon their creation. * In the **Min deposit amount (USD)** field, you can optionally specify the minimum deposit, in USD, required to create an MT account based on this product. * In the **Auto creation on login** dropdown, select: * **Yes** — to automatically create MT accounts based on the product settings when clients first sign in to the B2CORE UI. * **No** — to create MT accounts based on this product manually. * The **First transfer activation** option is only applicable to MT5. In the dropdown, select: * **Yes** — to create MT5 accounts without the `Trade enabled` permission. This permission will be assigned to the account upon the client's first successful transfer. * **No** — to create MT5 accounts with the `Trade enabled` permission, immediately active for trading. * In the **Agreement link** field, specify a link to the document to which clients must consent in order to open MT accounts via the B2CORE UI. * In the **Link info** field, specify a link to a resource with additional product information, which clients can access when creating MT accounts via the B2CORE UI. * On the **Currencies** tab, you can review the currency associated with the product and add more currencies if necessary. The available currency options are limited by the settings of the platform groups configured in the MT manager. * After configuring the product settings, activate it by selecting **Enabled** in the **Status** dropdown. Click **Save** to create the product. MT accounts related to the respective platform can now be created based on the product via the Back Office or B2CORE UI. Any changes to product settings will directly impact how the product is displayed and functions for clients in the B2CORE UI. If both MT4 and MT5 platforms are needed, follow the same instructions to configure the other platform. You can ask your clients to pass accreditation tests as part of your verification procedure. To enable a certain user group (usually, it is the “Admins” group) to create client accreditation tests, this user group should be assigned all the permissions related to the **Client Tests**, **Client Tests Answers** and **Client Tests Questions**. These permissions can be found under the **Verification** permission group (for details, refer to [How to add a user group and grant permissions](../manage-system-settings/how-to-add-a-user-group-and-grant-permissions)). To create a client accreditation test, do the following: Navigate to **Verification** > **Client tests**, and then click **+Create** in the upper-right corner of the page. In the **Create client test** window, fill in the following fields: * In the **Caption** field, specify a title for your test. This title will be displayed in the B2CORE UI. * In the **Details** field, specify a test’s description or any other helpful information that clients should know before they start passing the test. Such information will be displayed under the test’s title in the B2CORE UI. * From the **Visible** drop-down list, select either **Yes** or **No** to show or hide this test in the B2CORE UI. We recommend that you select **No** at this step and switch the test visibility setting to **Yes** after finishing adding questions and answers to your test. Click **Save** to create the test. To add questions and answer choices to your test, click the **Edit** button located in the test row. On the **Edit client test** page, switch to the **Questions** tab, and then click **+Create** in the upper-right corner of the page. In the **Create client test questions** window that is displayed, fill in the following fields: * In the **Question** field, enter a text of a question. * From the **Type** drop-down list, select a question type. The following question types are available: * **open** — an open-ended question that can be answered in a free form. * **close** — a close-ended question that can be answered by choosing a single or multiple correct answers from a given list of options. * **questionnaire** — a multiple-choice question that can be answered by choosing one or more answers from a given list of options. * **poll** — a multiple-choice question that can be answered by choosing a single answer from a given list of options. * From the **Visible** drop-down list, select either **Yes** or **No** to show or hide this question. * Click **Save**. Add as many questions as required for your test by repeating Steps 5 and 6 of this procedure. Add answer options to the questions of **closed**, **questionnaire,** and **poll** types, by clicking Add answer options in the question row. In the **Edit client test answer** window that is displayed, fill in the following fields: * In the **Text** field, enter an answer to the question. * From the **Correct** drop-down list, select either **Yes** or **No** to mark this answer option as correct or incorrect. The correct answer options must be indicated only for questions of the **close** type. You can choose to add a single or multiple correct answers to a question. * From the **Visible** drop-down list, select either **Yes** or **No** to show or hide this answer option. * Click **Save** to add the answer option. Add as many answer options as required for each question included in your test by repeating Steps 8 and 9 of this procedure. After you have finished adding questions and answers to your test, switch the test visibility setting to **Yes** on the **Clients test** page. The client accreditation test is now available to your clients via the B2CORE UI. In addition, you can force your clients to pass this test before submitting documents for obtaining a particular verification level (for details, refer to [How to create verification levels](how-to-use-the-kyc-constructor#how-to-create-verification-levels) to learn more). This article provides instructions on how to configure B2CORE to use the KYC provider, [ShuftiPro](https://shuftipro.com/). With ShuftiPro, you can conduct document and face verification to validate the identity of *individual* clients, as well as address and location verification. In addition to document verification, you can enable the SuftiPro Anti-money laundering (AML) check to screen your clients against multiple AML data sources, helping to protect your company from potential money laundering activities. Before proceeding with the instructions, you must have signed up for SuftiPro and have an active account. ## How to configure a connection to ShuftiPro [#how-to-configure-a-connection-to-shuftipro] Only admins who are assigned the permissions to manage external connections can set up a connection to ShuftiPro. To set up a connection: In the B2CORE Back Office, navigate to **System** > **External Connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, specify a name that you want to use for the connection. * In the **Caption** field, specify a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **ShuftiPro**. Click **Save** to create the connection. In the connections list, find the ShuftiPro connection that you've created and click **Edit** to enter the connection details. On the **Edit connection** page, specify the following settings: * In the **API host** field, specify `https://api.shuftipro.com`. * In the **Client ID** and **Secret key** fields, specify the client ID and secret key value to access ShuftiPro. * In the **New signature (for secrets after March 2023)** field, select either: * **No** — for clients who registered with ShuftiPro before March 15, 2023. * **Yes** — for clients who registered with ShuftiPro or updated their secret keys after March 15, 2023. This is needed to validate a key signature returned in ShuftiPro API responses (for details, refer to [Response Signature](https://developers.shuftipro.com/docs/verification_endpoints/responses#response-signature) in the ShuftiPro documentation). * In the **Allow documents screenshots** dropdown, select **Enabled** to allow clients to upload document screenshots for verification, instead of requiring only live captures. By default, this option is disabled. * In the **Check AML** dropdown, select **Enabled** to use the SuftiPro Anti-money laundering (AML) check. In this case, when clients submit documents for upgrading their verification levels they will be additionally screened against SuftiPro AML data sources, including multiple global watchlists, FATF lists, PEP lists, and Sanction lists, to prevent the risk of money laundering. By default, this option is disabled. When the AML check is enabled, a client must meet two conditions to obtain a higher verification level: the submitted documents must be verified, and the AML check must be successful. If either condition fails, the verification level upgrade will be rejected. * In the **Show OCR form**, select: * **Enabled** — to display the OCR form during verification, enabling clients to review and confirm the information extracted from their submitted documents. * **Disabled** — to hide the form and skip the confirmation step. By default, the form is enabled. In the **Enabled** dropdown, select **Yes**. Click **Save** to apply the settings. ## How to create document groups for ShuftiPro verification [#how-to-create-document-groups-for-shuftipro-verification] For **document verification**, create three document groups named `passport`, `id_card`, and `driving_license`. These groups enables you to request your clients to submit passports, national identity cards, and driving licenses for identity verification. For **address verification**, multiple documents recognized by [SuftiPro for address verification](https://developers.shuftipro.com/docs/coverage/documents#address-verification--validation) are supported, including the document type named `any`. Therefore, create the necessary document groups using names that match the ShuftiPro document types, such as `rent_agreement`, `bank_letter_receipt`, `employer_letter`, `utility_bill`, `tax_bill`, `any`, or others. These groups enable you to request your clients to submit respective documents to confirm their address and location details, such as city or country. The document type `any` enables clients to submit any document that includes their name and address for address verification. It's not tied to any specific document type, providing more flexibility and convenience for clients when confirming their addresses. For **face verification**, create the document group named `selfie`. To create a document group: In the B2CORE Back Office, navigate to **Verification** > **Document groups**. Click **+Create** in the upper-right page corner. On the **Create document group** page, fill in the following fields: * In the **Name** field, specify the name of a document group. Ensure to specify document group names exactly as provided above, in lower case. For example: `passport`, `id_card`, `driving_license`, `selfie`, and so on. For address verification, make sure to specify document group names exactly as listed in the [supported ShuftiPro document types](https://developers.shuftipro.com/docs/coverage/documents#address-verification--validation). For example: `rent_agreement`, `bank_letter_receipt`, `employer_letter`, `utility_bill`, `tax_bill`, `any`, or others. The document group named `any` allows clients to submit any document that includes their name and address, rather than a specific document type. This gives clients more flexibility when verifying their address. Make sure that **Yes** is selected in the **Enabled** dropdown. Click **Save** to create the document group. ## How to create document types for ShuftiPro verification [#how-to-create-document-types-for-shuftipro-verification] For each document group that you've created, create a document type. To create a document type: In the B2CORE Back Office, navigate to **Verification** > **Document types**. Click **+Create** in the upper-right page corner. On the **Create document type** page, fill in the following fields: * In the **Name** field, specify the name of a document type. Document type names must be the same as the names of the previously created document groups. For example: `passport`, `id_card`, `selfie`, `rent_agreement`, `bank_letter_receipt`, `employer_letter`, `utility_bill`, `tax_bill`, `any`, or others. In the **Status** dropdown, select **Enabled**. Click **Save** to create the document type. ## How to create verification levels for ShuftiPro [#how-to-create-verification-levels-for-shuftipro] You can create verification levels or modify the existing levels to use ShuftiPro for document, address, and face verification. To create a verification level: In the B2CORE Back Office, navigate to **Verification** > **Levels**. Click **+Create** in the upper-right page corner. On the **Create verification level** page, fill in the following fields: * In the **Index** field, specify a non-zero integer value. The zero (`0`) index is always assigned to the default verification level. For other verification levels, the index must be greater than zero, such as `1` for Level 1, `2` for Level 2 and so on. * In the **Wizard** dropdown, select `ShuftiProSDK`. The ShuftiPro popup will open in the B2CORE UI, enabling clients to follow the verification instructions and submit the required documents. * In the **Caption** field, specify a level name that will be displayed in the B2CORE UI and mobile app, such as `Level 1`. If required, specify the localization properties for this field by clicking the button located on the right side of the field. * In the **Desktop Description** field, specify a description of the level to be displayed in the B2CORE UI. This description can include the permissions granted to clients once they obtain this level. The description for the B2CORE UI can be specified in the HTML format. If required, specify the localization properties for this field. * In the **Mobile Description** field, specify a level description to be displayed in the mobile app. The description for the mobile app can be specified in the JSON format. If required, specify the localization properties for this field. * In the **Visible** dropdown, select **Yes**. * In the **Default** dropdown, select **No**. (`Level 0` is always the default verification level). * In the **Assigned Client Right** dropdown, select a permission level defining the set of permissions that you want to grant to your clients after obtaining this verification level (for details, refer to [Client rights](../../back-office-guide/system/client-rights)). * In the **Document groups** dropdown, select one or more required document groups. For example, you can select `passport` and `selfie` if you want your clients to submit their passports and pass face verification to receive this level. * In the **Client tests** dropdown, optionally select one or more accreditation tests if you want to force your clients to pass these tests before they can submit their documents for verification. The list of available tests includes all the tests with visibility set to **Yes**, which are displayed on the [Client tests](../../back-office-guide/verification/client-tests) page. Click **Save** to create the level. ## How to add the domain for callbacks in ShuftiPro [#how-to-add-the-domain-for-callbacks-in-shuftipro] To ensure that callbacks from ShuftiPro are successfully delivered and verification updates are received in B2CORE, you must add the domain part of your callback URL in your ShuftiPro account settings. To add the domain: Sign in to your SuftiPro account. Go to **Settings** > **API Keys** > **Callback/Redirect URLs**. Add the domain part of your callback URL. The domain of your callback URL is the same as the domain of your B2CORE Back Office. For example, if your Back Office URL is `https://{your-Back-Office-URL}`, enter only `{your-Back-Office-URL}` — without `https://`. Make sure to replace `{your-Back-Office-URL}` with the actual domain of your B2CORE Back Office. Add the domain for callbacks in ShuftiPro Save your changes. This article provides instructions on how to configure B2CORE to use the KYC and KYT provider, [SumSub](https://sumsub.com/). Before proceeding with the instructions, you must have signed up for SumSub and have an active account. For KYT checks, **SumSub Fraud Prevention** must also be enabled and properly configured. ## How to configure a connection to SumSub [#how-to-configure-a-connection-to-sumsub] Only admins who are assigned the permissions to manage external connections can set up a connection to SumSub. To set up a connection: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name that you want to use for the connection. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **SumSubstance**. Click **Save** to create the connection. In the connections list, find the SumSub connection that you've created and click **Edit** to enter the connection details. On the **Edit connection** page, specify the following settings: * In the **Service Location** field, specify `https://api.sumsub.com/`. * In the **Client ID** field, specify your SumSub account name. To view your account name, in the SumSub interface, go to **Settings** > **Account Details**. * In the **Webhook Secret Key** field, specify a webhook secret. You should generate the webhook in the SumSub interface. To do this, in the SumSub interface, go to **Dev space** > **Webhooks** (for the required webhook configuration, refer to [SumSub webhook configuration](how-to-use-sumsubstance#sumsub-webhook-configuration)). * Leave the **Login** and **Password** fields empty. * In the **Token** and **Token Secret** fields, specify a token and a secret key value generated in the SumSub interface. To generate them, in the SumSub interface, go to **Dev space** > **App Tokens**. * To apply different verification flows to *individual* and *corporate* clients, select **Enabled** in the **Client Resetting Mode** dropdown. When the **Client Resetting Mode** option is enabled, this means that repeated verification is required for clients whose type has been changed from *individual* to *corporate*, or vice versa. After changing a type, the following happens: * In the B2CORE Back Office, a client’s verification level resets to `Level 0`, which is the default verification level. * All pending [client’s requests](../../back-office-guide/clients/requests) to obtain a higher verification level are automatically rejected. * In the SumSub system, an applicant is set back to the initial level, and all documents that have been previously uploaded for this applicant are invalidated. All files and documents that have been previously uploaded for this client in the B2CORE Back Office will still be available. In the **Transaction monitoring** section, configure the settings for KYT checks using the **SumSub Fraud Prevention**. These checks are currently supported for fiat and crypto deposits and withdrawals. * In the **Enabled** dropdown, select: * **Yes** — to enable transaction monitoring via **SumSub** and receive results in B2CORE. * **No** — to disable transaction monitoring via **SumSub**. * In the **Currency Filter** dropdown: * Select one or more currencies to monitor transactions only in the selected currencies. * Leave the list empty to monitor transactions in all currencies. Click **Save** to apply the settings. ## How to create document groups for SumSub verification [#how-to-create-document-groups-for-sumsub-verification] Create document groups to enable clients to submit various documents supported by SumSub for verification. For each document (such as an ID card, passport, driver’s license, and others) that you want to make available for verification, create a separate document group with the appropriate name. To create a document group: In the B2CORE Back Office, navigate to **Verification** > **Document groups**. Click **+Create** in the upper-right page corner. On the **Create document group** page, fill in the following fields: * In the **Name** field, specify the name of a document group. Ensure to specify document group names exactly as the names of [document types supported by SumSub](https://docs.sumsub.com/reference/add-id-documents#supported-document-types), such as `ID_CARD`, `PASSPORT`, `DRIVERS`, `RESIDENCE_PERMIT`, and so on. For example, if you want your clients to submit their ID cards for document verification, create a document group with the name `ID_CARD`. * In the **Caption** field, specify a document group caption that will be displayed in the B2CORE UI. * In the **Type** dropdown, select **One**. * In the **Description** field, specify a description for the document group that is used in the Back Office. Make sure that **Yes** is selected in the **Enabled** dropdown. Click **Save** to create the document group. ## How to create document types for SumSub verification [#how-to-create-document-types-for-sumsub-verification] For each document group that you've created, create a document type. To create a document type: In the B2CORE Back Office, navigate to **Verification** > **Document types**. Click **+Create** in the upper-right page corner. On the **Create document type** page, fill in the following fields: * In the **Name** field, specify the name of a document type. Document type names must be the same as the names of the previously created document groups. For example, `ID_CARD`, `PASSPORT`, `DRIVERS`, `RESIDENCE_PERMIT`, and so on. * In the **Caption** field, specify a document type caption that will be displayed in the B2CORE UI. * In the **Description** field, specify a description for the document type that will be displayed in the B2CORE UI. * In the **Group** dropdown, select a document group with which this document type must be associated. * In the **Max files** field, specify the maximum number of files that clients can upload for this document type. In the **Status** dropdown, select **Enabled**. Click **Save** to create the document type. ## How to create verification levels for SumSub in the B2CORE Back Office [#how-to-create-verification-levels-for-sumsub-in-the-b2core-back-office] You can create verification levels or modify the existing levels to use SumSub for verification. To create a verification level: In the B2CORE Back Office, navigate to **Verification** > **Levels**. Click **+Create** in the upper-right page corner. On the **Create verification level** page, fill in the following fields: * In the **Index** field, specify a non-zero integer value. The zero (`0`) index is always assigned to the default verification level. For other verification levels, the index must be greater than zero, such as `1` for Level 1, `2` for Level 2 and so on. * In the **Wizard** dropdown, select `SnsWizardSDK`. * In the **Caption** field, specify a level name that will be displayed in the B2CORE UI and mobile app, such as `Level 1`. If required, specify the localization properties for this field by clicking the button located on the right side of the field. * In the **Desktop Description** field, specify a description of the level to be displayed in the B2CORE UI. This description can include the permissions granted to clients once they obtain this level. The description for the B2CORE UI can be specified in the HTML format. If required, specify the localization properties for this field. * In the **Mobile Description** field, specify a level description to be displayed in the mobile app. The description for the mobile app can be specified in the JSON format. If required, specify the localization properties for this field. * In the **Visible** dropdown, select **Yes**. * In the **Default** dropdown, select **No**. (`Level 0` is always the default verification level). * In the **Assigned Client Right** dropdown, select a permission level defining the set of permissions that you want to grant to your clients after obtaining this verification level (for details, refer to [Client rights](../../back-office-guide/system/client-rights)). * In the **Document groups** dropdown, select one or more required document groups. For example, you can select `ID_CARD` and `RESIDENCE_PERMIT` if you want your clients to submit their ID cards and residence permits for verification to receive this level. * In the **Client tests** dropdown, optionally select one or more accreditation tests if you want to force your clients to pass these tests before they can submit their documents for verification. The list of available tests includes all the tests with visibility set to **Yes**, which are displayed on the [Client tests](../../back-office-guide/verification/client-tests) page. Click **Save** to create the level. ## How to create levels and flows in the SumSub interface [#how-to-create-levels-and-flows-in-the-sumsub-interface] The B2CORE Back Office supports two types of clients: *individual* and *corporate*. The SumSub system provides the capability to set up a separate verification flow for each of the types. To use this option, make sure that you enabled the **Client Resetting Mode** when [configuring a connection to SumSub](how-to-use-sumsubstance#how-to-configure-a-connection-to-sumsub). To add a new level: In the SumSub interface, navigate to **Integrations** > **Applicant Levels**. Click **Add new level**. Select the required steps. Level names must be specified in the following formats: * For *individual* clients: `level1`, `level2`, and so on. * For *corporate* clients: `level3corporate`, `level4corporate`, and so on. These formats ensure correct mapping between levels in SumSub and B2CORE. The mapping is based on the **Index** assigned to each verification level in B2CORE. You can find indexes in the respective column on the [Verification > Levels](../../back-office-guide/verification/levels) page of the B2CORE Back Office and use them in the level names for SumSub. For example: * `level1` in SumSub maps to the level with **Index** = 1 in B2CORE * `level2` in SumSub maps to the level with **Index** = 2 in B2CORE * `level3corporate` in SumSub maps to the level with **Index** = 3 in B2CORE * `level4corporate` in SumSub maps to the level with **Index** = 4 in B2CORE and so on. To add a new flow: In the SumSub interface, navigate to **Integrations** > **Verification Flow**. Click **Add new**. Select the required options. For each flow, select a compatible level. ## SumSub webhook configuration [#sumsub-webhook-configuration] **Reviewed** * Name: `REVIEWED` * Receiver: `HTTP Endpoint` * Target: `https://{your-Back-Office-URL}/api/v1/verification-sns/handle` * Type: `Applicant reviewed (applicantReviewed)` * Secret key: the secret key generated in SumSub Make sure to replace `{your-Back-Office-URL}` with the domain of your B2CORE Back Office, *not* the B2CORE UI. For example, the target for webhooks may look like this: `https://example.com/api/v1/verification-sns/handle`. Before you begin to configure a custom KYC (Know Your Customer) procedure, consider the following: * the number of verification levels that clients can obtain (you can use the built-in KYC provider or one of the [supported third-party KYC providers](../../integrations/kyc-providers) to run a verification procedure at each level) * the permissions that clients are granted after obtaining each verification level, as well as possible limits that can be applied to specific permissions * the documents that clients are required to submit to obtain each verification level. Moreover, it’s possible to configure separate KYC procedures for clients of different types, such as individual and corporate clients. You can also grant different initial verification levels to clients of different types after they sign up to the B2CORE UI (for details, refer to [How to add and configure the registration wizard](../manage-system-settings/how-to-set-up-the-registration-wazard/how-to-add-and-configure-the-registration-wizard) and specifically the article about [how to configure the User Registration step](../manage-system-settings/how-to-set-up-the-registration-wazard/how-to-configure-the-user-registration-step)). Follow the steps below to create and set up verification levels, define the documents that clients must submit at each level, as well as configure the way the verification levels and their descriptions are displayed to clients in the B2CORE UI. ## How to create document groups [#how-to-create-document-groups] At this step, create document groups, for example, “Proof of ID”, “Proof of residence” and so on. Document groups are used to categorize documents required for verification. To create a document group: Navigate to **Verification** > **Document groups**, and then click **+Create** in the upper-right page corner. On the **Create document group** page, fill out the form: * Set the group **Name**, which will be displayed only in the Back Office. * Set **Type** to **One**. * Set **Caption** — the name of the document group in the B2CORE UI. Set localizations if needed. * Set **Description** — here, you can provide hints to your clients about the verification procedure. This information can be presented in the HTML format. Set localizations if needed. * Set **Enabled** to **Yes**. Click **Save** to create the document group. ## How to create document types [#how-to-create-document-types] A KYC document is a formal document such as an ID card, a passport, driver’s license, or bank statement, which can verify the identity and address of a client. At this step, define documents that clients should provide in order to get verified at each level. To define a document: Navigate to **Verification** > **Document types**, and then click **+Create** in the upper-right page corner. On the **Create document type** page, fill out the form: * Set the document **Name**, which will be displayed only in the Back Office. * Set **Caption** to specify the document name to be displayed in the B2CORE UI. Set localizations if needed. * Set **Description** — the description can be specified in the HTML format. Set localizations if needed. * Set **Status** to **Enabled**. * Set the document **Group** — it should be one of the groups created at the previous step. * Set **Max files** to indicate how many documents of this type your client can upload. Click **Save** to define the document type. ## How to create verification levels [#how-to-create-verification-levels] At this step, create the required verification levels. For each B2CORE instance, `Level 0` is already set up and is used as the default level. To create a new verification level: Navigate to **Verification** > **Levels**, and then click **+Create** in the upper-right page corner. On the **Create verification level** page, fill out the form: * Set the level **Index**, this value must be greater than 0. * Set **Wizard** — select `DocumentsWizard` to use the built-in KYC provider and display in the B2CORE UI a form for uploading required documents based on the specified document type. * Set **Caption** — the level name to be displayed to clients in the B2CORE UI and mobile app. If required, specify the localization properties for this field by clicking the button located on the right side of the field. * Set **Next Level** — select the next verification level that clients can obtain after they are granted the level that you currently configure. Leave this field empty to allow clients of different types, such as individual and corporate, to obtain different verification levels. The next level that a client is proposed to obtain in the B2CORE UI is the level with the next higher index according to the applied client type restrictions (for details, refer to [How to restrict the use of verification levels by client types](how-to-use-the-kyc-constructor#how-to-restrict-the-use-of-verification-levels-by-client-types)). * Set **Desktop Description** — the level description displayed to clients in the B2CORE UI. For a level description, you can list the permissions granted to clients after obtaining this level. The description for the B2CORE UI can be specified in the HTML format (see [Example](how-to-use-the-kyc-constructor#example) below). If required, specify the localization properties for this field. * Set **Mobile Description** — the level description displayed to clients in the mobile app. The description for the mobile app can be specified in the JSON format. If required, specify the localization properties for this field. * Set **Visible** to: * **Yes** — to create the level that will be displayed in the KYC flow to clients in the B2CORE UI. * **No** — to create a hidden level (for example, one with specific transaction limits) that can be assigned to clients only manually via the Back Office. * Set **Default** to **No** (since the default level is always Level 0). * In the **Assigned Client Right** dropdown, select a permission level defining a set of permissions that you want to grant to your clients after obtaining this verification level (to learn more, refer to [How to create permission levels](how-to-use-the-kyc-constructor#how-to-create-permission-levels)). * Select a client accreditation test in the **Client Tests** dropdown if you want to force your clients to pass the selected test before they can submit the documents required to obtain this verification level. The list of available client tests includes all the tests with visibility set to **Yes**, which are displayed on the [Client tests](../../back-office-guide/verification/client-tests) page. * Select **Document Groups** from among those created at [Step 1](how-to-use-the-kyc-constructor#how-to-create-document-groups), which specify the documents required for a client to be granted this verification level. Multiple groups can be selected. Click **Save** to create the verification level. ### Example [#example] The following HTML code example illustrates how to specify a level description for the B2CORE UI: ```html

Verification Level 0


To obtain Verification Level 1, submit the following documents:

  • A list of documents that a client must submit or other requirements that must be met for receiving Level 1.
```
To mark an operation as enabled for this verification level, change `glyphicon glyphicon-error` to `glyphicon glyphicon-success` in the HTML code. The level description will be displayed in the B2CORE UI as follows: The level description in the B2CORE UI ## How to restrict the use of verification levels by client type [#how-to-restrict-the-use-of-verification-levels-by-client-type] To configure separate verification procedures, for example for individual clients and corporate clients, indicate the levels that can be obtained only by clients of a specific type. To apply client type restrictions to a verification level: Navigate to **Verification** > **Levels**. Select the verification level, and click **Edit**. On the **Update verification level** page, click the **Actions** button, and select **Client type restriction**. In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Allow only** — to allow the use of the verification level only for a specific client type. * **Deny only** — to prohibit the use of the verification level for a specific client type. * In the **Rule** dropdown, select the client type to which you want to apply the selected rule. Click **Save** to apply the changes. ### Example [#example-1] Suppose that both *individual* and *corporate* clients are assigned the default `Level 0` after they sign up to the B2CORE UI. The following levels should be configured to support separate verification procedures for clients, based on **client type**: * Individual clients: `Level 0` → `Level 1` → `Level 2` Client type restriction: **Allow only** = `individual` * Corporate clients: `Level 0` → `Level 3` → `Level 4` Client type restriction: **Allow only** = `corporate` The next level that a client is allowed to obtain is the level with the next higher index according to the applied restrictions by client type. This may be useful when you want to use different [KYC providers](../../integrations/kyc-providers) for running verification procedures for individual and corporate clients. ## How to restrict the use of verification levels by jurisdiction or country [#how-to-restrict-the-use-of-verification-levels-by-jurisdiction-or-country] To configure more specific verification procedures, you can restrict the use of verification levels based on a client’s jurisdiction or country. To apply such restrictions to a verification level: Navigate to **Verification** > **Levels**. Select the verification level, and click **Edit**. On the **Update verification level** page, click the **Actions** button, and select: * **Jurisdiction restriction** — to apply the restriction based on the client’s jurisdiction. * **Country restriction** — to apply the restriction based on the client’s country. In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Allow only** — to allow the use of the verification level only for the selected jurisdictions or countries. * **Deny only** — to prohibit the use of the verification level for the selected jurisdictions or countries. * In the **Rule** dropdown, select one or more jurisdictions or countries to which you want to apply the rule. Click **Save** to apply the changes. ### Example [#example-2] Suppose that both *individual* and *corporate* clients are initially assigned the default `Level 0` after signing up to the B2CORE UI. The following levels should be configured to support separate verification procedures for clients, based on **client type** and **jurisdiction**: * Individual clients in the **EU**: `Level 0` → `Level 1` → `Level 2` Client type restriction: **Allow only** = `individual` and Jurisdiction restriction: **Allow only** = `EU` These levels are accessible only to individual clients from the **EU** jurisdiction. * Individual clients in **CY** (Cyprus): `Level 0` → `Level 3` → `Level 4` Client type restriction: **Allow only** = `individual` and Jurisdiction restriction: **Allow only** = `CY` These levels are accessible only to individual clients from the **CY** jurisdiction. * Corporate clients in the **EU**: `Level 0` → `Level 5` → `Level 6` These levels are accessible only to corporate clients from the **EU** jurisdiction. Client type restriction: **Allow only** = `corporate` and Jurisdiction restriction: **Allow only** = `EU` * Corporate clients in **CY** (Cyprus): `Level 0` → `Level 7` → `Level 8` Client type restriction: **Allow only** = `corporate` and Jurisdiction restriction: **Allow only** = `CY` These levels are accessible only to corporate clients from **CY** jurisdiction. The next level that a client is allowed to obtain is the level with the next higher index according to the applied restrictions by client type and jurisdiction. ## How to create permission levels [#how-to-create-permission-levels] Permission levels are a set of operations that clients are allowed to make in the B2CORE UI. The permission levels are associated with verification levels. When clients obtain a particular verification level, they are granted the permissions associated with this verification level. To create a permission level: Navigate to **System** > **Client Rights**, and click **+Create** in the upper-right corner of the page. In the **Create role** window that is displayed, fill in the following fields: * **Name** — specify the name of the verification level, which should not include any capital letters. * **Caption** — specify the permission level description. Click **Save** to create the permission level. Click the **Edit** button located in the permission level row. In the **Parent Role** dropdown, select a previous permission level that clients must obtain before they can get this level. This field doesn't apply to the default permission level. Select the permissions that you want to grant to your clients at this level: * **Verification** — if selected, clients are allowed to obtain a higher verification level in the B2CORE UI. * **Converter** — if selected, clients can exchange funds in the B2CORE UI. * **Deposits** — if selected, clients can deposit funds in the B2CORE UI. * **Withdrawals** — if selected, clients can withdraw funds in the B2CORE UI. * **Internal Transfers** — if selected, funds can be transferred from one client to another within the same B2CORE system. Click **Save** to apply the changes. ## How to set up deposit, withdrawal, and transfer limits by verification levels [#how-to-set-up-deposit-withdrawal-and-transfer-limits-by-verification-levels] For each verification level, you can limit the amounts that clients who are granted this level can deposit, withdraw, and transfer. All limit values are calculated in USD. To set up limits for a particular level: Navigate to **Verification** > **Levels**. Select a verification level for which you want to set up limits, and then click the **Edit** button located in the level row. On the **Update verification level** page, fill in the fields displayed under the **Limits** section: * To limit the amount that clients can deposit per day, specify the maximum allowed value in the **Daily deposit** field. * To limit the amounts that clients can withdraw per day and per month, specify the maximum allowed values in the **Daily withdraw** and **Monthly withdraw** fields. * To set the minimum amount that clients can transfer from their wallets to trading accounts, specify the **Transfer min.** field. It won’t be allowed to transfer amounts that are less than the assigned limit. * To allow clients to withdraw certain amounts without obtaining approvals, specify the maximum allowed amount in the **Auto withdraw** field. The amounts that do not exceed the assigned limit can be withdrawn by clients automatically (without the admin approval). * To set the maximum allowed amount for internal transfer operations per day, specify the **Daily internal transfer** field. If a client wants to make an internal transfer after reaching a specified limit, a request for the internal transfer is created and must be approved by an admin. If a client makes an internal transfer to or from an MT account, the MT platform settings override the **Daily internal transfer** option. If the **Request required for transfer from** and **Request required for transfer to** options are enabled for the MT platform, the **Daily internal transfer** option is ignored, and requests for internal transfers are always created and must be approved by an admin. To apply no limits, enter **-1** in the corresponding field described above. To prohibit clients from making a specific transaction, enter **0** in the corresponding field described above. Click **Save** to apply the changes. **See also** [How to use SumSub](how-to-use-sumsubstance) [How to use ShuftiPro](how-to-use-shuftipro) Managers are users with access to the Back Office who are responsible for organizing work and communicating with clients assigned to them. Newly registered clients are automatically distributed among the existing managers. Before adding a manager, ensure that the relevant user is created on the [System > Users > Users](../../back-office-guide/system/users/users) page, and then proceed to add this user as a manager. To add a manager: Navigate to **Clients** > **Managers**. Click **+Create** in the upper-right page corner. On the **Create manager** page, fill in the following fields: * In the **Email** dropdown, select the email address of the user who has been already registered in the Back Office on the **System** > **Users** > **Users** page. * In the **Name** field, enter the manager's full name. * In the **Phone** field, optionally specify the manager's phone number. * In the **Enabled** dropdown, select **Yes** or **No** to set the manager's profile status. Clients can be assigned only to `Enabled` managers. * In the **Title** field, optionally enter the manager’s title (such as `Mr` or `Mrs`). * In the **Default** dropdown, select: * **Yes** — to set this manager as the default. All new clients will be automatically assigned to this manager, considering country restrictions. * **No** — to keep this manager as non-default. Click **Save** to create the manager profile. ## How to apply country restrictions to a manager [#how-to-apply-country-restrictions-to-a-manager] With country restrictions, clients are automatically assigned to the appropriate managers according to the clients' countries. To apply country restrictions to a manager: Navigate to **Clients** > **Managers**. Select the manager and click **Edit**. On the **Edit manager** page, click the **Actions** button in the upper-right page corner, and then select **Country restrictions** in the dropdown. In the **Restrictions** popup, fill in the following fields: * Set the **Enabled** dropdown to **Yes**. * In the **Type** dropdown, select the rule type: * **Deny only** — the manager can be assigned to all clients, except for those from the selected countries. * **Allow only** — the manager can only be assigned to clients from the specified countries. * In the **Rules** dropdown, select one or more countries to which either the **Deny only** or **Allow only** rule will be applied. Click **Save** to apply the changes. To create user groups and assign to them custom permissions: Navigate to **System** > **Users** > **Groups**. Click **+Create** in the upper-right page corner. In the **Caption** field, enter a name for your group (for example, “Managers”). Grant the required permissions to a user group by selecting the appropriate checkboxes under the **Rights** section. All permissions are categorized into groups that correspond to the main menu items, and listed in alphabetical order. To quickly select all permissions or a particular permission type, click **Check** and select one of the following options: **All**, **View**, **Create**, **Update**, or **Delete**. To unselect all permissions, click **Uncheck all**. Click **Save** to create the user group. You can add new Back Office users, such as admins, only if you have the necessary permissions to manage users. To add a new Back Office user: Navigate to **System** > **Users** > **Users**. Click **+Create** in the upper-right page corner. On the **Create user** page, fill in the following fields: Create user page * In the **Email** field, enter the user's email address. * In the **Password** field, enter a password. You can also generate a secure password by clicking the **Generate** button on the right side of the field. To view the generated password, enable the **Show password** option. * In the **Status** dropdown, select **Enabled**. * In the **Groups** dropdown, select one or more groups in which the new user will be included (for details, refer to [How to add a user group and grant permissions](how-to-add-a-user-group-and-grant-permissions)). The selected groups define the permissions that the new user will have. The **Administrators** group grants all the available permissions to the users included in this group. * In the **Name** field, enter the user’s first and last names. * Select the **Send to email** checkbox to send credentials to the specified user email address. * Select the **Mask data** checkbox to prevent the user from viewing client personal data. With this option enabled, such data as client names, email addresses, and phone numbers will be masked with asterisks (`*`) for this particular Back Office user. Click **Save** to register the new user in the Back Office. For newly registered Back Office users, two-factor authentication (2FA) via email codes is enabled by default. After entering their credentials, users will be prompted to enter verification codes sent to their email addresses when signing in to the Back Office. To enable a language for use in the B2CORE UI or disable it: Navigate to **System** > **Localizations**. Select the language from the list and click **Edit**. To switch on the language, set **Enabled** to **Yes**. To switch off the language, set **Enabled** to **No**. If the selected language is marked as the default one, it can’t be disabled. Click **Save** to apply the changes. To block registration for clients from a specific country: Navigate to **System** > **Countries**. The list of countries available for registration is displayed on the **Countries** page. For a country for which you want to block registration, toggle the **Enabled** switch to an inactive state. In the displayed popup, click **Yes** to confirm the action. The selected country is now unavailable in the Registration form. You can view and change the images displayed in the Back Office. To be able to view and change the Back Office images, you must be assigned the permissions to **View Backend images** and **Edit Backend images**, which can be found under the **System** permission group (for details, refer to [How to add a user group and grant permissions](how-to-add-a-user-group-and-grant-permissions)). To change an image specified for a Back Office element, remove the current image by clicking the **Delete** button, and then add a new one. To add a new image: Navigate to **System** > **Backend images**, and then click the **+Create** button located in the upper-right corner of the page. In the **Type** dropdown, select a Back Office element to which you want to apply a new image. The following options are available: * the main menu logo * the logo on the login page * the background image on the login page Click **Upload an image** and locate the image on your computer to assign to a selected user interface element. Click **Save** to update the specified image. You can modify the workflows of wizards used for configuring procedures that run in the B2CORE UI, such as client registration, authorization, password recovery, and others. To change a wizard workflow: Navigate to **System** > **Wizards**. Select the wizard you want to change and click the **Edit** button. Go to the **Workflow** tab. For wizards that support additional steps, you can add or remove them from the workflow: * To add a step, click **Add**, select the desired step, and click **Save**. * To delete a step, click the **bin** icon in the step row, and then confirm the deletion in the displayed popup. You can also restrict workflow steps for specific countries or client types: * Click the **Actions** button in the step row. * Select the restriction type: **Country restrictions** or **Client type restrictions**. * In the displayed popup, fill in the following fields: * In the **Type** dropdown, select the rule type: * **Allow only** — to allow the use of the step only for specific countries or client types. * **Deny only** — to prohibit the use of the step for specific countries or client types. * In the **Rules** dropdown, select one or more countries, or client types to which you want to apply the selected rule. * Set the **Enabled** option to **Yes** to apply the restriction. Click **Save** to apply the changes to the wizard workflow. To use the **RudderStack** platform with B2CORE and collect data on various events in the B2CORE UI, configure a connection to RudderStack. Before configuring a connection in the Back Office, you must have signed up for RudderStack and have an active account with the configured *sources*, which are places from which event data will be collected, and *destinations*, which are the platforms where you want to send your event data for analytics. You can consult the official [RudderStack documentation](https://www.rudderstack.com/docs/) or contact their support in case you have any questions. To configure a connection in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In **Name** field, enter a name that you want to use for the connection. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office. * In the **Provider** dropdown, select **RudderStack**. Click **Save** to create the connection. Find the newly created connection in the list and click **Edit**. On the **Edit connection** page, fill in the following fields: * In the **Data Plane URL** field, specify the URL for routing and processing events. * In the **Write Key** field, specify the unique identifier of your source. RudderStack uses this key to send events from a source to the specified destination. You can find these parameters on your RudderStack Homepage. RudderStack Homepage * In the **Enabled** dropdown, select **Yes**. Click **Save** to apply the changes. To use the **Zendesk** support platform with B2CORE, configure a connection to Zendesk. Once configured, clients can click the **HelpDesk** menu in the B2CORE UI or [mobile app](../../release-notes/release-notes-mobile) to be redirected to the Zendesk interface via single sign-on (SSO), eliminating the need for additional authentication. In Zendesk, they can submit and manage tickets, access live chat support, and utilize AI-powered features to receive assistance. Before configuring a connection in the Back Office, you must have signed up for Zendesk and have an active account with the configured SSO options. You can consult the official [Zendesk documentation](https://support.zendesk.com/hc/en-us) or contact their support in case you have any questions. To configure a connection in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In **Name** field, enter a unique name for the connection. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **Zendesk**. Click **Save** to create the connection. Find the newly created connection in the list and click **Edit**. On the **Edit connection** page, fill in the following fields: ### Common settings [#common-settings] * In the **Zendesk URL** field, specify your Zendesk URL, such as: `https://{your-subdomain}.zendesk.com` This URL is used by Zendesk to call API methods to verify JSON Web Tokens (JWTs) required for single sign-on from your mobile app. Ensure that this URL is also entered and saved in your Zendesk **Admin Center** while configuring SSO for the mobile SDK in **Channels** > **Mobile SDK** menu. Zendesk URL in Channels > Mobile SDK * In the **SSO Redirect URL (brand url)** field, specify the URL of the Zendesk page to which your clients will be redirected after successful authentication via single sign-on, such as: `https://{your-subdomain}.zendesk.com/hc/en-us` ### SSO Settings [#sso-settings] * In **SSO Shared Secret** field, specify the secret from Zendesk, which is used to generate JWTs required for single sign-on. This secret is generated in the Zendesk **Admin Center** during SSO configuration and must be copied from there. Shared secret in Zendesk ### Mobile SDK Settings [#mobile-sdk-settings] These settings are required only if you have a [mobile app](../../release-notes/release-notes-mobile) and need to enable SSO between your app and Zendesk. If you don't have the mobile app, these settings aren't necessary. * In the **App ID** field, specify the app identifier from Zendesk. * In the **Client ID** field, specify the client identifier from Zendesk. * In the **SDK JWT Secret** field, specify the secret generated in Zendesk, which is used to sign JWTs sent from B2CORE to Zendesk for single sign-on. All these values are generated in your Zendesk **Admin Center** when configuring SSO for the mobile SDK in the **Channels** > **Mobile SDK** menu and must be copied from there. ### Mobile SDK in Zendesk [#mobile-sdk-in-zendesk] In Zendesk **Admin Center** in **Channels** > **Mobile SDK**, insert the **JWT URL**. The URL must have the following format: `https://{your-Back-Office-URL}/api/v2/my/helpdesk/zendesk/auth/mobile/exchange` Make sure to replace `{your-Back-Office-URL}` with the domain of your B2CORE Back Office. Mobile SDK settings in Zendesk Once the necessary settings are specified in the B2CORE Back Office, select **Yes** in the **Enabled** dropdown. Click **Save** to apply the changes. If you previously used **SupportPal** as your help desk platform, refer to [How to switch from SupportPal to Zendesk](how-to-switch-from-supportpal-to-zendesk) to make sure that your clients submit new tickets only through Zendesk but can still view their SupportPal ticket history. ## How to configure the Zendesk chatbot [#how-to-configure-the-zendesk-chatbot] To use the Zendesk chatbot in B2CORE, you need to configure the widget and authentication settings in your Zendesk account. The chatbot will be displayed in the B2CORE UI, allowing clients to ask questions, quickly find the information that they need, report issues, and seamlessly switch to a live operator, all without requiring additional authentication. To set up the chatbot widget and generate the required credentials: In Zendesk Admin Center, navigate to **Channels** > **Messaging and social** > **Messaging**. Add a web widget. Copy the widget code snippet to get the **Widget Key**, which is the UUID-style identifier. The key will be required when configuring the widget settings in the B2CORE Back Office. To set up automatic authentication for clients interacting with the chatbot, navigate to **Account** > **Security** > **End user authentication**. On the **Messaging** tab, click **Create key**. Copy the values from the **Messaging Auth ID** and **Messaging Auth Shared Secret** fields. These values will be required when configuring the widget settings in the B2CORE Back Office. ## How to configure chatbot settings in the B2CORE Back Office [#how-to-configure-chatbot-settings-in-the-b2core-back-office] After configuring the chatbot in Zendesk, proceed with the respective settings in the B2CORE Back Office to enable the bot in the B2CORE UI: In the B2CORE Back Office, navigate to **System** > **External connections**. Find the existing Zendesk connection in the list and click **Edit**. On the **Edit connection** page, fill in the following fields: ### Widget Settings [#widget-settings] * In the **Enable Widget on WEB** dropdown, select **Yes** to enable displaying the chatbot in the B2CORE UI and mobile app. * In the **Widget ID** field, enter the **Widget Key** you copied from Zendesk. * In the **Widget Auth Key ID** field, enter the **Messaging Auth ID** retrieved from Zendesk. * In the **Widget Auth Key Secret** field, enter the **Messaging Auth Shared Secret** retrieved from Zendesk. Click **Save** to apply the changes. The Zendesk chatbot is now displayed in the B2CORE UI, enabling clients to quickly access support and resolve their questions. Email templates are used to notify clients and [Back Office users](../../back-office-guide/system/users/users) about specific system events. You can configure custom email templates instead of pre-configured ones. For a full list of supported event types and related pre-configured email templates, refer to [Email template types](../../back-office-guide/references/email-template-types). Some types are used to notify clients, while others are for [Back Office users](../../back-office-guide/system/users/users). To configure an email template: Navigate to **System** > **Templates** > **Email** > **Templates**. Click **+Create** in the upper-right page corner. On the **Create email template** page, fill in the following fields: * In the **Type** dropdown, select the [event type](../../back-office-guide/references/email-template-types) for which the email template will be used. For example, `accountCreated`: when a wallet or trading account (such as on the **MetaTrader** platform) is created for a client, this template will be used to send an email notification. * In the **Locale** dropdown, select the language of the email template. * In the **Enabled** dropdown, select **Yes**. * In the **Subject** field, enter the subject of the email template. * In the **Email template** field, specify the HTML layout for the email template. Click **Preview** to render the HTML and check how the template will appear in an email, ensuring there are no layout errors. If the template is enabled, it can be saved only after it is successfully rendered and displayed in the preview area. Click **Save** to create the template. The template will be used to send email notifications for the selected event type. ## How to add download links for trading terminals to email templates [#how-to-add-download-links-for-trading-terminals-to-email-templates] Adding download links for trading terminals to email templates can be helpful when sending account creation emails to clients, allowing them to easily access the required terminals. To add the download links: Navigate to **System** > **Templates** > **Email** > **Templates**. Select the required template, such as `accountCreated`, `cTraderAccountCreated`, `MatchTraderClientCreated`, or others. These templates are used to send emails to clients when accounts on the respective platforms are created. Including download links for the corresponding terminals may be useful. Click the **Edit** button to open the template details. In the **Email template** field, add the download links in HTML format. Example: ```html For Web: Open
For Windows: Download
For Mac: Download
For Linux: Download
For iOS: Download
For Android: Download
``` If using the above example, make sure to replace `{link-to-web-trading-terminal}` and `{download-link}` with the actual URLs for each trading terminal, and `{color-code}` with the desired color code for the links. You can also adjust other styles, such as `text-decoration`, as needed to match your email template design.
Click **Preview** to render the HTML and check how the template will appear in the email, ensuring there are no layout errors. If the template is enabled, it can be saved only after it is successfully rendered and displayed in the preview area. Click **Save** to apply the changes.
The email template will include the trading terminal download links, making it easier for clients to access the platforms directly from their notifications. It's possible to configure the settings in the Back Office to display download links for iOS and Android apps, along with download instructions, in the B2CORE UI. Once configured, the download button will appear on the **Sign In** page, enabling clients to download the apps without needing to sign in. Additionally, the button will be displayed at the top of the **Dashboard** after clients sign in. To configure the mobile app download settings: Navigate to **System** > **Settings**. In the **Mobile** section, configure the following settings: * In **Mobile application** dropdown, select the platforms for which you want to provide mobile app download links: * **iOS** — select this option to provide a link for downloading your iOS app from the Apple Store. * **Android** — select this option to provide a link for downloading your Android app from Google Play. * **Android APK Registry** — select this option to provide a link for downloading the Android APK. If your mobile apps for both iOS and Android are live, you can select several options. * If you selected **iOS**, specify the URL for downloading the iOS app from the Apple Store in the **iOS URL** field. * If you selected **Android**, specify the URL for downloading the Android app from Google Play in the **Android URL** field. * If you selected **Android APK Registry**, specify the universally unique identifier (UUID) of your Android APK in the **Android APK Registry ID** field. This UUID is used to generate the download link for the Android APK. If you don't have the UUID, contact your account manager for assistance. Click **Save** to apply the changes. Below is the example that shows the mobile app download button displayed on the **Sign In** page of the B2CORE UI. The download options for iOS and Android Upon clicking the button, the options for downloading the apps for the respective platforms are displayed. The download button for mobile apps on the Sign In page For Android, the APK installation instructions are detailed below. The Android APK installation steps Create bulk actions to perform specific actions in respect to multiple clients at a time. To create a bulk action: Navigate to **System** > **Bulk actions**. Click **+Create** in the upper-right corner of the page. From the **Action** drop-down list, select an action type that you want to perform as a bulk action. The following action types are available: * ban clients * change a client type * change an internal client type * change a verification level * make a deposit * zero out balances In the **Name** field, enter a name for your bulk action. In the **Description** field, enter a description for your bulk action. Click **Upload csv file** and select a CSV file that has previously been downloaded to your computer, containing the email addresses of the clients to whom the bulk action applies (for details, refer to [How to export a CSV file with email addresses](how-to-export-a-csv-file-with-email-addresses)). Depending on the bulk action type that you selected, additional fields may be displayed that you need to fill in. Click **Save** to apply the changes. The bulk action has been created and executed. To verify whether it has been executed successfully, check the **Status** column on the **Bulk actions** page. To create a request resolution type: Navigate to **System** > **Requests** > **Resolutions Types**. Click +**Create**. Fill out the form: * Set the **Name** of the type (for example, `financial`). * Set the **Caption** — the title of the type that will be displayed in the resolution types drop-down list (for example, `Financial Rejection`). * Set **Enabled** to **Yes**. Click **Save** to create the resolution type. To create a request resolution: Navigate to **System** > **Requests** > **Resolutions**. Click **+Create**. Fill out the form: * Set the **Name** of the resolution (for example, `suspicious`). * Set the **Caption** — the title of the resolution that will be displayed in the resolutions drop-down list (for example, `Suspicious Transaction`). * Set **Enabled** to **Yes**. * Select **Resolution type** from the list. The resolution type must be previously created in the system (for details, refer to [How to create a request resolution type](how-to-create-a-request-resolution-type)). Click **Save** to create the resolution. This guide is for brokers who want their clients to be able to log in or register using their Google or Apple account, in addition to (or instead of) email and password. It explains what you need to prepare on your side and what happens once you hand the information to B2Broker. This is a **joint setup**: you own the Google/Apple developer accounts and credentials, B2Broker wires them into your B2CORE instance. Nothing is enabled until both sides are done. This feature has a **one-time setup fee**. Contact your account manager or our support team to confirm the fee and availability before requesting access. ## What you get [#what-you-get] * A "Sign in with Google" and/or "Sign in with Apple" button on your login and registration pages. * New users who sign up this way are created automatically — no separate registration form. * Users who already have a password account can also link a Google/Apple account later (linking is by email address). ## Before you start [#before-you-start] * Confirm with your B2Broker account manager that social sign-in is available for your B2CORE instance. This depends on you already running on the current identity platform. * Decide **which providers** you want: Google only, Apple only, or both. Apple requires a paid Apple Developer account, so plan for that if you want it. * You will need someone on your side with access to your company's Google Cloud / Apple Developer accounts (or the ability to create new ones). ## What you need to prepare — Google [#what-you-need-to-prepare--google] 1. **A Google Cloud project.** Use an existing company project or create a new one dedicated to sign-in. 2. **OAuth consent screen.** Configure: * App name, support email, logo (this is what your users will see on the Google consent prompt). * Scopes: `openid`, `email`, `profile`. * Publishing status: while the app is in **Testing**, only explicitly added test users can sign in — anyone else gets `access_denied`. Move the app to **Published** before go-live. 3. **An OAuth 2.0 Client ID** (application type: **Web application**). * We will give you the exact **Authorized redirect URI** to register — it is tied to your B2CORE instance's hostname and looks like: ``` https:///srvsz/auth/clients/v1/self-service/methods/oidc/callback/google ``` * Add the same host (no path) as an **Authorized JavaScript origin**. 4. Copy the resulting **Client ID** and **Client secret**. ## What you need to prepare — Apple [#what-you-need-to-prepare--apple] Apple's setup has more moving parts and requires an active [Apple Developer Program](https://developer.apple.com/programs/) membership. 1. **An App ID** with the **Sign In with Apple** capability enabled (reuse an existing App ID if you have one, or create a new one). 2. **A Services ID** — this is the actual OAuth client Apple uses. When configuring it: * **Domain**: your B2CORE instance's API host (no scheme, no path). * **Return URL**: the Apple callback URL we provide, in the same shape as Google's above but ending in `/apple`. 3. **A "Sign in with Apple" private key (`.p8` file)** generated under Apple's **Keys** section, with the Sign In with Apple capability linked to your App ID. This file is only downloadable once — save it immediately somewhere safe. 4. Your **Team ID** (10-character alphanumeric, shown in your Apple Developer account header). 5. The **Key ID** of the key you created in step 3. You'll end up with five pieces of information: Services ID (client ID), Team ID, Key ID, the `.p8` private key file, and — unlike Google — there is no separate "client secret" to copy; Apple's secret is derived from the other four. ## Handing credentials to B2Broker [#handing-credentials-to-b2broker] Send us: * Google: Client ID + Client secret. * Apple: Services ID, Team ID, Key ID, and the `.p8` private key file. **Treat these as secrets** — especially the Apple private key. Send them through a secure channel your account manager provides (a secrets share link or an encrypted attachment), not plain email or chat. We'll confirm once they're stored securely on our side and let you know when the buttons are live. ## What happens next [#what-happens-next] Once we have your credentials, we enable the feature on your B2CORE instance and deploy. This typically causes a brief restart of the login service — no downtime is expected, but avoid scheduling it during peak hours. ## Testing after go-live [#testing-after-go-live] 1. Open your login page — you should see the Google/Apple button(s). 2. Sign in with a real account for each enabled provider. 3. Confirm the user lands signed in, and that their email/name look correct in your admin panel. 4. If Google is still in **Testing** mode, only test users you added to the consent screen will be able to sign in — everyone else will see `access_denied`. Publish the app before advertising the feature to real users. ## Good to know [#good-to-know] **Apple only shares the user's name and email on their very first consent.** If a user revokes your app in their Apple ID settings and signs in again later, Apple will only send back an anonymous identifier — the name may be missing from then on. This is an Apple limitation, not a bug on our side. **Apple emails may be "private relay" addresses** (`...@privaterelay.appleid.com`). These are real, working addresses — just routed through Apple. Treat them as the user's canonical email; they will not automatically match an existing password account that used the user's real email. **Google requires a verified email.** If a Google account's email isn't verified, sign-in will fail by design — this protects your user base from unverified identities. **Provider IDs are fixed** (`google`, `apple`). If you ever need to rotate credentials (for example, a leaked secret), contact B2Broker — we can update them without changing the login URLs your users already use. ## Questions / support [#questions--support] Reach out to your B2Broker account manager or support channel with your broker name and which provider(s) you're setting up. Various types of data can be exported as CSV files. This article describes how to export a CSV file containing your client email addresses. Such CSV files may be used to perform bulk actions, identifying the clients to whom bulk actions will apply. Navigate to **Clients** > **General**. You can apply filters to a clients list to display specific records that you want to export. Click **Column visibility** in the upper-right page corner. Hide all the columns except for the **Email** column. Click **Export** in the upper-right page corner. Select the CSV format. Select an export method. You can either send a CSV file to your email address or download it to your computer. The exported CSV file containing email addresses can be used to create a bulk action. To do this, open the file and remove the **Email** column header so that only email addresses are listed in the file. You can import to the Back Office data about clients, their accounts, and [IB programs](../../back-office-guide/introducing-brokers) from a CSV or TSV file. To import data: Navigate to **System** > **Import Data**. Click **+Create** in the upper-right page corner. In the **Title** field, enter a name that you want to assign to your data import operation. In the **Description** field, optionally enter a short description for your import operation. In the **Action** dropdown, select one of the following options: * `import-users` — to import client-related data * `import-accounts` — to import data about accounts for existing clients * `import-ibs` — to import IB-related data for existing clients Below, you’ll find the requirements for the necessary data and formats for each import option. In the **Delimiter** dropdown, select a delimiter character used to separate data contained in a CSV or TSV file (such as `comma`, `semicolon`, or `tab`). Click **Browse** and select a CSV or TSV file for data import. Click **Save** to start the import operation. ### The `import-users` option: [#the-import-users-option] To successfully import client-related data, a CSV or TSV file must include the Email, Last name, and First name headers. If any of these required fields are missing, the import operation will fail. Download the `template_import_users.csv` file that you can use to verify that your CSV file includes the correct headers and data formats. You can use a semicolon or tab as a delimiter instead of a comma in your file. During data import: * If an email address exists in B2CORE, client data will updated with the data from a CSV or TSV file. * If an email address doesn’t exist in B2CORE, a new client profile will be added to it. ### The `import-accounts` option: [#the-import-accounts-option] To successfully import data about client accounts, a CSV or TSV file must include the Email, Account number, Product ID, and Product currency headers. If any of these required fields are missing, the import operation will fail. Download the `template_import_accounts.csv` file that you can use to verify that your CSV file includes the correct headers and data formats. You can use a semicolon or tab as a delimiter instead of a comma in your file. During data import: * If an email address exists in B2CORE, data about client accounts will be added to it. * If an email address doesn’t exist in B2CORE, data about accounts won't be imported. ### The `import-ibs` option: [#the-import-ibs-option] The IB-related data can be imported only from a CSV file. To successfully import this type of data, a CSV file must include the IB Email, Client Email, and IB Type ID headers. If any of these required fields are missing, the import operation will fail. Download the `template_import_ibs.csv` file that you can use to verify that your CSV file includes the correct headers and data formats. You can use a semicolon or tab as a delimiter instead of a comma in your file. During data import: * If an email address specified as **IB Email** exists in B2CORE, this client will be added as an IB partner and the IB-related data will be imported for that client. * If an email address specified as **IB Email** doesn’t exist in B2CORE, the IB-related data won't be imported. After the import operation is finished, you can check its status and click the **Edit** button located in the import operation row to view the **Log messages** and **Error messages** fields listing the details about the records that were successfully imported as well as errors that occurred during import. You can import to the Back Office the data about [user groups](../../back-office-guide/system/users/#groups), including the data about permissions granted to each group, from a JSON file. To import the data about Back Office user groups: Navigate to **System** > **Users** > **Groups**. Click the **Import** button located in the upper-right corner of the page. In the **Import groups** popup, click **Browse** and navigate to a JSON file containing the data that you want to import. To choose how to import the data if a file lists the same user group names as that of the existing groups, select one of the following options in the **Replace** dropdown: * **Enabled** — to replace the existing user groups with the imported user groups. * **Disabled** — to add the imported user groups to the existing ones. In this case, incremental postfixes (such as (1), (2) and so on) are added to the names of the imported user groups. If their names don’t match the existing user group names, such groups are appended to the list of Back Office user groups. Click **Save** to import the data. Use integration with [Salesforce](https://salesforce.com/) to automatically sync client data from B2CORE to Salesforce. This integration helps centralize client information, streamline internal processes, and support sales and marketing workflows within your Salesforce environment. This integration currently supports one-way data transfer from B2CORE to Salesforce; reverse syncing isn’t available. Before proceeding with the instructions, you must sign up for Salesforce and create an **External client app**, which enables external services to interact with the Salesforce API. If you have any questions, consult the official [Salesforce Help Center](https://help.salesforce.com/) or contact their support team. ## Create an External client app in Salesforce [#create-an-external-client-app-in-salesforce] To create an External client app in Salesforce: In Salesforce, go to **Settings** > **Setup**. In the **Setup** section, enter **App Manager** in the search box, and then click it in the search results. Click **New External Client App**. In the **Basic Information** section, fill in the following fields: * **External client app name** — specify the name of your B2CORE instance. If you have several instances, use different names when configuring External client apps for each one in Salesforce. * **API name** — auto-filled based on the app name. * **Contact email** — enter the email address of the contact user. * **Distribution site** — select **Local**. This setting determines who can view and authorize in the created External client app. **Local** means that it's accessible only within your organization. Expand the **API (Enable OAuth Settings)** section and select the **Enable OAuth** checkbox. * In the **Callback URL**, specify `https://login.salesforce.com/services/oauth2/success`. * In the **OAuth scopes**, select the required permissions. The minimum set for API access is: * Manage user data via APIs (api) * Perform requests at any time (refresh\_token, offline\_access) * Access the Salesforce API Platform (sfap\_api) * Select the **Introspect all tokens** checkbox (recommended). This allows the resource server to validate access tokens without calling Salesforce for every request. In the **Flow Enablement** section, select **Enable Client Credentials Flow**. In the **Security** section, select the following: * Enable Client Credentials Flow * Require secret for Web Server Flow * Require secret for Refresh Token Flow * Require Proof Key for Code Exchange (PKCE) extension for Supported Authorization Flows * Issue JWT Web Token (JWT)-based access tokens for named users Click **Save** to create the app. After creating the app, Salesforce generates the **Consumer key** and **Consumer secret**, which serve as the app’s identifier and secret key. You can find them by opening the app card, navigating to **Settings** > **OAuth Settings**, and clicking the **Consumer Key and Secret** button. The **Consumer key** and **Consumer secret** are required for configuring the connection to Salesforce in the B2CORE Back Office. ## Further External client app configuration [#further-external-client-app-configuration] After creating your External client app, proceed with the additional configuration steps: In Salesforce, go to **Setup** > **Users** > **Users** and find the contact user specified during your **External client app** registration. Open the user’s card and in the **Permission set assignments** section, add the **API Enabled permission**. Copy the name from the **Username** field. Go to **Setup** > **External Client Apps** > **External Client App Manager**, and open your app card. In the app card, go to **Policies** > **OAuth Policies** > **OAuth Flows and External Client App Enhancements**, select the checkbox **Enable Client Credentials Flow** and enter the previously copied username. In **Policies** > **OAuth Policies** > **App Authorization**, select **Expire refresh token after specific time** and fill in the following parameters: * **Refresh Token Validity Period** — set to `365`. * **Refresh Token Validity Unit** — select `Days`. * **IP Relaxation** — select `Enforce IP restrictions`. * **Named User JWT-Based Access Token Settings** — select `Set app-specific token timeout (1 Hour)`. Click **Save** to apply the changes. ## Get your Salesforce domain [#get-your-salesforce-domain] In Salesforce, go to **Setup** > **Settings** > **Company Settings** > **My Domain**. Copy the value from the **Current My Domain URL** field. The Salesforce domain is required for configuring the connection to Salesforce in the B2CORE Back Office. ## How to configure a connection to Salesforce in the B2CORE Back Office [#how-to-configure-a-connection-to-salesforce-in-the-b2core-back-office] To configure a connection to Salesforce in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **Salesforce**. Click **Save** to create the connection. The **Salesforce** connection will appear in the list of external connections. Click **Edit** to enter the connection details and complete the following fields: * In the **Domain URL** field, provide the URL of your Salesforce instance, such as: `https://{your-domain}.my.salesforce.com` The domain URL can be found in Salesforce by navigating to **Setup** > **Settings** > **Company Settings** > **My Domain**. * In the **Consumer key** field, specify the consumer key generated by Salesforce after creating your **External client app**. * In the **Consumer secret** field, specify the consumer secret generated in the same Salesforce Connected App. The secret is used together with the **Consumer Key** to authenticate API requests. Both the **Consumer key** and **Consumer secret** can be found in the Salesforce app card by navigating to **Settings** > **OAuth Settings** and clicking the **Consumer Key and Secret** button. * In the **Company (applied to all new leads)** field, enter the company name that should appear in Salesforce when creating new lead records, which are the Salesforce records created for each client synced from B2CORE. This field is required for Salesforce. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. After configuring the connection, all clients listed under **Clients** > **General** in the B2CORE Back Office will be automatically synced with Salesforce, where each client is added as a separate lead record. Any further updates to client personal details will also be synced with Salesforce. ## Overview of client data synced with Salesforce [#overview-of-client-data-synced-with-salesforce] The following required and optional client fields are synced from B2CORE to Salesforce in lead records: ### Required fields [#required-fields] The following required client fields are always synced from B2CORE to Salesforce: * **Last name** — if not specified, `Undefined` is sent to Salesforce. * **Company** — the company name specified in the **Company (applied to all new leads)** field of the external connection configured in the B2CORE Back Office is sent to Salesforce. ### Optional fields [#optional-fields] The following optional fields, which can be useful for business processes, are synced from B2CORE to Salesforce if they are specified in the client details in the B2CORE Back Office: * **First name** * **Middle name** * **Email** * **City** * **State** * **Address** * **Postal code** * **Country** and **Country code (ISO)** * **Phone** — if multiple phone numbers are specified for a client in the B2CORE Back Office, the confirmed number is sent to Salesforce; if none is confirmed, the most recently updated number is used. ## How to add custom fields for syncing from B2CORE to Salesforce [#how-to-add-custom-fields-for-syncing-from-b2core-to-salesforce] You can sync additional fields from B2CORE to Salesforce, such as a client’s **Status**, **Verification level**, and **Client type** to reflect them in lead records in Salesforce. In **Salesforce**, add these fields: Sign in to Salesforce. Go to **Setup** > **Object Manger**. Select the **Lead** object. In the object details, select **Fields & Relationships** and click **New**. Select the filed type, such as **Text**. Enter the **Field Label**. The **Field Name** will be auto-filled based on the label. If needed, you can specify additional field parameters. Refer to the [Salesforce Help Center](https://help.salesforce.com/) for more information. Save the changes to add the new field to the object. In the **B2CORE Back Office**, set up field mapping: Navigate to **System** > **External connections**. Find the connection configured for Salesforce and click **Edit** to open the connection details. Set up the field mapping by selecting the corresponding fields created in Salesforce for **Status**, **Client type**, and **Verification level**. Set up field mapping Click **Save** to apply the changes. Once the fields are added and mapped, the client’s **Status**, **Client type**, and **Verification level** are automatically synced from B2CORE and displayed in lead records in Salesforce. If one or more fields aren't mapped, they won't be synced to Salesforce. [Amplitude](https://amplitude.com/) is an event-based analytics platform that can be configured to receive data about client activity in the B2CORE UI, **iOS**, and **Android** apps. It provides insights into engagement, retention, and financial results, helping you evaluate performance and improve your services. ## Key concepts in Amplitude [#key-concepts-in-amplitude] In Amplitude, **events** represent actions that clients perform in B2CORE, such as sign-ups, sign-ins, deposits, withdrawals, wallet creation, and many others. Each event may include **event properties** (for example, platform name, amount, currency, or others) which provide context for deeper analysis. By tracking events, you can better understand client behavior and evaluate how they interact with the B2CORE UI, iOS, and Android apps. **Default Amplitude Events** Amplitude provides a set of default events, such as **Start Session**, **End Session**, and others. These events are marked with the Amplitude logo. **B2CORE-specific events** B2CORE offers a set of pre-defined events, such as **Deposit page clicked**, **Deposit submitted**, **Verification started**, **Verification submitted**, **Wallet created**, **Feedback**, and others. These events start tracking automatically once Amplitude is connected to your B2CORE. The full list of B2CORE-specific events available for tracking is provided in the document **Tracking B2CORE Events with Amplitude**, which can be requested via your account manager. ## Sign up for Amplitude [#sign-up-for-amplitude] Sign up for Amplitude on your own by following the official [Amplitude documentation](https://amplitude.com/docs). You can start with the free version. If you have any questions, contact their support team. ## Create a project and sources in Amplitude [#create-a-project-and-sources-in-amplitude] You should create an **account** for your organization in Amplitude, then create a **project** and add **sources** that represent the origin of the data sent to Amplitude (for example, iOS, Android, Web, or Backend). Sources are added using the appropriate [Amplitude SDK](https://amplitude.com/docs/sdks/analytics) for each platform. Amplitude sources After adding sources, share the generated API keys with B2BROKER so we can complete the SDK setup for you. This setup enables event data from your B2CORE to be sent to Amplitude. ## Check incoming events for Amplitude tracking [#check-incoming-events-for-amplitude-tracking] Once sources are configured and your Amplitude project starts receiving data from B2CORE, all received events are collected in **Data** > **Events**, along with their event properties in **Data** > **Properties**. You must verify incoming events with the `Unexpected` status against the documented events in **Tracking B2CORE Events with Amplitude** to understand their meaning and either add the events that you want to track to your Amplitude plan or delete the ones you don't need. It's recommended to perform event verification carefully, taking into account your Amplitude plan limits. Some events, such as **Page viewed**, occur very frequently (for example, on every page load) and may quickly consume the monthly event quota, potentially exceeding your Amplitude plan. Add events to your Amplitude tracking plan Events included in your Amplitude tracking plan are marked as `Live` and begin tracked in real time. ## Configure data representation in Amplitude [#configure-data-representation-in-amplitude] In your Amplitude project, access the **Dashboard** on the **Home** page. By default, it includes a set of pre-defined widgets with collected data from the default Amplitude events. You can fully customize the **Dashboard** to display the information and charts that are most relevant to you. Amplitude Home ## Build charts in Amplitude [#build-charts-in-amplitude] Charts in Amplitude turn raw event data into visual insights about how clients interact with B2CORE. Each chart is based on the events you track, enabling you to monitor engagement, conversion, retention, and user distribution. This makes it easier to understand client behavior and improve your services. To create a chart, click **Create** > **Charts** and select the desired chart type. For more details on working with charts, see the official [Amplitude documentation](https://amplitude.com/docs). Below are several examples of simple charts that you can build in Amplitude. You can add charts to your **Dashboard**, share them, and export data if needed. ### Segmentation chart [#segmentation-chart] The **Segmentation** chart compares or segments your events by event properties over a selected time period. Segmentation chart The chart above shows the number of unique clients who accessed the IB room over the past year, broken down by country. ### Funnel chart [#funnel-chart] The **Funnel** chart helps you understand how clients navigate within the UI and identify potential problem areas where they tend to drop off. A common example of a funnel is analyzing sign-ups and onboarding. Funnel chart The chart above shows the conversion rate from clients who started registration to those who completed it over the past 7 days. ### User composition [#user-composition] The **User Composition** chart provides insights into the structure of your client base. Unlike event-driven analyses, this chart relies on user properties, such as country, language, platform, or account type, rather than client actions. User composition The chart above shows the distribution of registered clients across different countries, helping you understand where your clients come from and how your client base is organized. B2CORE supports embedding third-party web applications directly into the client UI via an iframe. When a custom menu item is configured with the **Iframe** behavior, B2CORE loads your application inside the interface, providing a seamless experience for clients without leaving the platform. This guide covers two aspects: configuring the custom menu item in the B2CORE Back Office, and preparing your application to work correctly inside the B2CORE iframe. ## Prerequisites [#prerequisites] Before proceeding, ensure the following: * Your application is accessible via HTTPS. * You have access to the B2CORE Back Office with the `Update menu` permission (for details, refer to [How to add a user group and grant permissions](how-to-add-a-user-group-and-grant-permissions)). * You are familiar with the [How to add custom menu items](../manage-advertising-options/how-to-add-custom-menu-items) procedure. ## Step 1. Configure your server to allow iframe embedding [#step-1-configure-your-server-to-allow-iframe-embedding] By default, most web servers and frameworks prevent pages from being embedded in iframes on other domains. To allow B2CORE to load your application, you must configure the appropriate HTTP response headers on your server. You need to set **one or both** of the following headers: ### Content-Security-Policy [#content-security-policy] The `Content-Security-Policy` header with the `frame-ancestors` directive controls which origins are allowed to embed your page. Set this header to include your B2CORE instance origin: ``` Content-Security-Policy: frame-ancestors 'self' https://portal.example.com ``` Replace `https://portal.example.com` with the actual origin of the B2CORE UI used by your clients. You can specify multiple origins separated by spaces if your application needs to be embedded across several B2CORE instances. For more information, refer to the [Content-Security-Policy documentation on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy). ### X-Frame-Options [#x-frame-options] The `X-Frame-Options` header is an older mechanism that achieves a similar result. If you use it, set it to `ALLOW-FROM` with your B2CORE origin: ``` X-Frame-Options: ALLOW-FROM https://portal.example.com ``` The `X-Frame-Options: ALLOW-FROM` directive is not supported by all browsers. It is recommended to use the `Content-Security-Policy` header with the `frame-ancestors` directive as the primary mechanism and include `X-Frame-Options` only as a fallback for older clients. For more information, refer to the [X-Frame-Options documentation on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Frame-Options). ## Step 2. Add a custom menu item in the B2CORE Back Office [#step-2-add-a-custom-menu-item-in-the-b2core-back-office] To make your application accessible to clients, add a custom menu item with the iframe behavior: Navigate to **Promotion** > **Menu**. Click the **eye** icon in the **General** row to view the menu tree. Click **+Create** in the upper-right page corner. Fill in the required fields: * In the **Name** field, enter a unique name for the menu item. * In the **Caption** field, enter the label that clients will see in the menu. * In the **External URL** field, specify the URL of your application. * In the **Icon** field, specify the URL of an SVG icon (16x16 px, monochrome, transparent background). * In the **Custom Behavior** dropdown, select **Iframe**. Configure optional restrictions if needed: * To limit visibility to specific verification levels, select the appropriate levels in the **Verification Level Allowance** dropdown. * To limit visibility to specific client types, select the corresponding types in the **Client Type Allowance** dropdown. Enable the **Visible** checkbox to make the item appear in the menu. Click **Save** to add the custom menu item. When clients click this menu item, your application will load inside an iframe within the B2CORE UI. Two other behavior options are available for custom menu items: **Same tab** (opens the URL in the current browser tab) and **New tab** (opens the URL in a new browser tab). The iframe option is the only one that embeds your application within the B2CORE interface. ## Step 3 (optional). Implement the postMessage communication protocol [#step-3-optional-implement-the-postmessage-communication-protocol] If your application needs to identify the authenticated B2CORE user, match the B2CORE UI theme, or follow the language selected by the user, you can implement the `postMessage` communication protocol described below. This step is optional — if your application does not require user authentication, theme synchronization, or language synchronization, you can skip it. ### Message reference [#message-reference] #### Messages from your application to B2CORE [#messages-from-your-application-to-b2core] | Message type | Description | Payload | | ------------------------- | -------------------------------------------------------------------- | ------------------------------------- | | `embed-iframe-ready` | Signals that the iframe has loaded and is ready to receive messages. | `{ type: "embed-iframe-ready" }` | | `embed-request-jwt-token` | Requests a JWT authentication token from B2CORE. | `{ type: "embed-request-jwt-token" }` | #### Messages from B2CORE to your application [#messages-from-b2core-to-your-application] | Message type | Description | Payload | | ----------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | | `embed-theme-change` | Sent whenever the B2CORE UI theme changes (and once immediately after `embed-iframe-ready`). | `{ type: "embed-theme-change", theme: "dark-theme" \| "light-theme" }` | | `embed-language-change` | Sent whenever the B2CORE UI language changes (and once immediately after `embed-iframe-ready`). | `{ type: "embed-language-change", lang: "" }` | | `embed-jwt-token` | Successful response to a token request. | `{ type: "embed-jwt-token", token: "", expiresAt: "" }` | | `embed-jwt-token-error` | Error response when token generation fails. | `{ type: "embed-jwt-token-error", error: "" }` | | `embed-logout` | Sent when the B2CORE user logs out. Any token previously issued to your app is now invalid. | `{ type: "embed-logout" }` | The `lang` field contains a lowercase ISO 639-1 language code (for example, `en`, `de`, `ar`) matching the language currently selected in the B2CORE UI. A JWT token issued via `embed-jwt-token` is bound to the B2CORE user who was signed in at the time it was issued. When that user logs out, B2CORE sends `embed-logout` and the token must no longer be used. Discard any cached token, stop scheduled refreshes, and clear user-specific state on receipt of this message. If a different user then signs in, request a new token with `embed-request-jwt-token` — a fresh token is issued for the new user. ### Communication flow [#communication-flow] The sequence of messages between your application and B2CORE follows this pattern: **Signal readiness.** When your page finishes loading, send the `embed-iframe-ready` message to B2CORE. This tells the host that your application is ready to receive data. **Receive the current theme.** B2CORE responds with `embed-theme-change` containing the current theme (`dark-theme` or `light-theme`). Apply the theme to your UI. You will also receive this message whenever the user switches themes. **Receive the current language.** B2CORE also responds with `embed-language-change` containing the language code currently selected in the B2CORE UI (for example, `en` or `ar`). Apply the corresponding locale to your UI. You will receive this message again whenever the user changes the language. **Request an authentication token.** When you need to identify the current user, send `embed-request-jwt-token`. B2CORE responds with either `embed-jwt-token` (containing the JWT and its expiration time) or `embed-jwt-token-error` if token generation fails. **Refresh the token before expiry.** The JWT has an expiration time provided in the `expiresAt` field (ISO 8601 format). Request a new token before the current one expires to maintain uninterrupted access. **Handle logout.** When the B2CORE user logs out, B2CORE sends `embed-logout`. On receipt, discard the cached token, cancel any scheduled refresh, and clear user-specific state so no data leaks to the next user. If another user signs in afterwards, request a fresh token with `embed-request-jwt-token`. ### Code example [#code-example] A complete JavaScript snippet you can include in your application: ```javascript (function () { const B2CORE_ORIGIN = '*'; // Replace with your B2CORE instance origin for production let currentToken = null; let tokenRefreshTimer = null; // --- Send a message to B2CORE --- function sendToHost(message) { window.parent.postMessage(message, B2CORE_ORIGIN); } // --- Handle incoming messages from B2CORE --- function handleMessage(event) { const data = event.data; if (!data || !data.type) return; switch (data.type) { case 'embed-theme-change': applyTheme(data.theme); break; case 'embed-language-change': applyLanguage(data.lang); break; case 'embed-jwt-token': handleToken(data.token, data.expiresAt); break; case 'embed-jwt-token-error': console.error('Token error from B2Core:', data.error); break; case 'embed-logout': handleLogout(); break; } } // --- Apply theme to your UI --- function applyTheme(theme) { document.documentElement.setAttribute('data-theme', theme); } // --- Apply language to your UI --- function applyLanguage(lang) { document.documentElement.setAttribute('lang', lang); } // --- Handle received JWT token --- function handleToken(token, expiresAt) { currentToken = token; // Schedule a refresh 2 minutes before expiry if (tokenRefreshTimer) { clearTimeout(tokenRefreshTimer); } const refreshIn = new Date(expiresAt).getTime() - Date.now() - 2 * 60 * 1000; if (refreshIn > 0) { tokenRefreshTimer = setTimeout(requestToken, refreshIn); } else { requestToken(); } } // --- Request a JWT token from B2CORE --- function requestToken() { sendToHost({ type: 'embed-request-jwt-token' }); } // --- Handle B2CORE user logout --- function handleLogout() { // The token is bound to the user who just logged out — stop using it. currentToken = null; if (tokenRefreshTimer) { clearTimeout(tokenRefreshTimer); tokenRefreshTimer = null; } // Clear any user-specific state in your app here. } // --- Initialize --- window.addEventListener('message', handleMessage); sendToHost({ type: 'embed-iframe-ready' }); requestToken(); })(); ``` Replace the `B2CORE_ORIGIN` value with the actual origin of your B2CORE instance (for example, `'https://portal.example.com'`) in production. Using `'*'` is acceptable during development only, as it allows any origin to communicate with your application. ### TypeScript type definitions [#typescript-type-definitions] If your application is built with TypeScript, you can use the following type definitions: ```typescript type EmbedTheme = 'dark-theme' | 'light-theme'; // Messages: Your App -> B2CORE interface EmbedIframeReadyMessage { readonly type: 'embed-iframe-ready'; } interface EmbedRequestJwtTokenMessage { readonly type: 'embed-request-jwt-token'; } type EmbedOutboundMessage = EmbedIframeReadyMessage | EmbedRequestJwtTokenMessage; // Messages: B2CORE -> Your App interface EmbedThemeChangeMessage { readonly type: 'embed-theme-change'; readonly theme: EmbedTheme; } interface EmbedLanguageChangeMessage { readonly type: 'embed-language-change'; readonly lang: string; // ISO 639-1 code, e.g. "en", "de", "ar" } interface EmbedJwtTokenMessage { readonly type: 'embed-jwt-token'; readonly token: string; readonly expiresAt: string; // ISO 8601 } interface EmbedJwtTokenErrorMessage { readonly type: 'embed-jwt-token-error'; readonly error: string; } interface EmbedLogoutMessage { readonly type: 'embed-logout'; } type EmbedInboundMessage = | EmbedThemeChangeMessage | EmbedLanguageChangeMessage | EmbedJwtTokenMessage | EmbedJwtTokenErrorMessage | EmbedLogoutMessage; ``` ## Step 4 (optional). Validate the JWT token [#step-4-optional-validate-the-jwt-token] The JWT token issued by B2CORE can be validated against the JSON Web Key Set (JWKS) endpoint exposed by the B2CORE API (Admin Panel backend). This is typically the API/admin domain, not the client-facing UI domain: ``` https://api./.well-known/jwks.json ``` Use this endpoint to retrieve the public keys needed to verify the token signature. Most JWT libraries support JWKS-based validation out of the box. For manual inspection during development, you can decode and verify JWT tokens using the [JWT decoder tool](https://dinochiesa.github.io/jwt). **See also** [How to add custom menu items](../manage-advertising-options/how-to-add-custom-menu-items) [How to configure a menu in the B2CORE UI](../manage-advertising-options/how-to-configure-a-menu-in-the-b2core-ui) [Menu](../../back-office-guide/promotion/menu) To maintain granular access control, you can allow Back Office users, such as admins or managers, to see only specific clients. You should have a Back Office user created and assigned to a particular user group (for details, refer to [How to add an admin user](how-to-add-an-admin-user) and [How to add a user group and grant permissions](how-to-add-a-user-group-and-grant-permissions)). To make a Back Office user see only specific clients: Navigate to **System** > **Users**. Select the user who you want to be able to see only specific clients. Click the **Edit** button located in the user row. In the **Allowed Client Tags** dropdown, select one or more tags identifying the clients that should be visible to the user (for details, refer to [How to assign tags to clients](../manage-clients/how-to-assign-tags-to-clients)). Click **Save** to apply the changes. The selected Back Office user is now allowed to see only the clients who have been assigned specific tags. The following instruction explains how to migrate clients and their related data, including personal information, accounts, and KYC documents, from an external CRM to B2CORE. The migration process includes importing all required client data, with documents uploaded as digital resources and securely linked to the corresponding client profiles in B2CORE. It's strongly recommended to test the import functionality in a sandbox environment before running a full migration with actual client data. This allows you to understand the process, verify data requirements, and identify any limitations, helping to ensure a safe and error-free migration to production. To migrate clients and their related data to B2CORE: ## Import clients and their personal information [#import-clients-and-their-personal-information] Import the client list and required personal information using the `import-users` option, which is available by navigating to **System** > **Import Data**. For details, refer to [How to import client-related data](how-to-import-client-related-data) and specifically the [import-user option](how-to-import-client-related-data#the-import-users-option). ## Import client accounts [#import-client-accounts] Once clients are imported, proceed to import their account information using the `import-accounts` option, which is also available by navigating to **System** > **Import Data**. For details, refer to [How to import client-related data](how-to-import-client-related-data) and specifically the [import-accounts option](how-to-import-client-related-data#the-import-accounts-option). ## Migrate client KYC documents [#migrate-client-kyc-documents] Transfer documents submitted by clients for KYC verification, such as ID cards, passports, or other types, to B2CORE using the B2CORE API, via the endpoint: `POST` `[host]/api/v2/documents` The B2CORE API is restricted and *not* publicly available. Access to the API and its documentation must be requested via a support ticket, including a clear and detailed description of your intended use cases. By following these steps, you ensure a structured, accurate, and secure migration of client data into B2CORE, minimizing errors and preserving data integrity. Since the middle of July 2026, B2CORE provides new registration settings that replace Registration wizards. The new registration settings work together with custom fields, so you can build a registration process tailored to your needs — from a simple form with an email address and a password to a multi-step process with custom fields. The new registration settings are more flexible and easier to maintain than Registration wizards and the Advanced Data step, which were built for tech-savvy users and were harder to support. If you have mobile applications, do not turn off or delete the existing Registration wizards. End users with older app versions installed cannot register without them. We will monitor the usage of the Registration wizards and remove them in a future release, so keep them as is for now. ## Migration overview [#migration-overview] To migrate to the new registration settings, complete the following steps: 1. Optionally, set up custom fields for any information you want to collect beyond the standard profile fields. 2. Create a registration profile in **System** > **Registration** and configure its fields, options, terms, and custom fields. 3. Enable the registration profile and verify the registration process in the B2CORE UI. ## Step 1. Set up custom fields (optional) [#step-1-set-up-custom-fields-optional] Complete this step only if your registration process requires information beyond the standard fields. To collect standard fields alone, such as an email address, a password, and a phone number, skip to [Step 2](#step-2-create-a-registration-profile). To manage custom fields, navigate to **System** > **Custom Fields**. This menu contains two pages: * **Groups** — sections that organize related fields, such as Personal Information, Tax Information, or Economic Profile. * **Fields** — the individual fields, each belonging to a group and defined with a type, a label, and validation rules. Groups page in the System > Custom Fields menu Fields page in the System > Custom Fields menu To add a field, click **+Create** on the **Fields** page, then enter the label, select the group, set validation rules such as **Required**, and, for select fields, add the options that clients choose from. Field creation form with label, group, validation, and options For details on creating and managing custom fields, refer to [Custom fields](../../back-office-guide/system/custom-fields). ## Step 2. Create a registration profile [#step-2-create-a-registration-profile] To create a registration profile: Navigate to **System** > **Registration**. Click **+Create** in the upper-right page corner, then select the profile type to create, such as an individual registration profile. In the **General Settings** section, fill in the following fields: * **Caption** — the profile name displayed to clients as the registration option on the **Sign up** page in the B2CORE UI. * **Status** — set to **Enabled** to make the profile available on the **Sign up** page, or **Disabled** to hide it. * **Register As (Client Type)** — the client type assigned to clients who register through this profile, such as individual or corporate. * **Verification Level** — the initial verification level assigned to clients after registration. In the **Fields Configuration** section, enable the standard fields that clients fill in during registration, such as **Email**, **Password**, **First Name**, **Last Name**, **Country**, and **Phone**, and disable the fields you do not need. In the **Registration Options** section, select the options to apply, such as **Require age 18+**, which validates the **Birthday** field, and **Require email confirmation**. General settings, fields configuration, and registration options for a registration profile In the **Terms & Conditions** section, click **+Add Term** to add each agreement that clients accept during registration, then set its translation key and fallback caption. The fallback caption supports links, so you can point clients to a Customer Agreement or another document. In the **Custom Fields** section, select the custom fields to show in the registration form. * By default, custom fields are displayed on multiple pages, grouped by the groups you set up in Step 1. * To show all custom fields on a single registration step, select **Don't split fields by groups**. To show a custom field only when another field has a specific value, use the **Conditional Display** section. Click **+Add Rule**, select the field to show, the field to check, and the value that triggers it. Both fields must also be selected in the **Custom Fields** section. Terms and conditions, custom fields, and conditional display for a registration profile Click **Save** to create the registration profile. ## Localize fields and terms [#localize-fields-and-terms] Fill in all captions, custom fields, and terms and conditions in English first, then translate them into the languages you support in B2TRANSLATE. To transfer the translatable keys to B2TRANSLATE, click **Copy B2TRANSLATE keys JSON** in the upper-right corner of the registration profile page. The button copies the translatable keys for all custom fields and terms and conditions in the profile as JSON, which you then paste into B2TRANSLATE to translate into every language you need. ## Step 3. Verify the registration process [#step-3-verify-the-registration-process] After you set the profile status to **Enabled**, the corresponding registration option is displayed to clients on the **Sign up** page in the B2CORE UI. Complete a test registration to confirm that the fields, options, and custom fields behave as expected. The values that clients fill in for custom fields are available for each client in the **Clients** > client profile > **Custom fields** tab in the B2CORE Admin Panel, where an admin can also view and edit them. Keep the existing Registration wizards enabled until you no longer support the older mobile app versions. For details on the previous approach, refer to [How to set up the Registration wizard](how-to-set-up-the-registration-wazard). **See also** * [Custom fields](../../back-office-guide/system/custom-fields) These instructions explain how to set up 2FA services in the Back Office, enabling your clients to use Google Authenticator or SMS for 2FA in the B2CORE UI to secure their profiles. ## How to set up 2FA with Google Authenticator [#how-to-set-up-2fa-with-google-authenticator] To provide your clients with the option to use Google Authenticator for 2FA in the B2CORE UI, configure the following settings in the Back Office: Navigate to **System** > **Settings** and configure the following options in the **Two-factor authentication** section: * **Enabled Two-factor auth providers** — select **Google Authenticator** to make this 2FA option available to your clients in the B2Core UI. * **Google authenticator service name** — enter a name (for example, your company name) that will be displayed to clients in the Google Authenticator app. This name can be changed if needed. For more details, refer to [Settings](../../back-office-guide/system/settings). Verify the configuration of the related wizards: * **2FA Google Authenticator** * **2FA Google Auth** Ensure these wizards are enabled and have no restrictions: * Navigate to **System** > **Wizards**. * Find the required wizard and click **Edit**. * Go to the **Workflow** tab. * For each wizard step, click **Actions**, then select **Country restrictions**, **Client type restriction**, or **Jurisdiction restriction**. * In the **Restrictions** popup for each option, confirm that **Enabled** is set to **No**. Clients can now enable and use 2FA via Google Authenticator in the B2CORE UI to secure their profiles. ## How to set up 2FA with SMS [#how-to-set-up-2fa-with-sms] Before setting up 2FA with SMS, make sure that you have added and configured a 2FA SMS provider (such as [Twilio](../manage-communication-platforms/how-to-configure-twilio) or Vonage). To provide your clients with the option to use 2FA via SMS in the B2CORE UI, configure the following settings in the Back Office: Navigate to **System** > **Settings** and configure the following options: In the **Client settings** section: * **Unique phone** — select **Enabled** to ensure phone numbers are unique for each client. In the **Other settings** section: * **Confirmation phone code lifetime** — specify the period, in seconds, during which a verification code sent to a client phone number is valid. * **Sms limit for each recipient** — specify the maximum number of verification code messages that can be requested by a client per day. In the **Two-factor authentication** section: * **Enabled two-factor auth providers** — select **SMS** to make this 2FA option available to your clients in the B2Core UI. For more details, refer to [Settings](../../back-office-guide/system/settings). Create a template for delivering 2FA codes via SMS: * Navigate to **System** > **Templates** > **Sms** > **Confirmation Templates**. * Click **+Create** in the upper-right page corner. * On the **Create template** page, fill in the following fields: * In the **Name** field, enter `default`. * In the **Caption** field, enter a name that you want to use for the template in the Back Office (such as `2FA SMS`). * In the **Template** field, specify the message text, such as: `: Your verification code is %CODE%.` * Click **Save** to save the template. Verify the configuration of the related wizards: * **2FA SMS** * **2FA SMS Auth** * **Phone Confirm** Ensure these wizards are enabled and have no restrictions: * Navigate to **System** > **Wizards**. * Find the required wizard and click **Edit**. * Go to the **Workflow** tab. * For each wizard step, click **Actions**, then select **Country restrictions**, **Client type restriction**, or **Jurisdiction restriction**. * In the **Restrictions** popup for each option, confirm that **Enabled** is set to **No**. Clients can now enable and use 2FA via SMS in the B2CORE UI to secure their profiles. In addition, you can enable client phone number confirmation during registration by delivering verification codes via SMS (for details, refer to [How to add and configure the registration wizard](how-to-set-up-the-registration-wazard/how-to-add-and-configure-the-registration-wizard)). ### How to test operation of 2FA with SMS [#how-to-test-operation-of-2fa-with-sms] After you have configured 2FA with SMS in the Back Office, you can test its operation as follows: Sign in to the B2CORE UI. Click the profile icon in the upper-right page corner, and then select **Security** in the dropdown. In the **Two-factor authentication** section, enable the **SMS Confirmation** option. Enter your phone number in the displayed form. Click **Continue**. If you have received a verification code to a specified phone number, 2FA with SMS operates properly. You can configure a connection to the Apple Push Notification service (APNs) to enable your deployed [iOS app](../../b2core-mobile/deploying-your-ios-app) to send push notifications when the following events occur: * a deposit request is created * a request to update a client's verification level is created * an existing announcement is updated * a HelpDesk response is received To configure a connection to the APNs: Navigate to **System** > **External Connections**. Click **+Create** in the upper-right corner of the page. On the **Create connection** field, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **ApplePushNotification**. Click **Save** to create the connection. The **ApplePushNotification** connection will appear in the list of external connections. Click **Edit** to enter the connection details and complete the following fields: * In the **App key id** field, enter the key identifier of your iOS app. * In the **App team id** field, enter the identifier assigned to your development team after enrolling in the Apple Developer Program. * In the **App bundle id** field, enter the bundle identifier of your iOS app. * In the **Private key content** field, enter your private key required to access and authenticate communication with the APNs. * In the **Production** dropdown, select **Yes** to enable your iOS app to send push notifications. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. Push notifications will now be delivered to clients who have installed and signed in to your iOS app. You can set up event notifications to be sent to [Back Office users](../../back-office-guide/system/users/#users) through the following channels: email, SMS, Slack, or Telegram. ## Prerequisites [#prerequisites] The following prerequisites are required before setting up event notifications: * If you plan to send event notifications through Slack or Telegram, create and configure a corresponding bot, and then specify the bot token in the **Slack bot** or **Telegram bot** field on the **System** > **Settings** page. To learn how to obtain the bot tokens, refer to [How to set up a Slack bot](../manage-communication-platforms/how-to-set-up-a-slack-bot) and [How to set up a Telegram bot](../manage-communication-platforms/how-to-set-up-a-telegram-bot). * If you plan to send event notifications as direct Slack or Telegram messages to Back Office users, specify for each user their Slack and Telegram identifiers in the **Slack chat Id** and **Telegram chat Id** fields on the [Back Office user details page](../../back-office-guide/system/users/#details). To learn how to get a user’s Telegram identifier, refer to [How to get Telegram chat, group and channel identifiers](../manage-communication-platforms/how-to-get-telegram-chat-group-and-channel-identifiers). * Create notification templates for each channel through which you plan to deliver event notifications. To do this, navigate to **System** > **Templates**, and then select a channel for which you want to create templates. To view the examples of email, SMS, Slack, and Telegram templates, refer to[Templates](../../back-office-guide/system/templates/). After fulfilling the prerequisites, set up an event notification as follows: Navigate to **System** > **Event Notifications**, and click **+Create** in the upper-right corner of the page. In the **Event** dropdown, select an event for which you want to trigger notifications when the event occurs (for details, refer to [Event types for triggering event notifications for Back Office users](../../back-office-guide/references/event-types-for-triggering-event-notifications-for-back-office-users)). In the **Description** field, specify a short description for the event notification. In the **Users** field, specify the email addresses of Back Office users that will receive notifications. To add all Back Office users to the list of notification recipients, click **All users**. Enable one or several channels to deliver notifications. The available options: **Email**, **Sms**, **Slack,** and **Telegram**. * After enabling the **Email** or **Sms** option, expand the **Template** dropdown and select a notification template. Email and Sms notification options * After enabling the **Slack** or **Telegram** option, do the following: * Select **Private** to send notifications to the recipients as direct Slack or Telegram messages. The messages are sent to the chats that are specified in the **Slack chat Id** and **Telegram chat Id** fields on the [Back Office user details page](../../back-office-guide/system/users/#details). * Select **Group** to send notifications to a specific group or channel. * In the displayed **Group Id** field, specify the identifier of a group or channel to which notifications will be delivered (for details, refer to [How to get Telegram chat, group, and channel identifiers](../manage-communication-platforms/how-to-get-telegram-chat-group-and-channel-identifiers)). * In the **Template** dropdown, select a notification template. Slack and Telegram notification options In the **Enabled** dropdown, select **Enabled** to send notifications after the selected event occurs. Click **Save** to save the notification settings. When switching from SupportPal to Zendesk, you aim for clients to submit new tickets only through Zendesk but still be able to view their SupportPal ticket history. To prevent clients from submitting new tickets via SupportPal while allowing them to view their existing tickets: Navigate to **System** > **External connections**. Locate the connection with `SupportPal` in the **Provider** column and click **Edit**. On the **Edit connection** page, set the **Read-only** option to **Yes**. Click **Save** to apply the changes. This guide is for brokers who want another application — your own product, a partner's app, or an identity platform like Keycloak — to let users sign in with their existing B2CORE account, instead of building a separate login. B2CORE acts as the **OpenID Connect (OIDC) identity provider**. Your application (the relying party) redirects users to B2CORE to log in, and gets back a token proving who they are. Users authenticate once against their B2CORE identity; they do not create a separate account for your app. This enables **single sign-on (SSO)**: users sign in once with their B2CORE account and gain access to your connected application without a separate login. This feature has a **one-time setup fee**. Contact your account manager or our support team to confirm the fee and availability before requesting access. ## Is this the right fit? [#is-this-the-right-fit] Use this if: * You have a web or mobile app and want a "Sign in with B2CORE" option. * You want to federate B2CORE into another identity system you already run (for example, add B2CORE as an identity provider inside your own Keycloak realm). This is standard OAuth2 / OIDC — any mainstream library or identity platform (Keycloak, Auth0, `oidc-client-ts`, `openid-client`, `go-oidc`, Passport, NextAuth, and others) can consume it, since everything the client needs is published in one discovery document. ## What you need to decide before requesting access [#what-you-need-to-decide-before-requesting-access] Have answers to these ready — your account manager will ask for them when registering your application: | Item | What we need | | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Application name** | A short, human-readable name (for our records and any consent screen). | | **Redirect URI(s)** | The exact URL(s) in your app that should receive the login response, for example `https://app.example.com/auth/callback`. Must be exact — scheme, host, path, and trailing slash all matter. | | **Post-logout redirect URI(s)** | Where users land after logging out, for example `https://app.example.com/`. | | **Scopes** | `openid` is always required. Add `profile` and `email` if you need the user's name/email. Add `offline_access` only if you need long-lived refresh tokens. | ## What you'll receive from us [#what-youll-receive-from-us] Once your application is registered, you'll receive: * A **Client ID** (matches the application name you provided). * A **Client Secret**, delivered through a secure channel. Store it the way you'd store a database password; it does not expire but can be rotated on request (see [Good to know](#good-to-know)). * The OIDC discovery URL for your B2CORE instance: ``` https:///srvsz/auth/hydra/v1/.well-known/openid-configuration ``` Point your OIDC library at this single URL — it will discover the authorization, token, userinfo, JWKS, and logout endpoints on its own. You should not need to hard-code any of the individual endpoints. ## Integrating your application [#integrating-your-application] 1. Configure your OIDC client library with the discovery URL, Client ID, and Client Secret above. 2. Use the **Authorization Code flow with PKCE** if your library supports it (recommended for both web and mobile apps). 3. Request only the scopes you actually need — `openid` at minimum, plus `profile`, `email`, and `offline_access` as applicable. 4. For the user's profile info, call the `/userinfo` endpoint (or decode the `id_token`) rather than trying to read anything out of the `access_token` — the access token is opaque and not meant to be parsed. 5. To log a user out, redirect them to the discovery document's `end_session_endpoint` with `id_token_hint` and your registered `post_logout_redirect_uri`. **Federating instead of integrating a custom app?** If you're adding B2CORE as an identity provider inside another identity platform you run (for example, Keycloak) rather than a custom app, configure it as a generic OpenID Connect provider using the same discovery URL, Client ID, and Client Secret above — the exact steps depend on your platform. Some platforms use a fixed callback URL tied to a provider alias you choose (Keycloak's broker endpoint is one example); if yours does, agree on that alias with us before we register your redirect URIs, since they must match exactly. ## Good to know [#good-to-know] **Logout is local only.** Redirecting to the logout endpoint ends the session for your app; it does not sign the user out of B2CORE itself or any other app they're signed into. There is no cross-app "logout everywhere" today. **Refresh tokens are one-shot.** Each refresh returns a new refresh token that replaces the previous one — don't reuse an old one after refreshing. **Redirect URIs must match exactly.** Add any local/dev URLs you need during testing to your initial request; changing them later means contacting us again. **Rotating your Client Secret** requires contacting B2Broker support. There is a short window between us generating the new secret and you updating your app where logins with the old secret will fail — plan the swap for low-traffic hours. ## Testing after setup [#testing-after-setup] 1. Trigger the login flow from your application (or your identity platform, if federating) and confirm it redirects through B2CORE's login page. 2. Log in with a real B2CORE account and confirm you land back in your app, signed in, with the expected user info. 3. If you requested `offline_access`, test a token refresh. 4. Test the logout flow and confirm it clears your app's session. ## Questions / support [#questions--support] Reach out to your B2Broker account manager or support channel with your broker name and the application details from the [table above](#what-you-need-to-decide-before-requesting-access). ## Problem [#problem] A [Back Office user](../../back-office-guide/system/users/users) encounters the `403 Access Denied` error when attempting to approve or reject client requests. ## Possible reasons [#possible-reasons] This issue occurs if the user lacks the required permissions. Permissions from multiple categories must be granted. ## Solution [#solution] To verify and update the permissions: In the Back Office, navigate to **System** > **Users** > **Groups**. Locate the group in which the Back Office is included. Users in the **Administrators** group are granted all available permissions. This group can’t be removed and its permissions can’t be modified. Click the **Edit** button to open the group details. In the **Right** section, ensure the permission in the following categories are enabled: * **Clients** > **Client's request** — enable the permissions related to the required request types, such as: * `View client's requests with type Deposit` * `Update client's requests with type Deposit` * and other permissions. * **Finance** — enable the permissions related to the required operations. * **System** > **Requests** — enable the following permissions: * `View request resolutions` * `View request resolutions types` Alternatively, a user can be reassigned to the group that already has all the required permissions for managing client requests. Click **Save** to apply the changes. All Back Office users included in this group will now have these permissions. With them enabled, users will be able to approve and reject client requests without encountering the `403 Access Denied` error. The Back Office user must sign out and sign in to the Back Office again for the permissions to take effect. ## Problem [#problem] A client has enabled either **Google Authenticator** or **SMS confirmation** in the **Security** section of the B2CORE UI, but can't receive 2FA codes. ## Possible reasons [#possible-reasons] **Google Authenticator**: * The client has lost access to the app or the device on which it was installed. * The app isn't generating valid codes due to incorrect time synchronization on the device. **SMS confirmation**: * The SMS provider configuration in the Back Office is incomplete or incorrect. * Your SMS provider account doesn't have sufficient balance. * The SMS provider service is temporarily unavailable. * The client’s mobile operator blocks or delays SMS messages. ## Solution [#solution] To fix 2FA issues: ### Verify client 2FA settings [#verify-client-2fa-settings] * In the Back Office, navigate to **Clients** > **General**. * Find the client in the list and click the **Edit** button. * In the client details, go to the **Settings** tab. * In the **2FA** section, check whether one of the 2FA options is enabled for the client. If not, the client must enable 2FA in the **Security** section in the B2CORE UI. 2FA section in client details ### Troubleshoot Google Authenticator [#troubleshoot-google-authenticator] If the client can't generate valid codes or has lost access to the app or device: * You may disable the option on the **Settings** tab in the client details in the Back Office. * Ask the client to re-enable the Google Authenticator 2FA in the **Security** section in the B2CORE UI. Disabling 2FA removes an additional layer of protection. This action should only be performed at the explicit request of the client and under their sole responsibility. ### Troubleshoot SMS confirmation [#troubleshoot-sms-confirmation] * In the Back Office, navigate to **System** > **SMS providers**. * In the provider list, click the **Edit** button for the related provider, such as **Twilio**, to open its configuration details. * In the the **Provider settings** section: * Verify that the credentials are correct. * Ensure that the configuration is enabled. * Confirm that your SMS provider account has a sufficient balance for message delivery. Twilio provider settings If the configuration is correct but issues persist, contact the SMS provider to check for service disruptions or delivery issues with the client’s number. ## Problem [#problem] A client doesn't receive various emails from B2CORE, such as account creation confirmations, deposit notifications, or other system messages. ## Possible reasons [#possible-reasons] This issue may occur due to one or more of the following: * Emails being marked as spam or junk by the client’s email provider. * Incorrect or misconfigured SMTP settings in the B2CORE Back Office. * Emails stuck in the queue. * Missing or misconfigured email templates. * Issues with the email service provider, such as exceeded credits, service delays, or downtime. ## Solution [#solution] To address email delivery issues: ### Check spam and junk folders [#check-spam-and-junk-folders] Ask the client to check their spam or junk folders, especially if the email status is marked as successful in **Mailing** > **System** > **Logs** in the B2CORE Back Office. ### Verify SMTP settings in the B2CORE Back Office [#verify-smtp-settings-in-the-b2core-back-office] If multiple clients experience delivery issues, verify your [SMTP configuration settings](../../how-to-articles/manage-mailing-options/how-to-configure-smtp): * Navigate to **Mailing** > **System** > **Providers**. * Click the **Edit** button for the relevant SMTP configuration to open its details. * Click the **Test connection** button to validate the SMTP settings. * A checkmark on the **Test connection** button means the settings are properly configured. * A red **Test connection** button indicates errors in the settings, which will be listed. * Correct the settings and test again until the SMTP configuration is successful. * Ensure that the configuration is enabled. For details, refer to [How to configure SMTP](../../how-to-articles/manage-mailing-options/how-to-configure-smtp). ### Track an email delivery in the Email log [#track-an-email-delivery-in-the-email-log] * Navigate to **Mailing** > **System** > **Log**. * Locate the required email and check its delivery status: IN PROGRESS, FAIL, or SUCCESS. * For failed emails, check the **Reason** column to identify the issue. ### Check email templates in the B2CORE Back Office [#check-email-templates-in-the-b2core-back-office] * Navigate to **System** > **Templates** > **Email** > **Templates**. * Ensure that the template for the relevant notification exists and is properly configured (for details, refer to [How to configure email templates](../../how-to-articles/manage-system-settings/how-to-configure-email-templates)). * Ensure that the email template is enabled. ### Check the email provider operation [#check-the-email-provider-operation] If emails are delayed, verify that your email service provider is operational and that your account has sufficient credits or an active subscription. ## Problem [#problem] Clients don’t see their initiated transactions, such as deposits, withdrawals, transfers, internal transfers, or exchanges, in the **Transaction History** or the respective sections of the **Funds** menu in the B2CORE UI. ## Possible reasons [#possible-reasons] This issue may occur due to incorrect configuration of [operation types](../../back-office-guide/system/operation-types) in the B2CORE Back Office. ## Solution [#solution] To check the operation type configuration: In the Back Office, navigate to **System** > **Operation types**. Locate the required operation type, for example, `payouts`, which is used to control withdrawal transactions. Ensure that this operation type is enabled; otherwise, clients won’t be able to execute transactions of this type in the B2CORE UI. Click the **Edit** button to open the operation type details. Check the **Allowed operation status** list. If one or more statuses aren't selected, clients won’t see transactions in those statuses in the B2CORE UI. For example, if only the **Done** status is enabled for the `payouts` operation type, clients will see only their withdrawals in the **Done** status, but not those in other statuses. Allowed statuses for the payouts operation type Add all relevant statuses to the **Allowed operation status** list. Click **Save** to apply the changes. ## Problem [#problem] A client encounters the following error when attempting to exchange one currency for another in the B2CORE UI: `Exchange Rate error: the rate for this pair cannot be found, please try another pair`. ## Possible reasons [#possible-reasons] This issue may occurs due to one or more of the following: * One or both currencies aren't added in the B2CORE Back Office. * The selected currency pair isn't configured or is disabled in the B2CORE Back Office. * The exchange rate provider configuration is incomplete or incorrect. ### Solution [#solution] To fix the exchange issue: ### Verify that currencies exist in the B2CORE Back Office [#verify-that-currencies-exist-in-the-b2core-back-office] * Navigate to **Currencies** > **Currencies**. * Ensure that both currencies involved in the exchange are added. If not, add the missing currencies (for details, refer to [How to add a currency](../../how-to-articles/manage-currencies/how-to-add-a-currency)). ### Verify that the currency pair is configured in the B2CORE Back Office [#verify-that-the-currency-pair-is-configured-in-the-b2core-back-office] * Navigate to **Currencies** > **Currency pairs**. * Confirm that the required currency pair is configured and enabled. If not, add or enable it (for details, refer to [How to add an exchange currency pair](../../how-to-articles/manage-currencies/how-to-add-an-exchange-currency-pair)). ### Check that the exchange rate provider is properly configured in the B2CORE Back Office [#check-that-the-exchange-rate-provider-is-properly-configured-in-the-b2core-back-office] * Navigate to **Currencies** > **Rates**. * Locate the provider used to supply rates for the required currency pair, for example B2BINPAY, and click the **Edit** button to open its details. * Verify its configuration and credentials (for details, refer to [How to configure currency exchange rates](../../how-to-articles/manage-currencies/how-to-configure-currency-exchange-rates)). After confirming that currencies, currency pairs, and provider settings are correctly configured, the exchange should work without errors. ## Problem [#problem] You have enabled a new language in the Back Office under **System** > **Localization**, but translations in this language appear blank in the B2CORE UI. ## Possible reasons [#possible-reasons] This issue may occur because the newly enabled language hasn’t yet been added to B2TRANSLATE, which is a tool for managing translations for all supported languages in the B2CORE UI. For more information about B2TRANSLATE, refer to the [product documentation](https://docs.b2translate.b2broker.com/). To complete the steps below, you must be registered on B2TRANSLATE and have access to the project linked to your B2CORE. ## Solution [#solution] To check the language configuration in B2TRANSLATE: In the B2CORE Back Office, navigate to **System** > **Settings** to locate the UUID of the B2TRANSLATE project linked to your B2CORE and copy it. Sign in to B2TRANSLATE. Go to **Languages** and verify if the newly enabled language is available for your B2TRANSLATE projects. Go to **Projects** and find the related project by the UUID copied from the B2CORE Back Office. Click the **pencil** icon to edit the project. In the popup, check the **Languages** dropdown. If the required language is missing, add it. Edit a project in B2TRANSLATE Click **Save** to apply the changes. Configure translations for the added language (for details, refer to [Manage translations](https://docs.b2translate.b2broker.com/user-guide/manage-translations) in the [B2TRANSLATE documentation](https://docs.b2translate.b2broker.com/)). ## Problem [#problem] You've assigned a translation to a key in B2TRANSLATE, but a different translation is displayed for the this key in the B2CORE UI. For more information about B2TRANSLATE, refer to the [product documentation](https://docs.b2translate.b2broker.com/). ## Possible reasons [#possible-reasons] This issue may occur due to one of the following: * **B2TRANSLATE update delay**: updates in B2TRANSLATE may take a few minutes to appear, so the B2CORE UI might show the old translation temporarily. * **Overridden translation in B2CORE Back Office**: another translation may be assigned to this element in the B2CORE Back Office, where the localization option is available. If a field supports localization in the B2CORE Back Office, the localization button appears on its right side. Clicking this button opens a list of available languages where you can specify translations. ## Solution [#solution] To check and remove overridden translations: In the B2CORE Back Office, navigate to the respective menu. For example, **Products** > **Groups**. Click the **Edit** button for the relevant group to open its details. The **Caption** and **Description** fields support localizations. Click the button on the right side of the fields to view if any translations are applied to the fields and remove those that may override the B2TRANSLATE ones. Localization options for fields ## Problem [#problem] After signing in to the B2CORE UI and completing 2FA (if enabled), a client encounters the `404 Not Found` error and sees a blank page. ## Possible reasons [#possible-reasons] This issue may occur if the client doesn't have permissions to view the main menu due to restrictions based on **verification level** or **client type**. ## Solution [#solution] To check and update the main menu visibility settings: In the Back Office, navigate to **Promotion** > **Menu**. Ensure that the toggle in the **Visible** column is enabled for the **General** row. If disabled, clients will remain stuck on the **Sign In** page after entering their credentials. The main menu visibility option Click the **Edit** button in the **General** row to open the details. Check the **Verification level allowance** and **Client type allowance** lists. Make sure the client’s verification level and client type are included in those lists; otherwise, the main menu won't be displayed to that client. Verification level and client type restrictions for the main menu Click **Save** to apply the changes. Click the **eye** icon located in the **General** row to view the menu tree. The menu tree Verify that the **Visible** toggle is enabled for all menu items that you want to display in the main menu. For each menu item, click the **Edit** button and check the **Verification level allowance** and **Client type allowance** lists. Adjust them if necessary. The **Visible** toggle must be enabled for the **General** row and all required menu items. In addition, the **Verification level allowance** and **Client type allowance** lists for both the **General** row and menu items must be properly configured to ensure that clients with the appropriate verification levels and client types can access the menu. ## Problem [#problem] Clients may encounter various sign-in issues when using the mobile app on **iOS** or **Android**, such as: * The **Sign In** button not responding * Sessions closing immediately after sign-in * Valid credentials not being accepted * Biometric options (Face ID or fingerprint) not working ## Possible reasons [#possible-reasons] * Background processes interfering with the app * Expired or corrupted session data * Outdated app version or corrupted installation * Device OS not updated * Cache-related issues (for Android only) ## Solution [#solution] To resolve most sign-in issues: ### Force close and reopen the app [#force-close-and-reopen-the-app] Sometimes background processes cause unexpected issues. Fully close the app from recent apps, and then reopen it. ### Sign out of the app and sign in again [#sign-out-of-the-app-and-sign-in-again] If the session expires quickly, manually sign out of the app (if possible), and then sign in again. ### Reinstall the app [#reinstall-the-app] * Uninstall the app. * Download and reinstall it from **App Store** (iOS) or via the APK file (Android). ### Update the app [#update-the-app] * Check for the latest version in the **App Store** (iOS) or via the APK file (Android). * Install updates to ensure compatibility and bug fixes. ### Check for OS updates [#check-for-os-updates] * On iOS, go to **Settings** > **General** > **Software update**. * On Android, go to **Settings** > **About phone** > **System update** (or **Software updates**, depending on your device). * Install any available updates, as outdated OS versions can cause incompatibility. ### Clear app cache (for Android only) [#clear-app-cache-for-android-only] Go to **Settings** > **Apps** > **\{App name}** > **Storage** > **Clear cache**. ## Problem [#problem] A client can't to create a trading account via the B2CORE UI and encounters an error. ## Possible reasons [#possible-reasons] This issue may occur due to one or more of the following: * The connection to the trading platform is misconfigured or disabled. * The product settings prevent account creation (for example, limits on accounts or deposit requirements). * The product currency group isn't properly mapped to the platform. * Client-specific account limits are exceeded. ## Solution [#solution] To check the required settings related to creating accounts on trading platforms: ### Check the trading platform connection settings [#check-the-trading-platform-connection-settings] * In the Back Office, navigate to **Products** > **Platforms**. * Click the **Edit** button for the relevant platform to open its details. * Click **Test connection** to validate the connection settings. * A checkmark on the **Test connection** button means the connection is properly configured. * A red **Test connection** button indicates errors in the settings, which will be listed. * Correct the settings and test again until the connection is successful. * Ensure the connection is enabled. ### Check the setting of the related product used for creating account on a specific platform [#check-the-setting-of-the-related-product-used-for-creating-account-on-a-specific-platform] * In the Back Office, navigate to **Products** > **Products**. * Click the **Edit** button for the relevant product to open its details. * Review the following fields: * **Max accounts** – the maximum number of accounts a client can create per currency for this product. The client may have exceeded this limit. * **Min deposit amount (USD)** – the minimum deposit required to open an account. If the client doesn’t meet this requirement, the account can’t be created. For more details about these settings, refer to refer to [Products](../../back-office-guide/products/products#details). ### Verify that the product currency is assigned to the correct platform group [#verify-that-the-product-currency-is-assigned-to-the-correct-platform-group] * In the Back Office, navigate to **Products** > **Products**. * Click the **Edit** button for the relevant product to open its details. * Go to the **Currencies** tab. * Click the **Edit** button for the required currency. * Check the selected group in the **Platform group** dropdown and adjust it if needed. These are the groups created on the respective platform. The available currency options are limited by the settings of the configured platform groups. ### Check the limit on the number of allowed accounts in the client details [#check-the-limit-on-the-number-of-allowed-accounts-in-the-client-details] * In the Back Office, navigate to **Clients** > **General**. * Click the **Edit** button for the relevant client. * Go to the **Settings** tab. * Review the fields: * **Max Demo Trading Accounts** * **Max Live Trading Accounts** If limits are set in these fields, they override the product settings. The client may have already reached the maximum number of allowed accounts. You can adjust the limits if needed. ## Problem [#problem] A client's trading account in the B2CORE Back Office appears in the status **E** (Error) or **A** (Archived). ## Possible reasons [#possible-reasons] * The account has been archived in B2CORE. * The account was archived or deleted on the trading platform but remains visible in B2CORE. * A connection issue is preventing proper synchronization of account status. ## Solution [#solution] To troubleshoot these statuses: ### Unarchive an account in the B2CORE Back Office (if required) [#unarchive-an-account-in-the-b2core-back-office-if-required] * Navigate to **Clients** > **Accounts**. * Find the account in the list and click the **Edit** button to open its details. * Click the **Actions** button in the upper-right corner and select **Unarchive** in the dropdown. ### Handle an account in the E (Error) status [#handle-an-account-in-the-e-error-status] The account in the **E** status usually indicates that it was archived or deleted on the trading platform. To fix it, restore or unarchive the account on the trading platform. Once restored, the updated status will sync with B2CORE. ### Check the trading platform connection settings [#check-the-trading-platform-connection-settings] If an account appears in the **A** (Archived) status but is expected to be active, check the trading platform connection. For details, refer to **Step 1** in [Clients can't create trading accounts via the B2CORE UI](clients-can-not-create-trading-accounts-via-the-b2core-ui). ### Hide an account in the B2CORE UI if can't be unarchived or restored [#hide-an-account-in-the-b2core-ui-if-cant-be-unarchived-or-restored] If an account can't be unarchived or restored on the trading platform, remove the `Visible` permission for the account in the B2CORE Back Office. This ensures the account won't be displayed to the client in the B2CORE UI. To do this: * Navigate to **Clients** > **Accounts**. * Find the account in the list and click the **Edit** button to open its details. * In the Rights list, remove the `Visible` permission. * Click **Save** to apply the changes. Remove Visible from the Rights field ## Problem [#problem] A client can't submit a verification request in the B2CORE UI and encounters an error. ## Possible reasons [#possible-reasons] This issue may occur due to one or more of the following: * The required verification level isn't available to the client. * The KYC provider connection isn't properly configured or disabled in the B2CORE Back Office. * Your KYC provider subscription or plan is invalid, inactive, or unpaid. ## Solution [#solution] To fix verification issues: ### Check the availability of verification levels [#check-the-availability-of-verification-levels] * In the Back Office, navigate to **Verification** > **Levels**. * On the **Levels** page, check the **Visible** column and ensure the relevant level is marked as visible so that clients can obtain it. * To make the level visible, click the **Edit** button to open the level details and select **Yes** in the **Visible** dropdown. * Click **Save** to apply the changes. ### Check the KYC provider connection settings [#check-the-kyc-provider-connection-settings] * In the Back Office, navigate to **System** > **External connections**. * Locate the connection to the provider used for verification, such as **SumSub**, **SuftiPro**, or others. * Click the **Edit** button for the relevant connection to open its details. * Review the connection settings and adjust them if necessary. * Ensure the connection is enabled. For details, refer to: * [How to use SumSub](../../how-to-articles/manage-verification-options/how-to-use-sumsubstance) * [How to use ShuftiPro](../../how-to-articles/manage-verification-options/how-to-use-shuftipro) ### Verify that your KYC provider subscription or plan is valid, paid, and active [#verify-that-your-kyc-provider-subscription-or-plan-is-valid-paid-and-active] If the subscription has expired or is inactive, clients won't be able to submit verification requests via the KYC provider. In this guide, we'll cover the primary features and functionalities of IB. The **Interface overview** provides a general description of the Back Office interface and its main controls. The following pages mirror the structure of the **Introducing brokers** menu in the Back Office. Each page includes a detailed explanation of a corresponding Back Office section, listing the available fields, applicable filters, limits, value ranges, and so on. This guide serves primarily as a reference and isn't focused on explaining specific user scenarios in detail. However, the guide pages contain cross-references to relevant how-to articles (step-by-step tutorials) and include links to other materials that may be helpful. The Back Office user interface is uniform across all pages, ensuring consistent look and feel and featuring a common set of basic options. ## The top bar options [#the-top-bar-options] At the top of a typical Back Office page, you can find a top bar with the following elements: * — click it to expand or collapse the main menu. * — click it to see the events that were scheduled for Admins in the **Event Calendar**. The number of upcoming events is displayed on a counter badge. * — click it to see pending client requests. The number of new requests is displayed on a counter badge. * **Language** **menu** — click it to select the interface language. * **User profile pane** — click this panel to access the **Log out** button. ## Common buttons and icons [#common-buttons-and-icons] The following buttons can be found on most Back Office pages. * the **Create** button — used to add a new entry. * the **Export** button — used to export table data to a CSV file. * the **Import** button — used to import an XLSX or a CSV data file. * — used to apply custom filters. * — used to reset custom filters. * — used to access details. * — used to delete an entry. Page elements may serve as hyperlinks which can be clicked to drill down to details. Access to this data is maintained based on the permissions assigned to a particular user group. ## Filtering [#filtering] Throughout the Back Office, the data is typically organized in tables that can be filtered. You can specify multiple criteria for filtering column data. When filtering is available, the appropriate input fields are displayed in column headers. The inputs vary depending on a data format, such as text, number, date, time, or list. To facilitate filtering by date, two fields for the start and end dates may be displayed so that you can define a time period. To enable or disable filters, click and buttons. ## Sorting [#sorting] In the Back Office, you can sort the data available in tables. The columns by which you can sort data are marked with displayed in column headers (no arrows are displayed when sorting isn't available). You can click these arrows to sort data in an ascending () or descending () order, by a single column at a time. ## Pagination [#pagination] You can display table data across multiple pages and specify how many records to display on a page. You can also view the total number of records found. To open the previous or next page, click the left or right arrow. ## Export and import [#export-and-import] Some Back Office pages support data export to CSV files. This option is available on pages that contain an **Export** button above the data table. The data in a resulting file matches the applied sorting and filtering criteria. To export page data to a CSV file, click the **Export** button. Some Back Office pages also support importing of CSV and XLSX files. This option is useful when you need to update the symbol settings for a partnership program. To import data, click the **Import** button, choose the file that you want to import and click **Open**. ## Localizations [#localizations] In the B2CORE Back Office, you can configure fields that support localizations to have multiple language options in the B2CORE UI. Using the **localization** buttons, you can set translations for these fields into different languages. To set localizations, click the **Localization** button next to the field, enter the translation in the supported languages and click **OK**. Note that only enabled localizations are displayed. You can enable or disable localizations in the **System** > **Localizations** section. View the following information for each process: **Date** The date and time when a process started running. *** **Process name** The name of a process. Possible values: * **Clear Cache** (`cache`) — clears cache for the specified time period. * **Cancel Payments** (`cancel`) — reverts reward payments. * **Create Payments** (`payments`) — initiates reward payments. * **Process Payments** (`transactions`) — processes reward transfers. * **Run Automation** (`schedule`) — runs consequentially the full process cycle (Sync Symbols + Sync Groups + Sync Trades + Create Payments + Process Payments + Sync Accounts). * **Run Diagnostics** (`diagnostics`) — runs diagnostics of IB services. * **Sync Accounts** (`accounts`) — runs synchronization of [accounts](platforms/accounts) with trading platforms. * **Sync Groups** (`groups`) — runs synchronization of [groups](platforms/groups) with trading platforms. * **Sync Symbols** (`symbols`) — runs synchronization of [symbols](platforms/symbols) with trading platforms. * **Sync Trades** (`trades`) — runs synchronization of [trades](platforms/trades) with trading platforms. *** **Memory** The amount of memory used by a process. *** **CPU Time** The time which it took a process to run. *** **PID** The process identifier. *** **Exit code** The process result. Possible values: * **0** — the process completed successfully. * **1** — the process wasn't completed due to errors. * **2** — the process was gracefully stopped due to service maintenance. On this page, you can monitor the synchronization pipelines that keep IB data in sync with trading platforms. To run a synchronization manually, click the **Run process** button. The following information is provided about each pipeline run: **Date** The date and time when a pipeline run started. *** **Platform** The trading platform for which the synchronization was run. *** **Steps** The synchronization steps included in the pipeline run. *** **Status** The current status of the pipeline run. The weekly calendar view displays the pipeline runs by day of the week. You can temporarily block a partner. Blocked partners don't receive rewards, their referral links can't be used. Go to **Introducing brokers** > **Program** > **Introducing brokers**. Select a partner that you want to block and click the name or . For a quick search, you can filter partners by a name, email, and other criteria. On the **Personal data** tab, set **Enabled** to **No**. Click **Save** to block the partner. You can **unblock** the partner any time: set **Enabled** back to **Yes**. You can also permanently delete a partner by clicking in the list. Note that this action **can't be undone**. Go to **Introducing brokers** > **Program** > **Introducing brokers**. Select a partner from the list and click the name or . For a quick search, you can filter partners by a name, email, and other criteria. On the **Personal data** tab, select a new partnership program from the **IB type** dropdown. Click **Save** to apply the changes. **See also:** * [How to configure personal rewards](how-to-configure-personal-rewards) * [How to configure a Master IB](how-to-configure-a-master-ib) Go to **Introducing brokers** > **Program** > **Introducing brokers**. Select a partner from the list and click the name or . For a quick search, you can filter partners by a name, email, and other criteria. On the **Personal data** tab, set **Master** to **Yes**. Set **Number of Master levels** — a number of levels which you want to reward for this partner. Defaults to **100**. Set **Master Level Ratio** — a fixed multiplier for any level within *Master IB max level* value. Click **Save** to apply the changes. The **Level 1** with the multiplier **1** is configured by default for any IB type. You can modify it. To create the next level: Go to **Introducing Brokers** > **Program** > **Types**. Select an IB type from the list and click its name or . Navigate to the **Levels** tab. Click **Create**. Set level **Ratio**, which is a reward multiplier. Click **Save** to apply the changes. Go to the **Preferences** tab. Click **Save** to apply the changes. Go to **Introducing brokers** > **Program** > **Introducing brokers**. Select a partner from the list and click the name or . For a quick search, you can filter partners by a name, email, and other criteria. On the **Personal data** tab, set the **Personal ratio** value — a personal multiplier which will be used for rewards calculations. Click **Save** to apply the changes. This article is intended for clients who already have an API driver configured for Converter. To configure a driver for the Converter to B2CORE API v2.x on your IB instance, follow the steps below: Add a new admin user by navigating to **System** > **Users** > **Users**. Click **+Create** and fill in the required fields. Refer to [How to add an admin user](https://docs.b2core.b2broker.com/how-to-articles/manage-system-settings/how-to-add-an-admin-user) for details. Select **Administrators** in the **Groups** dropdown. Navigate to **Introducing Brokers** > **Platforms** > **Platforms**. Select the platform for which you're configuring a driver. Go to the **Drivers** tab and click **Create**. Fill in the following fields: * **Provider** — select **API** in the dropdown. * **Name** — enter **API**. * **Server** — specify the Back Office base URL in the following format: `{baseUrl}/api/v2`. For example, `test.com/api/v2`. * **Login** — enter the newly added admin user's email that you specified at Step 1. * **Password** — enter the newly added admin user's password that you specified at Step 1. * **Version** — specify the version of a driver. Click **Save** to add the Converter driver to your IB instance. Go to **Introducing Brokers** > **Program** > **Types**. Select an IB type from the list and click its name or . Go to the **Tiers** tab. Click **Create**. Enter the **Name** of the tier. Set required number of **Active traders** to receive increased rewarding. Set the value to **0** to ignore this parameter in reward calculations. Set required amount of **Trading volume, in lots** to receive increased rewarding. Set value to **0** to ignore this parameter in reward calculations. Set required amount of **Trading volume, in USD** to receive increased rewarding. Set value to **0** to ignore this parameter in reward calculations. Set tier **Ratio** — rewards multiplier for the partners who have reached volume/clients goals for a tier period. Click **Save** to apply the changes. Go to the **Preferences** tab and set **Tier period** in days — the number of days in which amounts set on the previous step must be achieved by a partner to receive increased rewarding. Click **Save** to apply the changes. It's assumed that a connection to cTrader has already been configured in the B2CORE Back Office by the admin who is assigned the permissions to manage external connections and platforms. To configure a cTrader connection to an IB instance, do the following: Navigate to **Introducing Brokers** > **Platforms** > **Platforms**. Click **Create** and fill in the following fields: * **Provider** — select **cTrader** from the dropdown. * **Platform** — select **cTrader** from the dropdown. * **Name** — specify the platform name. Click **Save** to apply the changes. Click the **Edit** button located in the row of the newly created cTrader platform. The **Preferences** tab displays the cTrader configuration settings specified when a connection to this platform was set up in the B2CORE Back Office. Switch to the **Drivers** tab and click **Create**. Configure a connection to a synchronizer database. This is a MySQL database that stores the data collected from the cTrader platform. To establish the connection, fill in the following fields: * **Provider** — select **PDO** from the dropdown. * **Name** — specify the name of a synchronizer database. * **Server** — specify the address of a synchronizer database. * **Login** — enter the username for connecting to a synchronizer database. * **Password** — enter the password for connecting to a synchronizer database. * **Version** — specify the version of a synchronizer connection driver. The currently supported version is `3`. Click **Save** to connect the **cTrader** platform to an IB instance. Before creating a new type, make sure that the following necessary parameters are configured and enabled in the Back Office: * Navigate to **Products** > **Products** and check that at least one product with type **Partner** is created and enabled. You can use filter by type for quick search. If there is no product with this type, [create one](how-to-set-up-a-wallet). Go to **Introducing brokers** > **Program** > **Types**. Click **Create**. The **Preferences** tab of the Type details will open. Click **Save** to apply the changes. In the **Name** field, enter a partnership program name. In the **Description** field, enter a partnership program caption. This can be, for example, conditions for participation. From the **Registration** dropdown, select an option of joining a partnership program: * **Auto**: Each client signing up to the B2CORE UI automatically becomes a partner. If multiple partnership programs are available, an IB account is created for each program. * **Public**: Clients can see available partnership programs in the B2CORE UI and can apply for it. For this type of registration, **Approvement** option is available and enabled by default, which means that clients join a partnership program only after their [joining requests](#user-content-fn-1)[^1] are approved by a Back Office admin. If the option is disabled, the partner can access the IB Room immediately after the registration. * **Private**: Clients are added to a partnership program by a Back Office admin. Applying via the B2CORE UI is unavailable. * **Restricted**: Clients can join a partnership program only using a link provided by a participant of another or the same program. Specify the program identifier in the **Restriction** field. For this type of registration, **Approvement** option is available and enabled by default, which means that clients join a partnership program only after their [joining requests](#user-content-fn-2)[^2] are approved by a Back Office admin. If the option is disabled, the partner can access the IB Room immediately after the registration. From the **Product** dropdown, select a product. From the **Currency** dropdown, select a currency. Click **Save** to apply the changes. [^1]: To learn more about client requests, refer to [B2CORE documentation](https://docs.b2core.b2broker.com/back-office-guide/clients/requests). [^2]: To learn more about client requests, refer to [B2CORE documentation](https://docs.b2core.b2broker.com/back-office-guide/clients/requests). ## Generate a QR code [#generate-a-qr-code] Go to **Introducing brokers** > **Program** > **Introducing brokers**. Select a partner from the list and click the name or . For a quick search, you can filter partners by a name, email, and other criteria. Go to the **Links** tab and click a link in the **Landing page** column. At the bottom of the page, you can see the **Change color** and **Add icon** dropdowns. There are two default background colors — black and white. You can customize colors, see [below](how-to-generate-a-qr-code#customize-colors) for details. Icon is optional, you can ignore this field, but remember that using an icon for QR codes can increase the number of scans by 2-3 times. You can customize icons, see [below](how-to-generate-a-qr-code#customize-icons) for details. Use the **Click to generate QR code** button to create a QR code. You can copy your QR code by clicking **Copy Embed** or download it to your device by clicking **Download QR Code**. ## Customize colors [#customize-colors] Navigate to **Introducing brokers** > **Promo** > **QR Codes** > **Colors**. Click **Create** to create a new color and fill out the form: * **Name** — enter the name of the color. * **Background color** — enter the HEX code of the background. * **Foreground color** — enter the HEX code of the foreground. Click **Save** to save a new color. The color is now available in the dropdown of colors when creating a QR code. ## Customize icons [#customize-icons] Navigate to **Introducing brokers** > **Promo** > **QR Codes** > **Icons**. Click **Create** to create a new icon and fill out the form: * **Name** — enter the name of the icon. * **Icon** — attach the icon file. Make sure your icon is a PNG image and its size is from 128 x 128 to 512 x 512 and less than 100 KB. Click **Save** to save a new icon. The icon is now available in the dropdown of icons when creating a QR code. To import data: ## Prepare a CSV file to import [#prepare-a-csv-file-to-import] The file must contain the following fields: Download the `template_import_ibs.csv` file that you can use to verify that your CSV file includes the correct headers and data formats. You can use a semicolon or tab as a delimiter instead of a comma in your file. ## Create an import operation [#create-an-import-operation] 1. Go to **System** > **Import data**. 2. Click **+Create** in the upper-right page corner. ## Fill out the form [#fill-out-the-form] 1. In the **Title** field, enter a name that you want to assign to your data import operation. 2. In the **Description** field, optionally enter a short description for your import operation. 3. From the **Action** dropdown, select `import-ibs` — to import IB-related data for existing clients. 4. In the **Delimiter** dropdown, select a delimiter character you used to separate data in your prepared CSV file (such as `comma`, `semicolon`, or `tab`). ## Upload the CSV file [#upload-the-csv-file] Click **Browse** and select your prepared CSV file for data import. ## Run the data import [#run-the-data-import] Click **Save** to start the import operation. Mind that all fields in the CSV file are required. If any of the fields are missing, the import operation will fail. During the data import: * If an email address specified as **IB Email** exists in B2CORE, this client will be added as an IB partner and the IB-related data will be imported for that client. * If an email address specified as **IB Email** doesn’t exist in B2CORE, the IB-related data won't be imported. After the import operation is finished, you can check its status and click the **Edit** button located in the import operation row to view the **Log messages** and **Error messages** fields listing the details about the records that were successfully imported as well as errors that occurred during import. To create a partner profile: Go to **Introducing brokers** > **Program** > **Introducing brokers**. Click **Create**. Enter the **Email** of the client who is registered in the B2CORE UI. If the client hasn't yet registered in the B2CORE UI, you can create the profile. From the **Type** dropdown, select a partnership program. Click **Save** to apply the changes. Go to **Introducing brokers** > **Program** > **Types**. Select an IB type from the list and click its name or . Go to the **Symbols** tab. Select the symbol for which you want to configure payment preferences and click . For a quick search, you can filter symbols by a platform, trading group, symbol name, and other criteria. From the **Payment plan** dropdown, select an option for reward calculation. For detailed descriptions, refer to [Payment plans](../payment-plans). Remember that available payment plans depend on the platform. Depending on the selected payment plan, fill in corresponding fields (see [below](how-to-set-up-a-payment-plan-for-symbols#payment-plan-settings)). In the **Position** field, select the positions for which you want to calculate the reward amount: open, close, or both. In the **Apply** field, select whether to apply the specified settings to the current symbol or to a trading group. Click **Create** to apply the changes. ## Payment plan settings [#payment-plan-settings] * Indicate the **Percentage** of the received commission that you want to pay to your partners. For example, **10** means 10%. Positive integer and decimal values in the range from 0 (zero) to 100 are supported. * Select the **Currency** in which rewards will be paid. If a partner's wallet currency differs from the reward currency, then the reward amount is converted into the wallet currency. The conversion occurs at the current exchange rate at the time of calculation. * Specify the **Amount** that you want to pay your partners for each lot traded by their clients. Positive integer and decimal values greater than or equal to 0 (zero) are supported. Keep in mind that you must monitor profitability using this scheme as the reward amounts may exceed the commissions charged. For this payment plan you need to preliminary configure a required amount of levels. Refer to [How to configure levels](how-to-configure-levels) for step-by-step instructions. * Select the **Currency** in which rewards will be paid. If a partner's wallet currency differs from the reward currency, then the reward amount is converted into the wallet currency. The conversion occurs at the current exchange rate at the time of calculation. * In the **Amount** field, specify the max amount of the reward. This is the amount that will be paid to partners for trades of their direct clients (Level 1: *IB* → *Direct client*). Positive integer and decimal values greater than or equal to 0 (zero) are supported. * Click links below the **Amount** field to specify the exact amounts that partners receive at each level. The number of links depends on the number of configured levels. In the example below, 3 Levels are configured for the IB type. Therefore, you can see two links: * distribution of the **Max amount** between 2 levels (*IB* → *SubIB* → *Client*) * distribution of the **Max amount** between 3 levels (*IB* → *SubIB* → *SubIB* → *Client*) Max amount Refer to [Max amount](../payment-plans#max-amount) for a distribution example. * Specify the **Markup**, in points, that you want to pay your partners for each lot traded by their clients. Positive integer values greater than or equal to 0 (zero) are supported. * In the **Markup, %** field, specify your markup on the trading platform. This value is required for correct calculations of reward amounts. * In the **Percentage** field, indicate a percentage of your markup (**Markup, %**) that you want to pay your partners for each lot traded by their clients. Positive integer and decimal values greater than or equal to 0 (zero) are supported. * Indicate the **Percentage** of the market spread value that you want to pay to your partners. For example, **10** means 10%. Positive integer and decimal values in the range from 0 (zero) to 100 are supported. The **Position** field is automatically set to **closed** and cannot be changed. * Indicate the **Percentage** of the platform spread value that you want to pay to your partners. For example, **50** means 50%. Positive integer and decimal values in the range from 0 (zero) to 100 are supported. The **Position** field is automatically set to **closed** and cannot be changed. * The markup percentage is automatically retrieved from the trading platform's symbol configuration and used in reward calculations. A **Wallet** is a partner account, to which all partner rewards are credited. Before creating a partner product, navigate to **Products** > **Platforms** and make sure that **Personal** platform is enabled. Go to **Products** > **Products**. Click **Create** and select **eWallet** from the dropdown. The **Create product** popup will open. From the **Platform group** dropdown, select **eWallet**. From the **Currency** dropdown, select a currency in which you want to pay rewards to your partners. If a partner's wallet currency differs from the reward currency, then the reward amount is converted into the wallet currency. The conversion occurs at the current exchange rate at the time of calculation. In the **Name** field, enter a wallet name. It can be the same as currency for your convenience. Select **Group**. From the **Factory** dropdown, select **100** if a wallet is denominated in currency subunits (for example, cents); otherwise, leave the default value **1**. From the **Type** dropdown, select **Partner**. Click **Save**. The **Info** tab of the Product details will open. Set the **Caption**, which will be displayed in the B2CORE UI. Set localizations if needed. Set **Status** to **Enabled**. Grant permissions: select required **Rights** or check **eWallet** in the **Group rights**. Set **Max accounts** to **-1**. Click **Save** to apply the changes. This article covers two common scenarios for managing client structures in the IB system: * Transferring an entire client tree from one IB to another. * Transferring an individual client from one IB to another. You can also reassign clients and sub-IBs between IBs directly on the [Reassign Users](../back-office-guide/program/reassign-users) page, without exporting and importing IB-related data. ### Before you start [#before-you-start] * Ensure you have proper backup of client data. * Confirm that the destination IB exists and is active. * Always verify exports before deleting source IBs. ## Transferring the entire client structure from one IB to another [#transferring-the-entire-client-structure-from-one-ib-to-another] Use this method to move all clients or SubIBs from one Introducing Broker to another while preserving all relationships and data. This scenario requires the **mandatory removal of the source IB** from which clients are being transferred. Go to **Introducing brokers** > **Program** > **Introducing brokers** and open the profile of the source IB (`IB1`). On the **Clients** tab, export all first-level clients under `IB1`. Export only first-level clients. All lower-level clients will be automatically transferred with their relationships preserved. After confirming the export is complete, delete `IB1` from the system. Import IB data, as described here: [How to import IB-related data](how-to-import-ib-related-data). In your CSV file, specify the following: * In the **IB Email** column, the email address of the destination IB (`IB2`). * In the **Client Email** column, the email addresses of clients exported from `IB1`. * In the **IB Type ID** column, the identifier of the desired IB type. To find IB type IDs, go to **Introducing brokers** > **Program** > **Types** and export the existing types. The required IDs will be available in the exported file. Upload the CSV file and complete the import process. All clients will be transferred to `IB2` with their transaction data, reward information, and subordinate client relationships intact. ## Moving a particular client from one IB to another [#moving-a-particular-client-from-one-ib-to-another] Use this method to transfer an individual client or SubIB from a source IB to a target IB while preserving all their data. Identify the current IB under which the client is located (`IB1`) and determine the target IB where the client should be moved (`IB2`). Go to **Introducing brokers** > **Program** > **Clients** and remove the client from `IB1`. Go to **Introducing Brokers** > **Program** > **Introducing brokers** and select the target `IB2`. On the **Clients** tab, click the **Create** button to add the client. On the **Clients** tab, enter the client's email address to create them under the target `IB2`. The system will automatically preserve all transaction and reward information during this process. Verify that the client has been successfully moved to the target `IB2` with all their historical data intact. ## Set up IB [#set-up-ib] ## Create your IB program [#create-your-ib-program] ## Manage partners [#manage-partners] ## Other [#other] On the **Partner Dashboard** page (labeled **Dashboard** on some stands), you can find a set of widgets displaying the data related to the partnership programs you've joined. In the dropdown located at the top of the page, select a partnership program for which you want to display widgets. The set and layout of widgets displayed may vary depending on the broker configuration. The following widgets are available: **Wallet** View the total balance of your rewards in your wallet, as well as the total rewards earned. In the widget, you can click **Withdraw** to navigate to the **Funds** > **Withdraw** page and withdraw a desired amount from your wallet, or you can click **Transactions** to navigate to the **Transactions** tab of the [Reports](reports/transactions) page, listing reward payments related to a selected partnership program. *** **Partner Link** View the details of your referral link. You can select a **Landing Page** (currently, only **Sign Up** is available) and a **Language** (select **Global** for a non-localized link), then copy the generated link. *** **CPA Program** Track the CPA (Cost Per Acquisition) program activity for a selected period. You can select a period for which you want to display the data, such as over the past hour, day, week, month, or year. Alternatively, you can apply a custom period by selecting the start and end dates in the date range field. If there is no CPA program activity for the selected period, the widget displays an empty state. *** **Savings Rebates** Track savings-rebate activity for a selected period. You can select a period for which you want to display the data, such as over the past hour, day, week, month, or year. Alternatively, you can apply a custom period by selecting the start and end dates in the date range field. *** **Trading Report** Monitor the number of your active traders, trading volume, and the amount of paid rewards. You can select a period for which you want to display the data, such as **Day**, or apply a custom period by selecting the start and end dates in the date range field. The report table includes the following columns: **Date**, **Active Traders**, **Trades**, **Trading Vol.**, **Reward Amount**. *** **Acquisition Report** Track the number of clicks on your referral links or promo banners and the number of registrations made after clicking your referral materials. The widget displays a chart showing **Clicks** and **Registration** trends. The report table includes the following columns: **Date**, **Clicks**, **Registrations**. You can select a period for which you want to display the data, such as over the past hour, day, week, month, or year. Alternatively, you can apply a custom period by selecting the start and end dates in the date range field. *** **Rewards by Symbol** Monitor the rewards generated per traded symbol. The report table includes the following columns: **Symbol**, **Trades**, **Volume (Lots)**, **Reward/Lot**, **Reward Amount**. Depending on the broker configuration, this menu section may be labeled **IB Room** or **Partners** in the B2CORE UI. To manage translations, you must be assigned the *Editor* permission. You can't edit translations in **DEMO** projects. To add a new translation or edit the existing one: On the **Projects** page, click the project name. From the language dropdown above the table, select a required language. Only languages supported for the project are available. Locate a required key. To locate a key, click the **magnifying glass icon** and start typing the key name or translation in the search field, or use [filters](../filter-keys). Enter a translation in the **Custom translation** field. The field supports HTML autocomplete and syntax highlighting. You can [use variables](use-variables-in-translations) and [handle plural forms](handle-plural-forms) if available. You can also request enabling [AI translations](translate-with-ai) for your projects. The changes are saved automatically. In this article, you'll learn how to enable the editing mode in the WebUI of your product. This feature will help you easily find out the identifier of any translation key on a page. ### Activate the editing mode [#activate-the-editing-mode] You can activate the editing mode on any page of your product WebUI: In the browser address bar, append `?showTranslateEditor=true` to the page URL and press *Enter*. You will see the corresponding notification at the top of the page. Enable the editing mode You can switch between WebUI pages: the editing mode remains active until you disable it by clicking the **Exit editing mode**. ### Copy a key [#copy-a-key] In this mode, all available translations on the page are marked with **pencil icons**. Note that elements not shown by default will become visible when hovered over. Select a translation you want to edit and click the **pencil icon** near it to copy its key to the clipboard. Copy the key identifier ### Locate the key [#locate-the-key] 1. In B2TRANSLATE, on the **Projects** page, select your project. 2. Click the **magnifying glass icon** and paste the copied value to the search field. The key list will be automatically filtered by the key identifier. Now you can edit the translation. Refer to [Add or modify translations](add-or-modify-translations) for details. You can copy translations from another project included in the same project type. In the target project, the translations are added only to keys without translations (the **Custom translation** field is empty). Existing translations (the **Custom translation** field isn't empty) aren't overwritten. You must be assigned the *Editor* permission in the target project and at least the *Viewer* permission in the source project. To copy translations: On the **Projects** page, click the name of a project to which you want to copy translations. From the language dropdown above the table, select a required language. Click **Import keys** in the page header. Import keys In the **Import keys** popup, check the selected platform (if applicable) and language. From the **Import from project** dropdown, select a project from which you want to copy the translations. Only projects containing the selected platform (if applicable) and language and where you're assigned at least the *Viewer* permission are displayed. Select a source project to import keys from Click the **Import** button. If needed, repeat for other languages. ### Export translations to a CSV file [#export-translations-to-a-csv-file] 1. On the **Projects** page, click the project name. 2. From the language dropdown above the table, select a required language. 3. Mark the checkboxes for the keys that you want to copy. Mark the upper checkbox to select all. 4. From the **Bulk actions** dropdown appearing above the table, select **Download CSV**. Download CSV Alternatively, you can download **all** project keys: 1. On the **Projects** page, select a project and click the **three dots**. 2. Select **Download CSV**. 3. Select a required platform (if applicable) and language. 4. Click **Download**. The CSV file will be downloaded to your computer. ### Edit translations in the CSV file [#edit-translations-in-the-csv-file] Mind the following: * Edit only values in the `translation` column. * Only a comma (`,`) or a semicolon (`;`) can be used as a separator. Attention: If you use Pages by Apple Inc. to edit your file, it may sometimes add extra semicolons to the first row, potentially affecting file upload. * For multi-word translations containing spaces, use quotes (`"My new translation"`). * If there is no `originalDefaultTranslation`, then the custom translation is always ignored. * If the `languageDefaultTranslation` and the custom translation are the same, then the custom translation is ignored. * In other cases, the custom translation is updated. ### Import the CSV file [#import-the-csv-file] 1. Get back to the translation page of your project. 2. Click **Upload CSV** in the page header. Upload CSV 3. Select a required language. 4. Drag and drop the file into the upload area or click **Add file** to select the file from your computer. The maximum allowed file size is 3 MB. Add CSV file 5. Click **Upload**. 6. Refresh the page to see the translations uploaded. Alternatively, you can upload the file from the project list: 1. On the **Projects** page, select a project and click the **three dots**. 2. Select **Upload CSV**. 3. Select a required platform (if applicable) and language. 4. Drag and drop the file into the upload area or click **Add file** to select the file from your computer. 5. Click **Upload**. B2TRANSLATE's pluralization feature enables accurate translation of quantity-dependent strings across different languages. This guide explains how to work with plural forms when translating content that changes based on quantity. ## Understanding plural forms [#understanding-plural-forms] Different languages have varying rules for plural forms. While English typically uses two forms (singular and plural), other languages may require multiple forms based on complex grammatical rules, for example: * **English**: 1 file, 2 file**s**, 5 file**s** * **Russian**: 1 файл, 2 файл**а**, 5 файл**ов** B2TRANSLATE automatically determines the required plural forms based on your target language and displays the appropriate input fields. ## The Pluralization panel [#the-pluralization-panel] When working with pluralized keys, you'll see the dedicated **Pluralization** panel containing multiple input fields, each representing a different plural form for your target language. Pluralization panel ### The Other form [#the-other-form] This is the primary required form used across all languages worldwide. Every pluralized translation must include this form as it serves as the fallback for any unspecified cases. If you fill only the **Other** form and leave the others empty, B2TRANSLATE will automatically populate the remaining forms with the **Other** form value. This ensures your translation remains functional while you work on completing all forms. On the translation page of your project, this form is displayed in the **Translation** field for keys with plural forms. ### Default value [#default-value] Under each plural form input field, you'll see the default value (typically the English source text). The display logic works as follows: * If your target language has more plural forms than the source language (for example, Russian with 4 forms vs English with 2), default values will only appear under the corresponding number of forms. * When no default translation is present in your target language, only English translations are displayed, maintaining the existing logic. ## Translation workflow [#translation-workflow] ### Access the Pluralization panel [#access-the-pluralization-panel] On the **Translations** page, click the **three dots** (View details) for a desired key. You'll see the **Pluralization** tab where applicable. If not, only the **Info** tab is available. ### Fill in the plural forms [#fill-in-the-plural-forms] 1. Start with translating the **Other** form, as this is required for all languages. If you fill only the **Other** form and leave the others empty, B2TRANSLATE will automatically populate the remaining forms with the **Other** form value. This ensures your translation remains functional while you work on completing all forms. 2. For languages requiring multiple forms, ensure every field is properly filled before saving. Though this step isn't mandatory, leaving some fields empty may result in incomplete translations depending on your target language requirements. Fill in plural forms ### Save changes [#save-changes] All modifications within the **Pluralization** panel must be saved manually using the **Save changes** button. The system will not automatically save changes as you type, allowing you to work on multiple forms before committing your translations. ## Best practices [#best-practices] When working with plural forms, consider the following: * **Review all forms together**: Since all forms for a key are displayed simultaneously, use this opportunity to ensure consistency in terminology and style. * **Use contextual guidance**: Each form includes labels and tooltips explaining when that particular form should be used. * **Test with numbers**: Consider how your translations will appear with different quantities (1 item, 2 items, 5 items, 100 items). * **Complete all required forms**: Ensure all forms are filled for languages that require complete sets. * **Verify Other form**: Always provide a translation for the **Other** form as it serves as the universal fallback. * **Save regularly**: Remember to manually save your changes using the **Save changes** button. You can copy translations to another project included in the same project type. The translations from a source project are assigned to the same keys in a target project. You must be assigned the *Editor* permission in the target project and at least the *Viewer* permission in the source project. If translations in the target project already exist, they'll be **overwritten**. To copy translations: On the **Projects** page, click the name of a project from which you want to copy translations. From the language dropdown above the table, select a required language. Mark the checkboxes for the keys that you want to copy. Mark the upper checkbox to select all. From the **Bulk actions** dropdown appearing above the table, select **Send translations**. Send translations In the **Send translations** popup, mark one or more projects to which you want to copy the selected translations. Only projects containing the selected language and where you're assigned the *Editor* permission are displayed. Select target projects to import keys to Click **Send**. B2TRANSLATE offers integration with ChatGPT for translating keys. This option isn't provided by default, but should be requested for individual projects. Contact your account manager to request access. AI translations are available for all languages, excluding English (the default language). You must be assigned the *Editor* permission for adding and editing translations with AI. To translate with AI: On the **Projects** page, click the project name. From the language dropdown above the table, select a required language. Only languages supported for the project are available. Make sure the **Translate with AI** button is active (highlighted in blue), indicating the AI translating is enabled for the current project. Otherwise, if the **Translate with AI** button is inactive (grayed out) request access from your account manager. Translate with AI enabled Click the **Translate with AI** button. If the **Source** translation is empty, AI translation is unavailable. The **Source** value will be translated to your selected language and added to the **Custom translation** field. Certain keys support variables for translations. These variables are replaced with actual values calculated during product operation. If a key supports variables, they are displayed under the **Custom translation** field. Click the variable to include it in the translation. Each variable can be included only once. Alternatively, the variables can be omitted to use a less detailed message. ## Example [#example] The keys on the picture below support variables. When the message is displayed in the WebUI, the variables are replaced with the actual links. Translation variables You can configure cashback reward programs for clients who trade on MT4/5. The cashback is rewarded for the volumes traded on MT accounts over a day, based on closed positions, and deposited to clients the following day. For example, the cashback for the volumes traded on May 24 is rewarded to clients on May 25. From the **MetaTrader Volume** menu, you can access the **MetaTrader 4** and **MetaTrader 5** pages to configure cashback programs for each platform. Each page is divided into two tabs: * [Preferences tab](preferences-tab) * [Tiers tab](tiers-tab) On this tab, you can configure the following settings of a cashback reward program for MT4 or MT5: **Enabled** If **Enabled**, the cashback program is enabled for the MT4 or MT5 platform; otherwise, **Disabled**. *** **Cashback value (per lot)** The fixed rate per each traded lot. The cashback value can be denoted as an integer or decimal value. The cashback amount is calculated as follows: `Cashback amount = Cashback value * Number of traded lots` *** **Cashback currency** The cashback program currency. The cashback is calculated only for the volumes traded on MT accounts denominated in the cashback program currency. In addition, this is the currency in which the cashback is paid to clients. To receive the earned cashback, a client must have an account of the `trade` or `personal` type, denominated in the cashback program currency. For example, the cashback rate is 0.7 and the cashback program currency is USD. For the volume of 10 lots traded on the MT account denominated is USD, the cashback is calculated as follows: `0.7 * 10 = 7` The cashback of 7 USD is rewarded to the owner of the MT account. *** **Account destination type** The type of the account to which the cashback is rewarded: * **Trade** — the cashback is rewarded to the client’s MT trading account on which the volume taken for cashback calculations has been traded. * **Personal** — the cashback is rewarded to the client’s account of the `personal` type, such as a wallet, denominated in the cashback program currency. If the **Personal** account type is selected, ensure that your clients have personal-type accounts in the required currency; otherwise, the earned cashback can’t be deposited to them. By default, the **Trade** account type is selected. *** **Ignored symbols groups** A list of ignored symbols. The trades made in the selected symbols are excluded from cashback calculations. *** **Accounts platform groups allowance** A list of MT account groups. By default, all the account groups configured on the MT platform are selected. If the **Accounts number allowance** field is empty, all the MT trading accounts included in the groups selected in **Accounts platform groups allowance** field are rewarded the cashback. *** **Accounts number allowance** A comma-separated list of MT account numbers. By default, the list is empty. If one or more MT account numbers are listed in this field, only the listed accounts are rewarded the cashback and the **Accounts platform groups allowance** option is ignored. *** **Updated** The date when the cashback program was last modified. **See also** [How to configure cashback programs for MT4 and MT5](../../../how-to-articles/manage-cashback-options/how-to-configure-cashback-programs-for-mt4-and-mt5) On this tab, you can manage the tiers that determine the increased cashback rates for clients who have traded certain volumes over a day. View the following information about each cashback reward tier: **Name** The tier name. *** **Trading volume, lots** The volume, in lots, that must be traded in order to receive the increased cashback. *** **Cashback value** The increased cashback rate that is used instead of the rate specified on the **Preferences** tab if the volume traded on an MT account over a day has reached the required tier volume. *** **Created at** The date and time when the tier was created. *** **Updated at** The date and time the tier was last modified. **See also** [How to add cashback reward tiers](../../../how-to-articles/manage-cashback-options/how-to-configure-cashback-programs-for-mt4-and-mt5#how-to-add-cashback-reward-tiers) On this tab, you can view a list of client's [accounts](../accounts). To view details of a specific account, click the **Edit** button in the corresponding row. On this tab, you can find additional information provided by a client during registration. The fields displayed on this tab depend on the [Registration wizard configuration](../../system/wizards#registration-wizard) This tab is visible by default. Here, you can find information about a particular client and view the client profile details, such as profile status and verification level. The grayed-out fields are disabled and cannot be edited (most of them are system fields and filled automatically). Use caution when customizing the following fields because this may affect a client’s permissions: * **Email** — this field is disabled by default. This email address is used by a client to log in to the system. To enable editing a client’s email, click the **Edit** button. To view the previous email addresses specified for a client, switch to the [History tab](history-tab) and select the **Email change history** option. * **Birthday** — this field is disabled by default. To enable editing a client’s date of birth, click the **Edit** button. A user must be at least 18 years old to be allowed to use the system. * **Status** — the current [status](../../references/client-statuses) of a client profile. * **Client type** — the [type](../types) of a client profile. * **Manager** — the client’s [manager](../managers). The scope of activities that a client is allowed to perform may vary depending on the client department and their assigned manager. * **Verification level** — the [verification level](../../verification/levels) obtained by a client. This level determines the scope of activities that a client is allowed to perform. * **Client Rights** — the [client rights](../../system/client-rights) assigned to a client, which determine the actions available to the client in the B2CORE UI. * **Client Tags** — the tags assigned to a client, which are used to sort the client list displayed to [Back Office administrators](../../system/users/). These tags have no effect on client permissions. * **Risk level** — the risk level assigned to a client, which may determine the scope of activities that the client is allowed to perform. On this tab, you can also add a picture to a client profile by clicking the **Edit** button located in the picture frame and selecting the required image. The added picture will be displayed in the client profile in the B2CORE UI. On this tab, you can view, add, and edit text notes, or comments, related to a particular client. These comments are displayed only in the Back Office. Your clients won't receive any notifications upon adding these comments. The following information is displayed about each internal comment: **Comment** The text of an internal comment about a client. *** **Date** The date and time when a comment was added. *** **Creator** The administrator who added a comment. *** **Last Editor** The administrator who has last edited a comment. On this tab, you can view a list of a client’s addresses and phone numbers as well as add the required contact information by clicking the **+Add** button. ## Addresses [#addresses] In this section, the following information is provided: **Address type** The type of address: * **Residential** — the client’s primary living address. * **Billing** — the address associated with billing or invoices. * **Mailing** — the address where correspondence is sent. * **Birth place** — the location where the client was born. * **Legal** — the official address used for legal purposes. *** Details of the address, such as **Country**, **City**, **State**, **Postal code**, and street address. ## Phones [#phones] In this section, the following information is provided: **Phone** The client's phone number provided during registration (if your registration procedure requires phone numbers) or added by a Back Office user. *** **Confirmed** * **Yes** — indicates that this phone number was the last one confirmed by the client via SMS. For example, if two phone numbers are provided and the client confirms the first one, it is marked as confirmed. If the client later confirms the second number, the second number becomes confirmed, and the first number is marked as unconfirmed. * **No** — indicates that the phone number is unconfirmed. *** **Default** This field is deprecated and no longer in use. *** phone-button — the **phone** icon The option to dial the specified client's phone number from the Back Office. To use this option, a phone service provider, such as Twilio, must be configured (for details, refer to [How to configure Twilio](../../../how-to-articles/manage-communication-platforms/how-to-configure-twilio)). *** delete_button — the **bin** icon This option is available if you're granted the `Update clients` permission, which includes the ability to edit client information on the **Contacts** tab. By clicking the icon, you can delete any added phone numbers, including the confirmed phone number. After removing a confirmed phone number, a client can add and confirm a new phone number to associate with their profile. Once removed, the phone number becomes available for registering a new client profile, assuming that your registration procedure requires [phone numbers to be unique](../../system/settings#client-settings). On this tab, you can view and edit the values of [custom fields](../../system/custom-fields) specified for a client. The fields are organized by the [custom field groups](../../system/custom-fields#groups) configured in your system. Select a group to view and edit the fields it includes. The set of available fields and groups depends on the custom fields configured in **System** > **Custom Fields**. On this tab, you can view a list of devices from which a client was logged in to the B2CORE UI. This list indicates the client IP address, the date and time of the last login, device operation system, client browser, and device fingerprint data (including a canvas code picture) containing detailed information about the device from which a client has logged in to the B2CORE UI. On this tab, you can view a list of documents that a client submitted for [verification](../../verification/). **ID** The document identifier in the Back Office. *** **Type** The [document type](../../verification/document-types). *** **Status** The current[ status of a client request](../../references/client-request-statuses) for document approval. *** **Request ID** The identifier of a client’s document approval request. *** **Uploaded by** Indicates who uploaded the document. *** **Uploaded at** The date and time when the document was uploaded. **See also** [How to use the KYC constructor](../../../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor) On this tab, you can view and manage files related to a particular client. By default, the folder tree on this tab reflects the structure of [system client folders](../../system/client-folders). As a more advanced approach to storing files, you can create and then manage custom folders, taking into account the following considerations: * A folder tree can be of any nesting depth. * Predefined folders cannot be deleted on this tab. * You can view only those predefined system folders to which you were granted access. If a system folder is created with the same name as that of a custom folder of some client, a `_Custom` postfix is added to the custom folder name, and the system folder is created at the same nesting level. Use the following buttons to perform a specific action: **Download all** Choose a method to export a ZIP archive containing files related to a particular client (you can send the archive to your email address or download it to your computer). To export all files, click **Download All**. To export specific files, press **Command** (on macOS) or **Ctrl** (on Windows), select the required files with the mouse cursor, and then click **Download All**. *** **Add file** Upload client files from your computer or a cloud to the Back Office. *** **Upload multiple files** Upload multiple client files at once. *** **Add directory** Create a new folder. *** **Edit** Rename files or move them to other folders. The files can only be moved between folders related to a specific client. *** **Delete** Delete selected files or folders. *** **Cancel** Discard unsaved changes. *** **Save** Apply the changes. **See also** [How to upload a file](../../../how-to-articles/manage-clients/how-to-upload-files-to-a-client-profile) On this tab, you can find a list of a client’s deposit and withdrawal wallets, as well as a list of saved withdrawal templates. Select the wallet type to view the details: ## Withdrawal wallets [#withdrawal-wallets] On this page, you can view a list of wallets that were used by a client for withdrawal of funds. **Method** The [method](../../system/payout-system#payout-methods) used to withdraw funds. *** **Currency** The wallet currency. *** **Address** The public wallet address. *** **Destination tag** Applicable only for certain currencies (XRP, XLM, BNB, and XEM). ## Saved withdrawals [#saved-withdrawals] On this page, you can view a list of saved withdrawal templates. Such templates can be created by a client when making a withdrawal, to avoid specifying the same information repeatedly for similar subsequent withdrawals. **Name** The name of a [payment system](../../../integrations/payment-systems). *** **Saved at** The date and time when a withdrawal template was saved. After clicking the **eye** icon, you are navigated to a page displaying the details of a selected withdrawal template. The withdrawal template data is stored in the JSON format. ## Deposit wallets [#deposit-wallets] On this page, you can view a list of cryptocurrency wallets that were generated for a client. **Method** The [method](../../system/deposit-system#deposit-methods) used to deposit funds. *** **Currency** The currencies enabled for a wallet. *** **Address** The public wallet address. *** **Destination tag** Applicable only for certain currencies (XRP, XLM, BNB, and XEM). On this tab, you can view the history of changes of a client’s password, email address, verification level, and 2FA options. Select one of the following options to view the details: ## Passwords change history [#passwords-change-history] On this page, you can find the details about previously changed client passwords: **Date** The date and time when the password was changed. *** **Type** The type of an action that resulted in changing the password: * **Restored** — the password was updated by a client. * **Changed by admin** — the client’s password was updated by an administrator. *** **Changed by** The email address of the person who changed the password. **See also** [How to change a client password](../../../how-to-articles/manage-clients/how-to-change-a-client-password) ## Test results [#test-results] On this page, you can find a list of [accreditation tests](../../verification/client-tests) that a client has passed in the B2CORE UI and view their results. ## Authorization history [#authorization-history] On this page, you can view the log of client sessions in the B2CORE UI. **Auth date** The date and time when a client logged in to the B2CORE UI. *** **Auth IP** The IP address from which a client logged in to the B2CORE UI. *** **Auth location** The location (country and city) from which a client logged in to the B2CORE UI, which is determined based on the client IP address. *** **Status** The result of a login attempt: `success` or `failed`. ## Email change history [#email-change-history] On this tab, you can view the log of changes made to a client’s email address. **Origin Email** The previous client email address. *** **Changed To** The current email address that is used by a client to sign in to the B2CORE UI. *** **Changed Data** The date when an email address was changed. *** **Changed By** The email address of a person who changed the client email. If an email address was specified for the first time, the **Origin email** and **Changed by** columns are empty. ## 2FA history view [#2fa-history-view] The log indicating when 2FA was enabled or disabled for a client contains the following data: **Date** The date and time when 2FA was enabled or disabled for a client. *** **Enabled** The action type indicating whether 2FA was enabled or disabled. *** **Provider** The 2FA service provider. **See also** [How to disable 2FA for a client](../../../how-to-articles/manage-clients/how-to-disable-2fa-for-a-client) ## Verification change history [#verification-change-history] On this page, you can view the details about each [verification level](../../verification/levels) obtained by a client. This information includes the name of the previous and newly obtained levels, as well as the date and time when each verification level was obtained and the name of the person who granted the level to a client, along with a reason why it was granted. **See also** [How to use the KYC constructor](../../../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor) On this page, you can find a list of all clients registered either through the B2CORE UI or via the Back Office. ## General information [#general-information] The following information is provided about each client: **ID** The identifier of a client in the system. *** **Name** The client’s name. *** **Created** The date and time when a client profile was created. *** **Status** The current [status of a client profile](../../references/client-statuses) in the B2CORE UI. *** **Email** The mail address used by a client to log in to the B2CORE UI. *** **Nickname** The client’s nickname. *** **Tags** The tags assigned to a client that are used to sort the client list displayed to [Back Office administrators](../../system/users/#users). *** **Manager** The client’s [manager](../managers). *** **Phone** The client’s phone number. *** **Country** The client’s [country](../../system/countries) (if specified by a client during registration or KYC verification process). *** **Jurisdiction** The [jurisdiction](../jurisdictions) to which the client is assigned, either automatically upon registration or manually. *** **City** The client’s city. *** **Types** The client [profile type](../types). *** **Internal client type** For internal use only. The internal client profile category. *** **Verification level** The [verification level](../../verification/levels) obtained by a client. *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **Risk level** The risk level assigned to a client, which may determine the scope of activities that the client is allowed to perform. *** **Last login** The date and time when a client was last logged in to the B2CORE UI. To assign tags to multiple clients or change their profile statuses at once, click the **Select** button, and then select the clients by clicking client rows, or click **Select All**. Next, expand the **Edit selected clients** drop-down menu, and then select **Assign Tags** or **Select Status**. *** **Communication language** The client's preferred language, which also determines the localization used in the B2CORE UI. By default, the column is hidden but can be added to the table using the **Column visibility** option. To view client details, click the **Edit** button and switch to a tab displaying the required information. *** **UTM metas** The pieces of tracking information attached to URLs that identify where clients came from, allowing you to track which campaigns or channels brought them to B2CORE and analyze conversion performance. By default, the column is hidden but can be added to the table using the **Column visibility** option. ## Details [#details] To access tabs displaying additional information, click drop-down-menu-button (the menu button) located in the upper-right page corner and expand the dropdown that displays the available options. The available tabs are described in the subsequent sections of this document. **See also** [How to register a new client](../../../how-to-articles/manage-clients/how-to-register-a-new-client) [How to assign tags to clients](../../../how-to-articles/manage-clients/how-to-assign-tags-to-clients) On this tab, you can find information about referral programs which a client has joined. **Introducing broker ID** The identifier assigned to a client after joining a particular referral program. *** **Type** The name of a referral program. To view program details, click its name. On this tab, you can view a list of messages sent to a client email and export this data to a CSV or XLSX file. **ID** The email identifier. *** **Active queue ID** The identifier of a queue in which an email is included. *** **Email** The client email address. *** **Subject** The email subject. *** **Attempt date** The date and time when the most recent attempt to send an email was made. *** **Status** The email delivery status: `IN PROGRESS`, `FAIL`, or `SUCCESS`. *** **Reason** The reason why an email delivery failed. To export the email data to a CSV or XLSX file, click the **Export** button located in the upper-right corner of the screen. You can download the file to your computer or send it to the email address specified in your profile. To view a complete list of emails sent to all clients, switch to the [mailing log](../../mailing/system#log) by navigating to **Mailing** > **System** > **Log**. On this tab, you can view and manage the marketing attributes collected for a client, such as the communication consent, communication language, email address and first deposit amount. The following information is provided about each attribute: **Field** The attribute name and its identifier in the system. *** **Value** The attribute value. *** **Created** The date and time when the attribute was created. *** **Updated** The date and time when the attribute was last updated. To add a new attribute, click the **Add** button. After making changes, click **Save** to apply them. On this tab, you can configure various client profile settings, which are grouped under the following sections: ## Settings [#settings] In this section, you can select a communication language and set a color to be applied to a client’s requests: **Communication Language** The language in which communication with a client is conducted. For a list of supported languages, refer to [Localizations](../../system/localizations). *** **Request color** The color used to highlight requests from a client that are displayed in the [Requests](../requests) section. You can click the gray input field and pick the color from a palette. Alternatively, you can specify the color name, or define its HEX or RGBA value. ## 2FA [#2fa] In this section, you can learn about 2FA (two-factor authentication) options configured for a client: * **SMS** — if `enabled`, a client receives 2FA verification codes using SMS * **Google** — if `enabled`, a client receives 2FA verification codes using the Google Authenticator app ## Rights [#rights] In this section, you can override the [permissions](../../system/client-rights) granted to a client based on the obtained [verification level](../../verification/levels). The permissions determine which kinds of operations the client is allowed to make in the B2CORE UI. **Verification** If selected, clients are allowed to obtain a higher [verification level](../../verification/levels) in the B2CORE UI. *** **Converter** If selected, clients can exchange funds in the B2CORE UI. *** **Deposits** If selected, clients can deposit funds in the B2CORE UI. *** **Withdrawals** If selected, clients can withdraw funds in the B2CORE UI. *** **Internal Transfers** If selected, funds can be transferred from one client to another within the same B2CORE system. *** **Overwrite with explicit settings** After enabling or disabling specific permissions for a client, select this option, and then click **Save** to apply the changes. The permissions that don’t correspond to the current verification level of a client are marked with `*`. ## Options [#options] In the **Accounts limitations (Overrides Product max accounts)** section, you can limit the maximum number of demo and live trading accounts available to a client by using the **Max Demo Trading Accounts** and **Max Live Trading Accounts** fields. The number of demo accounts can be limited for any trading platform providing the capability to create demo accounts. The values specified on this tab override the default system limits defined in the [Products](../../products/products) section. On this tab, you can view a history of trades executed by a client on **B2TRADER**. **Order ID** The identifier assigned to an order on B2TRADER. *** **Instrument** The currency pair. *** **Side** The trade side: `Buy` or `Sell`. *** **Quantity** The amount traded, in a quote currency. *** **Price** The trade execution price. *** **Value** The amount traded, in a base currency. *** **Fee** The commission charged for a trade. *** **Fee Product** The commission currency. *** **Date** The date and time when a trade was executed. On this tab, you can find detailed information about a client’s transactions. Select the transaction type to view the details: **Deposit** The list of client’s [deposits](../../finance/deposits). *** **Payout** The list of client’s [payouts](../../finance/payouts). *** **Transfer** The list of client’s [transfers](../../finance/transfers). *** **Exchange** The list of client’s [exchanges](../../finance/exchange). *** **Balance change operation** The history of changes to a client’s balance resulting from an administrator’s actions in the Back Office, which includes the following information: * **Date** — the date and time when a change to a client’s balance has occurred * **Account** — the user account number * **Amount** — the transaction amount * **Deposit/Withdraw** — the transaction type * **Admin user** — the administrator who made the transaction The changes to a client’s balance effected by a Back Office administrator aren't reflected on the [Deposits](../../finance/deposits) and [Payouts](../../finance/payouts) pages. In this subsection, you can manage HTML email templates that are used to notify clients and [Back Office users](../users/) about specific event types. ## Template types [#template-types] On this page, you can manage the types of events about which clients and Back Office users can be notified by email. ### General information [#general-information] The following information is provided about each event type: **Name** The event type name. *** **Caption** The event type description. *** **Enabled** If **Yes**, an event type is enabled for triggering event notifications; otherwise, **No**. To view the template type details, click the **Edit** button. ### Details [#details] On the details page, you can edit the **Name** and **Caption** fields, as well as enable or disable the template type. In addition, you can return the HTML templates related to the selected template type to their default configurations. To do this, click the **Actions** button displayed in the upper-right page corner, and then select **Reset templates** in the dropdown. After that, the HTML email templates, which are listed on the [Templates](email#templates) page, are reset to defaults. ## Templates [#templates] On this page, you can manage HTML email templates that are used to deliver notifications about occurred events to clients and Back Office users. ### General information [#general-information-1] The following information is provided about each template: **Type** The [email template type](../../references/email-template-types). *** **Locale** The language of an email template. *** **Subject** The subject of an email template. *** **Enabled** If **Yes**, an email template is enabled and can be used to deliver notifications; otherwise, **No**. To view the template details, click the **Edit** button. ### Details [#details-1] In the **Template** window, you can view or edit the HTML code of a template. The parameters, such as text color or company name, that are defined in the [Key-value storage](../key-storage) can be inserted in email templates. When an email notification is sent to a client or Back Office user, such parameters are replaced with the values that are specified for them in the storage. To render the HTML code and view how a template will look in an email, click the **Preview** button. If the template is enabled, it can be saved only after it is successfully rendered and displayed in the preview area. ### Example [#example] The following is an example of an HTML code for an email template: ```html         ``` ## Templates [#templates] On this page, you can manage templates used to send [event notifications](../event-notifications) to [Back Office users](../users/) via Slack. For Slack, templates are supported for the following [types of events](../../references/event-types-for-triggering-event-notifications-for-back-office-users): * `PayoutRequestInitialized` * `TestPassing` ### General information [#general-information] The following information is provided about each template: **Name** The template name. *** **Caption** The template description. *** **Enabled** If **Yes**, a template is enabled and can be used for event notifications; otherwise, **No**. To view the template details, click the **Edit** button. ### Details [#details] In the **Template** field, you can view or slightly edit the template text. ### Supported Slack templates [#supported-slack-templates] Use the Slack templates provided below for notifications about supported event types. These templates contain keys that are replaced with relevant values when the event occurs and the notification is sent to recipients. #### **PayoutRequestInitialized** [#payoutrequestinitialized] The template for notifications about withdrawal requests created by clients: ``` Project: {frontUrl}|{companyName} Type: Payout Payout number: {urlMetaDetails}|{metaId} Client Email: mailto:{clientEmail}|{clientEmail} Task: check and approve the {urlRequestDetails}|withdrawal ``` #### **TestPassing** [#testpassing] The template for notifications about accreditation tests completed by clients. ``` Project: {frontUrl}|{companyName} Test: testName Request number: {urlRequestDetails}|{applicationId} Client Email: mailto:{clientEmail}|{clientEmail} ``` In this subsection, you can manage templates that are used for SMS notifications. ## General templates [#general-templates] On this page, you can manage templates that are used to deliver [event notifications](../event-notifications) to [Back Office users](../users/) via SMS. ### General information [#general-information] The following information is provided about each template: **Name** The template name. *** **Caption** The template description. *** **Enabled** If **Yes**, a template is enabled and can be used for event notifications; otherwise, **No**. To view the template details, click the **Edit** button. ### Details [#details] In the **Template** window, you can view or edit the template text. ### Example [#example] The following is an example of a template for SMS notifications about withdrawal requests created by clients: ``` Project: {companyName} Type: Payout Payout number: {metaId} Client Email: {clientEmail} ``` ## Confirmation templates [#confirmation-templates] On this page, you can manage templates that are used to deliver verification codes to clients for whom 2FA (two-factor authentication) is enabled via SMS. ### General information [#general-information-1] The following information is provided about each template: **Name** The template name. The template with the name **default** can't be disabled, deleted, or renamed. *** **Caption** The template description. *** **Enabled** If **Yes**, a template is used to deliver verification codes to clients via SMS; otherwise, **No**. To view the template details, click the **Edit** button. ### Details [#details-1] In the **Template** window, you can view or edit the template text. ### Example [#example-1] The following is an example of a template for delivering verification codes via SMS: ``` Your verification code is %CODE%. ``` ## Templates [#templates] On this page, you can manage templates used to send [event notifications](../event-notifications) to [Back Office users](../users/) via Telegram. For Telegram, templates are supported for the following [types of events](../../references/event-types-for-triggering-event-notifications-for-back-office-users): * `PayoutRequestInitialized` * `TestPassing` ### General information [#general-information] The following information is provided about each template: **Name** The template name. *** **Caption** The template description. *** **Enabled** If **Yes**, a template is enabled and can be used for event notifications; otherwise, **No**. To view the template details, click the **Edit** button. ### Details [#details] In the **Template** field, you can view or slightly edit the template text. ### Supported Telegram templates [#supported-telegram-templates] Use the Telegram templates provided below for notifications about supported event types. These templates contain keys that are replaced with relevant values when the event occurs and the notification is sent to recipients. #### **PayoutRequestInitialized** [#payoutrequestinitialized] The template for notifications about withdrawal requests created by clients: ``` Project: {frontUrl}|{companyName} Type: Payout Payout number: {urlMetaDetails}|{metaId} Client Email: mailto:{clientEmail}|{clientEmail} Task: check and approve the {urlRequestDetails}|withdrawal ``` #### **TestPassing** [#testpassing] The template for notifications about accreditation tests completed by clients. ``` Project: {frontUrl}|{companyName} Test: testName Request number: {urlRequestDetails}|{applicationId} Client Email: mailto:{clientEmail}|{clientEmail} ``` On this page, you can view and add client tags. Assigning tags to clients enables you to filter the client list for Back Office users, such as admins or managers, so they only see clients with specific tags, while other clients remain hidden. Tags can be assigned to clients either manually or automatically after client registration when using [jurisdictions](../../clients/jurisdictions). The following information is provided about each client tag: **ID** The identifier of a client tag. *** **Caption** The name of a client tag. To update a client tag, click the **Edit** button located in a tag row, and then specify a new name for the tag. **See also** [How to assign tags to clients](../../../how-to-articles/manage-clients/how-to-assign-tags-to-clients) [How to create a jurisdiction](../../../how-to-articles/manage-clients/how-to-create-a-jurisdiction) [How to make an admin user see only specific clients](../../../how-to-articles/manage-system-settings/how-to-make-an-admin-user-see-only-specific-clients) On this page, you can view a list of all user groups created in the Back Office and manage their permissions. ### General information [#general-information] The following information is provided about each user group: **ID** The identifier of a user group. *** **Group** The name of a group. The **Administrators** group can’t be removed and its permissions can’t be modified. Users included in this group are granted all available permissions. To export the data about Back Office user groups, including the data about permissions granted to each group, to a JSON file, click the **Export** button located in the upper-right corner of the page. To import the data about Back Office user groups, click the **Import** button, and then select a JSON file containing the required data. To view group details, click the **Edit** button. ### Details [#details] The detail page contains the following tabs: * **Group** — a list of permissions granted to the users included in this group. * **Users** — a list of users included in this group. **See also** [How to add a user group and grant permissions](../../../how-to-articles/manage-system-settings/how-to-add-a-user-group-and-grant-permissions) [How to import data related to Back Office user groups](../../../how-to-articles/manage-system-settings/how-to-import-data-related-to-back-office-user-groups) On this page, you can view a list of registered Back Office users, such as admins or managers, modify their profile settings, and add new users. ### General information [#general-information] The following information is provided about each user: **ID** The user identifier. *** **Name** The user’s name. *** **Email** The user’s email address that is used to sign in to the Back Office. *** **Allowed Client Tags** The client tags that are used to sort the client list displayed to a user. *** **Status** The status of the user profile:`Enabled` or `Disabled`. Users whose profiles are disabled can't sign in to the Back Office. *** **Two Factor Authentication** The status of 2FA: * `Disabled` — 2FA is disabled. * `Email` — 2FA with email codes is enabled. * `TOTP` — 2FA with time-based one-time passwords (TOTP) is enabled, such as through the Google Authenticator app. Users can enable 2FA with TOTP for their profiles by clicking the profile button displaying their email address in the top bar and selecting **Enable 2FA** in the dropdown. After confirming the action in the popup, they should follow the displayed instructions to set up 2FA using Google Authenticator. *** **IP Whitelist** A list of [allowed IP addresses](../../security/white-lists) specified for a user. *** **Groups** A list of [groups](users#groups) in which a user is included. The groups define the permissions that the user is asssigned. *** **Creator** The identifier of the user who created a user profile. Click the identifier to navigate to the user details page. *** **Created At** The date and time when a user profile was created. To view user details, click the **Edit** button. ### Details [#details] The following additional information is provided about each user: **Phone** The user’s phone number. *** **Password** The masked password that is used to sign in to the Back Office. *** **Telegram chat Id** The identifier of a Telegram chat, group, or channel for receiving event notifications (for details, refer to [How to get Telegram chat, group, and channel identifiers](../../../how-to-articles/manage-communication-platforms/how-to-get-telegram-chat-group-and-channel-identifiers)). *** **Slack chat Id** The identifier of a Slack channel for receiving event notifications. *** **Event notifications** The list of events about which a user is notified. You can add events to this list or remove them. The list includes the event notifications configured on the [System > Event notifications](../event-notifications) page. *** **Send to email** Enable this option to send credentials to a specified user email address. *** **Mask data** Enable this option to prevent a user from viewing client personal data in the Back Office. When enabled, such data as client names, email addresses, and phone numbers are masked with asterisks (`*`) for the user. *** To add a picture to a user profile, click the **Edit** button located in the picture frame and select an image. * Supported formats: PNG, JPG and JPEG * File size: up to 3 MB Back Office users can upload pictures only for their own profiles. The uploaded picture is added as an icon to a user email address displayed in the top bar. *** To manage 2FA options for a user, click the **Actions** button in the upper-right page corner, and then select one of the following options: * **Reset 2FA to Email** — to enable 2FA with email codes for the user. * **Disable 2FA** — to disable for the user any 2FA method that is currently in use. *** ### Fields for filtering [#fields-for-filtering] **Countries** * If the **All except** option is enabled and one or several countries are specified in the field below, a user is allowed to see a list of clients from all countries except for the ones specified in the field below it. * If the **All except** option is disabled and one or several countries are specified in the field below, a user is only allowed to see a list of clients from the countries specified in the field below it. **See also** [How to add an admin user](../../../how-to-articles/manage-system-settings/how-to-add-an-admin-user) To configure settings for savings programs with fixed interest rates, specify the following settings in the **Fixed Preset Details** section: * **Plan length (days)** — select a period, in days, during which the amount invested in the savings program must be held. The plan length can be specified with an interval of 30 days, such as 30, 60, 90, and so on. At the end of the plan length, the investment amount that a client contributed to the program is refunded to the client wallet. * **Payment period (days)** — select a period, in days, indicating the frequency of interest payments. The payment period can be specified with an interval of 30 days, such as 30, 60, 90, and so on, and must be less than or equal to the plan length. * **Investment amount** — enter an amount that a client must contribute to the savings program when subscribing to it. The investment amount is deducted from a client wallet denominated in the program currency. If a client has more than one wallet denominated in the program currency, the client can select a wallet from which the investment amount should be deducted. The investment amount can be specified as an integer or decimal value. * **Interest rate (percent)** — enter a percentage of the investment amount, which is used to calculate interest earned at the end of each payment period (for details, refer to [Interest calculation example — Fixed strategy](configure-the-fixed-strategy-settings#interest-calculation-example-fixed-strategy).) The interest rate can be specified as an integer or decimal value. * **Penalty type** — select how the penalty is calculated. The penalty amount is charged to a client if the client withdraws their invested funds before the end of the plan length. * **Fixed** — a fixed amount is deducted as a penalty. * **Percentage** — a percentage of the invested funds is deducted as a penalty. * **Cancellation penalty** — specify as follows: * For the **Fixed** penalty type, specifies the exact penalty amount charged to a client. The amount must be an integer or decimal value and must be lower than the investment amount. * For the **Percentage** penalty type, specifies the percentage of the investment amount deducted as a penalty. ## Interest calculation example — Fixed strategy [#interest-calculation-example--fixed-strategy] This example illustrates how interest is calculated for a client subscribed to a savings program with the `Fixed` strategy. Suppose that the savings program is configured with the following settings: * the **Investment amount** is 1,500 USD * the **Interest rate (percent)** is 3% * the **Plan length (days)** is 180 days * the **Payment period (days)** is 60 days The interest accrued and paid to the client for the first 60-day period since the date the client subscribed to the program is calculated as follows: `Earned interest = Investment amount * Interest rate / 100` `1,500 * 3 / 100 = 45 USD` The earned interest of 45 USD isn’t taken into account when calculating interests for subsequent periods. This means that the same interest, which is equal to 45 USD in this example, is earned and paid every 60 days till the end of the plan length. Detailed information about interest payments to the clients subscribed to savings programs can be found in payment plans that are listed on the [Savings > Plans](../../../back-office-guide/savings/plans) page. To configure settings for savings programs with flexible interest rates, specify the following settings in the **Flexible Preset Details** section: * **Minimum investment amount** — enter the minimum amount of the initial investment. Investments less than the specified amount won’t be accepted. * **Minimum additional investment** — enter the minimum amount that clients can add to the initial investment. Clients can’t add amounts less than this specified minimum. The minimum investment and additional investment amounts can be specified as integer or decimal values. * **Penalty period (days)** — specify the period, in days, during which a client can’t withdraw their invested funds without a penalty. * **Penalty type** — select how the penalty is calculated. The penalty amount is charged to a client if the client withdraws their invested funds before the end of the penalty period. * **Fixed** — a fixed amount is deducted as a penalty. * **Percentage** — a percentage of the total invested funds is deducted as a penalty. * **Redeem penalty** — specify as follows: * For the **Fixed** penalty type, specifies the exact penalty amount that will be charged to a client. The amount must be an integer or decimal value and must be lower than the minimum investment amount. * For the **Percentage** penalty type, specifies the percentage of the total invested funds that will be deducted as a penalty. * **Payment period** — indicates the frequency of interest payments and is set to `The first day of each month` and can’t be changed. For example, if a client successfully subscribes to a savings program on May 31, the first interest payment will occur on the next day, June 1. In the **Tiers** section, set up tiers that are used to apply flexible interest rates: * **Tier from** — enter the minimum amount that clients must invest to get an interest rate assigned to that tier. This amount indicates the tier’s starting point and the previous tier’s end point. There is the tier with the **Tier From** value equal to 0 (zero), which cannot be removed. * **Annual percentage rate** — enter the annual interest rate, in percentage, applied to the tier (for interest calculation details, refer to [Interest calculation example — Flexible strategy](configure-the-flexible-strategy-settings#interest-calculation-example-flexible-strategy)) Add as many tiers as required for your savings program. To add a new tier, click the **Add** button. ## Interest calculation example — Flexible strategy [#interest-calculation-example--flexible-strategy] This example illustrates how interest is calculated for a client subscribed to a savings program with the `Flexible` strategy. Suppose that the savings program is configured with the following settings: * Tier 1: the **Tier from** is 0 and **Interest of year (%)** is 10% * Tier 2: the **Tier from** is 5,000 and **Interest of year (%)** is 14.6% * the **Minimum investment amount** is 3,000 USD * the **Minimum additional investment** is 1,000 USD If a client subscribes to the program on May 30 and deposits 3,650 USD, the client receives an annual interest rate of 10%. At the end of May 30, the interest is accrued. It’s calculated as follows: `Earned interest = Investment amount * (Interest rate / 100) / 365` `3,650 * (10 / 100) / 365 = 1 USD` If on May 31, the client adds 1,350 USD, bringing the total invested to 5,000, the client receives an annual interest rate of 14.6%. At the end of May 31, the interest is accrued as follows: `5,000 * (14.6 / 100) / 365 = 2 USD` The total interest accrued for two days May 30 and May 31, which is 3 USD, is paid to the client wallet on June 1. Detailed information about interest payments to the clients subscribed to savings programs can be found in payment plans that are listed on the [Savings > Plans](../../../back-office-guide/savings/plans) page. ## Modify tiers for savings programs with Flexible strategies [#modify-tiers-for-savings-programs-with-flexible-strategies] In the existing savings presets, you can modify tiers that are used to apply flexible interest rates. To modify tiers: Navigate to **Savings** > **Presets**. Select the preset and click the **Edit** button. In the **Tiers** section, you can: * change the amounts in the **Tier from** fields * adjust the interest rates applied to the tiers * remove existing tiers * add new tiers To update tiers applied to the savings plans that have already been created based on the selected preset, enable the **Update Savings Plans Tiers** checkbox. The modified tiers will be used for interest calculations in all the existing savings plans. If you want the modified tiers to apply only to new savings plans, leave the checkbox unchecked. Click **Save** to apply the changes. You can create savings programs with `Fixed` and `Flexible` strategies and enable your clients to invest their funds in these programs and earn interest. To create a savings program: Navigate to **Savings** > **Presets**. Click **+Create** in the upper-right page corner, and select: * **Fixed preset** — to create a program with a fixed interest rate * **Flexible preset** — to create a program with a flexible interest rate Configure the following general settings: * In the **Currency** dropdown, select a currency for the savings program. To subscribe to the program, your clients must have wallets denominated in the program currency. * In the **Name** field, enter a unique name for the savings program. The program name is displayed to clients in the B2CORE UI. * In the **Description** field, enter a program description. The program description is displayed to clients in the B2CORE UI. * Set the **Status** option to **Active** or **Inactive**. * If **Active**, the card showing details of the savings program is displayed in the B2CORE UI, and clients can subscribe to the program. * If **Inactive**, the card of the savings program isn’t displayed in the B2CORE UI. * In the **Admission fee** field, enter a fee amount that clients must pay when subscribing to the savings program. The admission fee is deducted from client wallets denominated in the program currency. The admission fee can be specified as an integer or decimal value. If you don’t want to charge the admission fee, enter 0 (zero). Proceed to configuring settings specific to the selected savings strategy: * [Configure the Flexible strategy settings](configure-the-flexible-strategy-settings) * [Configure the Fixed strategy settings](configure-the-fixed-strategy-settings) After configuring the settings, click **Save** to create the savings program. The savings program preset is displayed on the **Savings Preset** page. If the preset is assigned the **Active** status, the card of the created savings program is displayed to clients in the B2CORE UI, and clients can subscribe to the program. ## Field types [#field-types] The supported field types for the Registration wizard include: * **input** — a text input field. * **group** — a container that holds one or more fields of various types or other groups. * **passwordButton** — a password input field that includes a show/hide button for toggling the visibility of the entered password. * **select** — a dropdown that enables clients to select a single option from a predefined list. * **multiSelect** — a dropdown that enables clients to select multiple options from a predefined list. * **radio** — a single-choice selector that presents several options, enabling clients to select one option from a predefined list. * **boolean** — a checkbox field that enables clients to mark it as either true or false. * **date** — a field for entering or selecting a date. * **phone** — a field for entering a phone number according to the predefined format. ## Validation rules [#validation-rules] Data validation rules that can be assigned to the Registration wizard fields include: * `required` — indicates that a field is required. * `email:rfc,spoof,strict` — validates that an email address follows the correct format. * `unique_active_email` — ensures that an email address is unique and not already registered in your system. * `password_length` — validates that a password meets the required length. * `password_content` — validates that a password includes the required characters and symbols. * `same:password` — ensures that the password entered in the **Password confirmation** field matches the one in the **Password** field. * `string` — a string of characters. * `min:1` — requires a minimum of one character in the entered string. * `max:30` — limits the entered string to a maximum of 30 characters. * `info_name` — validates that an entered string includes allowed characters. * `phone:AUTO` — validates that a phone number follows the correct format. * `distinct` — ensures that the phone number is unique and not already confirmed by another registered client in your system. * `date` — validates that the entered or selected value is a date. * `age:18` — ensures that a user is at least 18 years old (in addition to the `date` rule). * `requiredValue` — validates that the selected value is **True**. * `countries_handbook` — ensures that the value is from the list of countries configured in your system. * `client_addresses_handbook` — ensures that the value is from the list of address types registered in your system. * `nullable` — allows the field to accept an empty value. * `array` — an array of values. * `numeric` — a numeric value. The Registration wizard can accept and process only specific data within the Basic Information step. The tables below outline the fields supported for this step: * [Email, password, and password confirmation fields](#email-password-and-password-confirmation-fields) * [First name, last name, and birthday fields](#first-name-last-name-and-birthday-fields) * [Address fields](#address-fields) * [Phone fields](#phone-fields) * [Consent and agreement fields](#consent-and-agreement-fields) For each field, it's indicated whether it can be used independently or must be nested within a specific group. Field names must be specified exactly as provided in the **Name** column. Field labels that will be displayed on the **Sign Up** page in the B2CORE UI can be amended according to your preferences. In addition, specific data validation rules that should be assigned to the fields are listed in the **Validation rules** column. For descriptions of all available field types and data validation rules that can be assigned to the fields, refer to [Field types](field-types-and-validation-rules#field-types) and [Validation rules](field-types-and-validation-rules#validation-rules). ## Email, password, and password confirmation fields [#email-password-and-password-confirmation-fields] The table below provides information about the fields for entering an email, setting a password, and confirming the password, including field types, validation rules, and additional attributes for proper configuration. ## First name, last name, and birthday fields [#first-name-last-name-and-birthday-fields] The table below outlines the fields for entering a first name, last name, and birth date. These fields must be nested within the **group** field named `info`. ## Address fields [#address-fields] The table below outlines the fields for entering address information. These fields must be nested within the **group** field named `0`, which must in turn be nested within the **group** named `addresses`. ## Phone fields [#phone-fields] The table below outlines the field for entering a phone number. This field must be nested within the **group** field named `0`, which must in turn be nested within the **group** named `phones`. ## Consent and agreement fields [#consent-and-agreement-fields] The table below outlines the fields required for client consent. These fields are essential for obtaining necessary agreements and consents from clients. These fields must be nested within the **group** field named `requirements`. **Deprecated.** Registration wizards are deprecated. To set up the client registration process, use the new registration settings and custom fields instead — see [How to migrate to the new registration settings](../how-to-migrate-to-new-registration-settings). If you have mobile applications, keep the existing Registration wizards enabled until you no longer support older app versions, because end users on those versions rely on them to register. The Registration wizard determines the registration procedure for new clients in the B2CORE UI, as well as the information the clients are prompted to provide during registration. You can add several Registration wizards in order to configure separate registration procedures, for example, for individual and corporate clients. To add and configure the Registration wizard: Navigate to **System** > **Wizards**. On the **Wizards** page, click **+Create** in the upper-right page corner. On the **Create wizard** page, fill in the following fields: * In the **Name** field, enter the wizard name, such as Corporate or Individual. The wizard name is displayed to clients as the name of the registration option on the **Sign up** page in the B2CORE UI. * In the **Type** dropdown, select **Registration**. * In the **Default** dropdown, select: * **Yes** — to mark the wizard as the default Registration wizard. The default wizard is displayed as the first registration option on the **Sign up** page in the B2CORE UI if more than one Registration wizard is configured. * **No** — to display the wizard following the default one on the **Sign up** page in the B2CORE UI if more than one Registration wizard is configured. Click **Save** to add the wizard. In a wizards list, find the added Registration wizard, and click **Edit**. In the **Description** field on the **Wizard** tab, optionally enter a short description of the registration procedure or any other helpful information that clients should know before they start registration. The description is displayed under the wizard name on the **Sign up** page in the B2CORE UI. To configure the registration procedure steps, go to the **Workflow** tab. By default, the following two steps are configured and placed in the order in which they are performed during registration: * Step 1: **Basic Information** — a client is prompted to fill in the required personal information, such as an email address, first and last names, phone number, address, and password for accessing their profile in the B2CORE UI. To view a list of predefined fields added for the Basic Information step, click the **Edit** button located in the step row, and go to the **Custom fields** tab. Enable the fields that you want clients to fill in during registration and disable the others (for details, refer to [How to set up fields for the Basic Information step](how-to-set-up-fields-for-the-basic-information-step)). * Step 2: **User Registration** — a client is registered in B2CORE and assigned the client type and initial verification level (for details, refer to [How to configure the User Registration step](how-to-add-and-configure-the-registration-wizard#how-to-configure-the-user-registration-step)). Workflow tab of the Registration wizard To include additional steps in the registration procedure, click **+Add**. In the **Add workflow** popup, select the step type. The possible steps: * **Client Type** — a client is prompted to select the profile type, such as individual or corporate. * **Email Confirmation** — a client is prompted to confirm the email address entered at the Basic Information step with a verification code sent to that email. * **New Phone Confirmation** — a client is prompted to confirm the phone number entered at the Basic Information step with a verification code sent to that number. * **Advanced** *(deprecated)* — this step is no longer available for adding to new Registration wizards. If the Advanced step was previously added to an existing Registration wizard, it's preserved and can still be modified or removed (for details, see [How to set up fields for the Advanced step](how-to-set-up-fields-for-the-advanced-step)). Click **Save** to add the selected step to the registration procedure. The step is added to the steps list based on the order that is predefined for each step. After completing the configuration of the registration procedure steps, go to the **Wizard** tab. On the **Wizard** tab, enable the wizard by selecting **Yes** in the **Enabled** dropdown. Click **Save** to apply the changes. After enabling the wizard, the corresponding registration option is displayed to clients on the **Sign up** page in the B2CORE UI. The image below shows an example of the the B2CORE UI **Sign up** page enabling new clients to select the **Individual**, **Corporate**, or **Partner** registration option. Sign Up page **See also** [How to block registration for a country](../how-to-block-registration-for-a-country) At the User Registration step, clients are registered in B2CORE and assigned the initial verification level. It's possible to select the client type and verification level that are assigned to clients after registration. This may be useful when you configure two separate registration procedures for individual and corporate clients and want to assign different initial verification levels to such clients. Select the client type and verification level assigned to clients after registration: Navigate to **System** > **Wizards**. Select the Registration wizard and click **Edit**. Go to the **Workflow** tab. Click the **Edit** button located in the User Registration step row. Go to the **Settings** tab, and fill in the following fields: * In the **Register As** dropdown, select the client type that is assigned to clients after registration. The list includes all the enabled client types configured on the [Clients > Types](../../../back-office-guide/clients/types) page. If you leave `Not selected` in the **Register As** dropdown, the client type marked as default on the [Clients > Types](../../../back-office-guide/clients/types) page will be assigned to clients after registration. If no default type is set, the type with the lowest priority index will be assigned. * In the **Verification Level** dropdown, select the initial verification level that is assigned to clients after registration. The list includes all the verification levels configured on the [Verification > Levels](../../../back-office-guide/verification/levels) page except for the default verification level to which the zero (`0`) index is assigned. If you want to assign the default verification level to clients after registration, leave\ `Not selected` in the **Verification Level** dropdown. User Registration step Click **Save** to apply the changes. The Advanced step is *deprecated* and can no longer be added to new Registration wizards. If the Advanced step was previously added to your existing wizard, you can edit or remove it, but you can't add new fields to this step. After registration, the information collected in the Advanced step is displayed on the [Advanced tab](../../../back-office-guide/clients/general/advanced-tab) in the client details. To set up fields for the Advanced step: Navigate to **System** > **Wizards**. Select an existing Registration wizard and click **Edit**. Go to the **Workflow** tab. Click the **Edit** button located in the Advanced step row. Go to the **Custom fields** tab. To modify settings of an existing field, click the **Edit** button located in the field row. Configure the following field settings: * In the **Main field settings** section: * In the **Type** dropdown, select the field type. * In the **Enabled** dropdown, select `Enabled` to display the field during registration or `Disabled` to hide the field. * In the **Field attributes** section: * In the **Name** field, enter the field name used in the Back Office. Only Latin characters, digits, and underscores are allowed. * In the **Label** field, enter the field label. Field labels are displayed on the **Sign Up** page in the B2CORE UI. * In the **Rules** dropdown, select one or more rules for validating the data entered in the field by clients. For descriptions of all available field types and data validation rules that can be assigned to the fields, refer to [Field types](field-types-and-validation-rules#field-types) and [Validation rules](field-types-and-validation-rules#validation-rules). Click **Save** to apply the changes to the field settings. After saving the field settings, you'll be redirected to the fields list on the **Custom fields** tab. Ensure that all the fields you want clients to complete at the Advanced step are enabled. To remove a field that you no longer need in the Advanced step, click the **bin** icon located in the field row. Click **Save** to apply the changes to the wizard. At the Basic Information step, clients are prompted to provide their personal information by completing the fields displayed on the **Sign Up** page in the B2CORE UI. This step includes a predefined set of fields. You can edit or remove these fields, but you can't add new fields to this step. To set up fields for the Basic Information step: Navigate to **System** > **Wizards**. Select an existing Registration wizard and click **Edit**. Go to the **Workflow** tab. Click the **Edit** button located in the Basic Information step row. Go to the **Custom fields** tab. Custom fields tab To modify settings of an existing field, click the **Edit** button located in the field row. The Registration wizard can accept and process only a specific set of data. For details on the fields that you can add, along with their names, settings, and attributes, refer to [Fields supported in the Basic Information step](fields-supported-in-the-basic-information-step). Configure the following field settings: * In the **Main field settings** section: * In the **Type** dropdown, select the field type. * In the **Enabled** dropdown, select `Enabled` to display the field during registration or `Disabled` to hide the field. * In the **Field attributes** section: * In the **Name** field, enter the field name used in the Back Office. * In the **Label** field, enter the field label. Field labels are displayed on the **Sign Up** page in the B2CORE UI. * In the **Rules** dropdown, select one or more rules for validating the data entered in the field by clients. The list of field attributes depends on the selected field type and can include other attributes. If additional attributes are available for the field, they are listed in [Fields supported in the Basic Information step](fields-supported-in-the-basic-information-step). Click **Save** to apply the changes to the field settings. Save field settings After saving the field settings, you'll be redirected to the fields list on the **Custom fields** tab. Ensure that all the fields you want clients to complete during registration are enabled. To remove a field that you no longer need for registration, click the **bin** icon located in the field row. Click **Save** to apply the changes to the wizard. **Deprecated.** Registration wizards are deprecated. To set up the client registration process, use the new registration settings and custom fields instead — see [How to migrate to the new registration settings](../how-to-migrate-to-new-registration-settings). If you have mobile applications, keep the existing Registration wizards enabled until you no longer support older app versions, because end users on those versions rely on them to register. Client acquisitions are tracked per CPA program. To view acquisitions for a program, open the program and go to the **Client Acquisitions** tab. ## Acquisition list [#acquisition-list] View the following information for each CPA acquisition: **Client ID** The unique identifier of the referred client. *** **Client Name** The name of the referred client. *** **Partner Name** The name of the partner who referred the client. *** **Partner User ID** The unique identifier of the partner who referred the client. *** **Events** The conditions from the payment plan that the client has fulfilled. *** **Created** The date and time when the acquisition was recorded. ## Sort data [#sort-data] Click the **Created** column header to sort acquisitions by creation date. Click again to toggle between ascending and descending order. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Partner User ID** — enter a partner user ID to display acquisitions attributed to this partner. * **Date range** — select a start and end date to display acquisitions created during the specified period. **See also:** * [CPA programs](cpa-programs) * [Payment plans](payment-plans) * [CPA payments](cpa-payments) ## Payment list [#payment-list] View the following information for each CPA payment: **Partner User ID** The unique identifier of the partner who earned the reward. *** **Partner Name** The name of the partner who earned the reward. *** **Payment Amount** The reward amount. *** **Currency** The reward currency. *** **Status** The current status of a CPA payment: * **Pending** — the reward has been calculated and is waiting to be processed. * **Processing** — the reward transfer is in progress. * **Processed** — the reward was successfully transferred to the partner's account. * **Succeeded** — the reward transfer was confirmed as successful. * **Failed** — the reward could not be transferred to the partner's account. * **Cancelled** — the reward was cancelled and will not be paid. *** **Processed At** The date and time when the payment was processed. *** **Created** The date and time when the CPA payment was created. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Partner User ID** — enter a partner user ID to display payments for this partner. * **Partner Name** — enter a partner name to display payments for this partner. * **Status** — select a status to display payments with this status. * **Date range** — select a start and end date to display payments processed during the specified period. **See also:** * [CPA programs](cpa-programs) * [CPA acquisitions](cpa-acquisitions) ## Program list [#program-list] View the following information for each CPA program: **Name** The name of a CPA program. Click the name to open the [program details](cpa-programs#program-details). *** **Reward Currency** The currency in which partner rewards are paid. *** **Payment Mode** The mode that determines how rewards are calculated when a client meets multiple conditions: * **Cumulative** — the partner receives a reward for each payment plan whose conditions are met. Rewards from all triggered plans are added together. * **Max Tier** — only the highest-priority payment plan whose conditions are met is rewarded. The payment window defines the period during which the client can still reach a higher tier before the reward is finalised. *** **Active** Whether the CPA program is active: * **Yes** — the program is active and partners can earn rewards. * **No** — the program is inactive and no new rewards are created. *** **Created** The date and time when a CPA program was created. *** **Updated** The date and time when a CPA program was last updated. ## Edit a CPA program [#edit-a-cpa-program] To edit a CPA program, click the **Edit** icon next to the program in the list, or click **Edit** on the program details page. The following fields can be edited: * **Name** — the name of the program. * **Description** — the description of the program. Reward Currency and Payment Mode cannot be changed after the program is created. ## Create a CPA program [#create-a-cpa-program] To create a CPA program: 1. Click **Create**. 2. Fill in the required fields: * **Name** — enter a name for the CPA program. * **Description** — optionally, enter a description. * **Reward Currency** — select the currency in which partner rewards will be paid. * **Payment mode** — select how rewards are calculated. 3. If **Max Tier** is selected as the payment mode, specify the **Payment Window (days)**. This is the period during which a client must meet conditions to trigger a reward. 4. Click **Save**. After creating a program, add [payment plans](payment-plans) and conditions to define the reward structure. ## Program details [#program-details] To access program details, click the **program name**. The page displays the program settings and the list of associated [payment plans](payment-plans), organized in the following tabs: * **General** — program settings. * **CPA Payment Plans** — the payment plans associated with this program. * **Client Acquisitions** — clients referred by partners who have fulfilled the program conditions. See [CPA acquisitions](cpa-acquisitions). ### Activate a program [#activate-a-program] A CPA program can only be activated if it has at least one active payment plan with at least one condition. To activate a program, click **Activate**. To deactivate an active program, click **Deactivate**. Deactivating a program stops new rewards from being created but does not affect rewards already in progress. ### Assign to a partner group [#assign-to-a-partner-group] A CPA program must be assigned to a partner group to take effect. Partners in the group will earn CPA rewards when their referred clients meet the program conditions. To assign a CPA program to a partner group, go to **Program** → **Types**, open the group settings, and select the program in the **CPA Program** field on the **Preferences** tab. ## Filter data [#filter-data] You can filter the data displayed in the CPA programs list using the following criteria: * **Name** — enter a program name to search for programs with a matching name. * **Payment Mode** — select a payment mode to display programs with this mode. * **Active** — select a status to display active or inactive programs. * **Date range** — select a start and end date to display programs created during the specified period. **See also:** * [Payment plans](payment-plans) * [CPA acquisitions](cpa-acquisitions) * [CPA payments](cpa-payments) Each [CPA program](cpa-programs) contains one or more payment plans. A payment plan defines the set of conditions a referred client must meet for the partner to earn a reward. ## Payment plan list [#payment-plan-list] View the following information for each payment plan: **Name** The name of a payment plan. *** **Payment Amount** The reward amount paid to the partner when the plan conditions are met. *** **Priority** The priority of the plan. Only used in **Max Tier** mode — when a client qualifies for multiple plans, only the plan with the highest priority is rewarded. In **Cumulative** mode, priority has no effect. If two plans have the same priority in **Max Tier** mode, the behavior is undefined — only one plan will be rewarded but the result is not deterministic. Always assign a unique priority to each plan to avoid ambiguity. *** **Conditions** The conditions configured for the payment plan. *** **Created** The date and time when the payment plan was created. ## Edit a payment plan [#edit-a-payment-plan] To edit a payment plan, open the CPA program in edit mode and click the **Edit** icon next to the plan. The following fields can be edited: * **Name** — the name of the plan. * **Description** — the description of the plan. * **Payment Amount** — the reward amount. * **Priority** — the plan priority. * **Conditions** — add or remove conditions. Payment Amount and conditions cannot be changed while the CPA program is active. Deactivate the program first, make the changes, then reactivate it. ## Delete a payment plan [#delete-a-payment-plan] To delete a payment plan, open the CPA program in edit mode and click the **Delete** icon next to the plan. A payment plan cannot be deleted while the CPA program is active. Deactivate the program first. ## Add a payment plan [#add-a-payment-plan] To add a payment plan to a CPA program: 1. Open a CPA program in edit mode (click **Edit**). 2. In the **CPA Payment Plans** section, click **Create**. 3. Fill in the required fields: * **Name** — enter a name for the payment plan. * **Description** — optionally, enter a description. * **Payment Amount** — enter the reward amount to pay to the partner when conditions are met. * **Priority** — set the priority of the plan. Only applies in **Max Tier** mode — when a client qualifies for multiple plans, only the plan with the highest priority is rewarded. * **Conditions** — select one or more conditions the referred client must fulfill. For condition-specific options, see [Condition types](payment-plans#condition-types). 4. Click **Save**. Conditions cannot be added to or removed from a payment plan while the CPA program is active. Deactivate the program first, make the changes, then reactivate it. ## Condition types [#condition-types] **Registration** The client registered in the B2CORE UI by clicking the partner's referral link. No additional fields. *** **KYC Approved** The client passed the KYC verification at the specified level. * **KYC Level** — the verification level the client must reach. The available levels depend on the project configuration. *** **Minimum Deposit** The client deposited at least the specified amount. * **Amount** — the minimum deposit amount. * **Currency** — the currency of the deposit. A payment plan can have multiple conditions selected. All selected conditions must be met for the partner to earn the reward. **See also:** * [CPA programs](cpa-programs) * [CPA acquisitions](cpa-acquisitions) ## Account list [#account-list] The following information is provided on each account: **Account** The account number. Click it to view [account details](accounts#account-details). *** **Client ID** The partner identifier in the B2CORE UI. *** **Contact email** The partner email. *** **IB name** The partner name. *** **IB type** The partnership program. *** **Created** The date and time when an account was created. ## Account details [#account-details] To view details, click the **account number** or . The page is divided into the following tabs: On this tab, you can view detailed information about an account. **Account** The account number. *** **Balance** The current balance on an account. *** **Introducing broker** The partner name. *** **Type** The account type. *** **Created** The date and time when an account was created. On this tab, you can view reward-related transactions made on a currently selected account. For a detailed description of the fields, see [Transactions](transactions). ## Currency list [#currency-list] View the following information for each currency: **Name** The currency name. *** **Alias** The currency designation used on a specific trading platform. *** **Alphabetic code** The alphabetic currency code. For fiat currencies, the codes are as per ISO 4217; for cryptocurrencies, conventional coding is used. *** **Numeric code** The numeric currency code. For fiat currencies, the codes are as per ISO 4217; for cryptocurrencies, conventional coding is used. *** **Minor unit** The maximum number of digits after a decimal separator, indicating the decimal precision with which the amounts in a currency are displayed. *** **Sign** The currency symbol. *** **Class** The currency category. Possible values: * Fiat * Crypto *** **Created** The date and time when a currency was added. ## Currency details [#currency-details] To view details, click the **currency number** or . Here you can view and customize currency settings. All fields, except for **Created**, can be modified. On this page, you can view a list of failed IB reward payments along with the error details. The following information is provided about each failed payment: **ID** The identifier of the failed payment. *** **Error Reason** The reason why the payment failed. *** **Error Message** The detailed error message. *** **Transaction ID** The identifier of the related transaction. *** **Account ID** The identifier of the related account. *** **Created At** The date and time when the failed payment was registered. At least one provider is configured by default. For custom crypto assets, you can manually specify a static exchange rate for it. ## Provider list [#provider-list] View the following information for each rate provider: **Priority** The rate provider priority. If you have multiple providers configured, data requests are sent based on their priority. If the highest priority provider doesn’t respond, the request moves to the next provider in line, continuing in this manner until the data is received. *** **Name** The rate provider name. **Created** The date and time when a rate provider was added. ## Rate provider details [#rate-provider-details] To view details, click the **provider name** or . The page is divided into the following tabs: On this tab, you can customize rate provider settings. **Provider** The rate provider. *** **Priority** The rate provider priority. This value can be modified. *** **Name** The rate provider name. This value can be modified. *** **Base currency** *Available for custom rate providers only*. The base currency. This value can be modified. *** **Quote currency** *Available for custom rate providers only*. The quote currency. This value can be modified. *** **Rate** *Available for custom rate providers only*. The exchange rate. This value can be modified. *** **Created** The date and time when a rate provider was added. *Not available for custom static rates*. On this tab, you can run diagnostics and check the connection to a provider, by clicking the **Test connection** button. ## Reward list [#reward-list] View the following information for each reward: **Trade execution time** The date and time when a trade was executed. *** **Trade ID** The identifier of a trade for which a reward was paid. *** **Trade account type** The account type. Possible values: * Default * Payment account * PAMM investment account * PAMM master account *** **Currency** The reward currency. *** **Amount** The reward amount. *** **Level** The client level. *** **IB name** The name of a partner. *** **IB email** The partner email. *** **IB type** The partnership program. *** **Transaction ID** The identifier of a transaction that resulted in crediting a reward to a partner's account. Multiple rewards can be paid as part of a single transaction. **State** The current status of a reward payment: * **Done** — the reward was successfully credited to a partner's account. * **Pending** — the reward was calculated, but not yet credited to a partner's account. * **Canceled** — the reward was canceled and debited from a partner's account. *** **Created** The date and time when a reward was calculated. ## Reward details [#reward-details] To edit information about a reward, click the **trade execution time** or . The detailed information contains the following: **Reward state** The current status of a reward payment: * **Done** — the reward was successfully credited to a partner's account. * **Pending** — the reward was calculated, but not yet credited to a partner's account. * **Canceled** — the reward was canceled and debited from a partner's account. *** **Reward amount** The total amount rewarded. *** **Transaction ID** The transaction identifier. *** **Level** The partner's level. *** **Introducing broker** The name of a partner. *** **Payment plan** The formula for setting up the rewards calculation. To learn more, refer to [Payment plans](../../payment-plans). *** **Level ratio** The multiplier based on which rewards are calculated considering a partner's level. *** **Personal ratio** The individual multiplier based on which rewards are calculated for a specific client. *** **Tier ratio** The multiplier based on which rewards are calculated considering a specific tier. *** **Tier trading volume** The trading volume defined for a tier. *** **Tier active traders** The number of active traders defined for a tier. *** **Tier name** The tier name. *** **Tier period** The number of days during which a partner must meet tier objectives to receive increased rewards. *** **Created** The date and time when a reward was paid. *** **Trading platform** The trading platform name. *** **Trade account type** The account type. Possible values: * Default * Payment account * PAMM investment account * PAMM master account *** **Trading account** The account number of a client who executed a trade. *** **Trade ID** The trade identifier. *** **Trade execution time** The date and time when a trade was executed. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The symbol code. *** **Quote currency** The quote currency traded. *** **Contract size** The trade amount. *** **Price** The execution price. *** **Volume, lots** The trade volume, in lots. *** **Volume, USD** The trade volume, in USD. *** **Commission** The paid commission amount. *** **Client email** The email of a client who executed a trade. *** **Client ID** The client identifier in the B2CORE UI. ## Transactions list [#transactions-list] View the following information for each transaction: **ID** The transaction identifier. *** **Currency** The currency in which a reward was paid. *** **Amount** The amount of a transaction. *** **Account number** The partner account number. *** **Client ID** The identifier of a client profile. *** **IB name** The name of a partner. *** **IB email** The partner email. *** **IB type** The partnership program. *** **Status** The current status of a transaction. Possible values: * **Failed** — the transaction failed due to internal technical reasons. This is a final status. * **Invalid** — the transaction amount is `0`, the transaction won't be processed. This is a final status. * **Processing** — the transaction is currently being credited, the status will be changed soon. * **Transferred** — the transaction was successfully credited. This is a final status. *** **Processed** The date and time when a transaction was credited. *** **Created** The date and time when a transaction was created. ## Transaction details [#transaction-details] To view details, click the **transaction ID** or . The page is divided into the following tabs: On this tab, you can view detailed information about a transaction. **Status** The current status of a transaction. Possible values: * **Failed** — the transaction failed due to internal technical reasons. This is a final status. * **Invalid** — the transaction amount is **0** (zero), the transaction won't be processed. This is a final status. * **Processing** — the transaction is currently being credited, the status will be changed soon. * **Transferred** — the transaction was successfully credited. This is a final status. *** **Amount** The amount of a transaction. *** **Side** The transaction side. Possible values: * Debit * Credit *** **Account** The account number of a partner. *** **Client ID** The identifier of a client profile. *** **Contact email** The partner email. *** **IB name** The name of a partner. *** **IB type** The partnership program. *** **Rewards** The number of rewards paid by this transaction. *** **Processed** The date and time when a transaction was credited. *** **Created** The date and time when a transaction was created. On this tab, you can view the rewards credited to a partner's account by this transaction. For more details, refer to [Rewards](rewards). ## Accounts list [#accounts-list] View the following information for each trading account: **Platform** The trading platform name. *** **Group** The account group defined on the platform. *** **Type** The account type. Possible values: * Default * Payment account * PAMM investment account * PAMM master account *** **Account** The account number on a trading platform. This is a link to [account details](accounts#account-details). *** **Currency** The currency in which an account is denominated. *** **Trades** The number of trades made on the account. *** **Deposits** The amount deposited to an account. *** **Withdrawals** The amount withdrawn from an account. *** **Balance** The balance on an account. *** **Credit** The credit on an account. *** **Equity** The account equity. *** **Commission** The commissions paid for operations on an account. *** **Swap** The swap on an account. *** **Profit** The profit on an account, before commissions. *** **PnL** The profit-loss value calculated for an account. *** **Name** The name of a client profile. *** **Email** The client email. *** **Client ID** The identifier of a client profile. *** **Archived** Indicates whether an account is archived on a trading platform. *** **Enabled** If enabled, the account participates in data sync and calculation of rewards. All accounts are enabled by default (the **Enabled** field is set to **Yes**). You can change the this status in the account details. *** **Hidden** If **Yes**, an account isn't shown to a partner. This means the account is included in a [group](groups) for which the **Hide accounts** setting is enabled. *** **Created** The date and time when an account was created on a trading platform. ## Account details [#account-details] To view details, click the **account number** or . The page is divided into the following tabs: On this tab, you can view general information about an account. On this tab, you can view the deposit history of an account. For a detailed description of the fields, see [Deposits](deposits). On this tab, you can view the withdrawal history of an account. For a detailed description of the fields, see [Withdrawals](withdrawals). On this tab, you can view trading history of an account, with the following data provided on each trade: **Trade execution time** The date and time when a trade was executed. *** **Platform** The name of a platform on which a trade was executed. *** **Trade ID** The trade identifier. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The symbol code. *** **Volume, lots** The volume traded, in lots. *** **Position** The current position state. Possible values: * Closed * Open *** **Rewards** The amount of rewards paid for a trade. ## Deposit list [#deposit-list] By default, the list is sorted by date in the descending order (the most recent deposits appear at the top of the list). For a list of deposits made by a client, navigate to the **Program** > **Clients** > **Details** > **Deposits** tab. For a list of deposits made on a trading account, navigate to the **Platforms** > **Accounts** > **Details** > **Deposits** tab. View the following information for each deposit: **Date** The date and time when a deposit operation was made. *** **Platform** The trading platform name. *** **Account** The trading account number. *** **Currency** The deposit currency. *** **Amount** The deposit amount. *** **ID** The deposit identifier. ## Deposit details [#deposit-details] To view details, click the **deposit ID** or . The detailed information contains the following: **Trading platform** The trading platform name. *** **Transaction ID** The unique identifier of a deposit operation on a trading platform. *** **Trading account** The trading account number. *** **Base currency code** The deposit currency. *** **Amount** The deposit amount. ## Group list [#group-list] View the following information for each group: **Platform** The trading platform name. *** **Group** The group of trading accounts as set on a trading platform. *** **Trades** The number of trades made by IB clients. *** **Created** The date and time when a group was created on a trading platform. ## Group details [#group-details] To view details, click the **group name** or . The page is divided into the following tabs: On this tab, you can view the general configuration of a group. **Platform** The trading platform name. *** **Group** The group of trading accounts, as defined on the trading platform. *** **Currency** The currency in which the trading accounts in this group are denominated. *** **Lot size** The lot size. The standard lot size of **1.00** is used by default; the lot size of **0.01** is used for groups providing for greater decimal precision. *** **Hide accounts** If **Yes**, accounts included in this group are hidden and aren't shown to a partner. *** **Archived** If **Yes**, this group was archived on the trading platform. *** **Created** The date and time when a group was created on the trading platform. On this tab, you can view information about trades. **Trade execution time** The date and time when a trade was executed. *** **Platform** The trading platform name. *** **Trade ID** The trade identifier. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The symbol code. *** **Volume** The volume traded. *** **Position** The current position state. Possible values: * Open * Closed *** **Rewards** The amount of rewards paid for a trade. ## Platform list [#platform-list] The page data is presented in a table form, with the table columns providing the following information: **ID** The platform identifier in the B2CORE IB. *** **Name** The trading platform name. *** **Status** The trading platform status. Possible values: * Enabled * Disabled *** **Trades** The number of trades made on a platform. *** **Created** The date and time when a platform was connected to your IB. ## Platform details [#platform-details] To view details, click the **platform name** or . The page is divided into the following tabs: On this tab, you can view trading platform settings. Learn about the provider, credentials, and date and time when a platform was edited. Click the **Platform ID** link to navigate to the **Edit platform** page where you can view the details about a provider and configure its settings. After you have finished configuring a platform, click **Save** to apply the changes. On this tab, you can view information about drivers. The **Report** and **WEBAPI** drivers are configured by default. You can specify the driver **Priority** so that if a driver with a higher priority fails, a backup driver with a lower priority is used instead. If all drivers fail, the service reports that it can't operate properly. After a driver is added, it's automatically assigned the lowest priority. The priority can be changed later on when configuring drivers. You can run diagnostics by clicking the **Test connection** button. Click the driver name to navigate to the details page where you can view the details about a driver and configure its settings. After you have finished configuring a driver, click **Save** to apply the changes. ## Symbol list [#symbol-list] View the following information for each symbol: **Platform** The trading platform name. *** **Trading group** *Applicable only for MetaTrader 4, MetaTrader 5, cTrader.* The account group, as defined on the trading platform. *** **Symbol group** *Applicable only for MetaTrader 5.* The symbol group, as defined on the trading platform. *** **Symbol** The symbol code. *** **Contract size** The contract size. *** **Quote currency code** The code of the quote currency. *** **Archived** If **Yes**, this symbol was archived on the trading platform. *** **Trades** The total number of trades by a symbol. *** **Created** The date and time when a symbol was created on a trading platform. ## Symbol details [#symbol-details] To view details, click the **symbol name** or . The page is divided into the following tabs: On this tab, you can view detailed information about a symbol. **Trading platform** The trading platform name. *** **Trading group** *Applicable only for MetaTrader 4, MetaTrader 5, cTrader.* The account group, as defined on the trading platform. *** **Symbol** The symbol code. *** **Quote currency** The second currency listed in a currency pair. *** **Contract size** The contract size. *** **Archived** If **Yes**, this symbol was archived on the trading platform. *** **Created** The date and time when a symbol was created. On this tab, you can view, add and modify payment plans configured for symbols. **#** The sequence number. *** **Type** The partnership program. *** **Payment plan** The configuration of rewards calculation. *** **Position** The position status. Possible values: * Open * Closed *** **Created** The date and time when a payment plan was created. ## Trade list [#trade-list] View the following information for each trade: **Trade execution time** The date and time when a trade was executed. *** **Platform** The name of a trading platform. *** **Account type** The account type. Possible values: * Default * Payment account * PAMM investment account * PAMM master account *** **Account** The number of a trading account. *** **Trade ID** The trade identifier on the trading platform. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The trade symbol. *** **Volume, lots** The volume traded, in lots. *** **Position** The current position state. Possible values: * Open * Closed *** **Reversal** *Applicable for cTrader only.* If **Yes**, the position was reversed as a result of the trade. For more information, refer to [cTrader documentation](https://help.ctrader.com/ctrader-web/interface/trade-watch/#reverse-and-double-position). *** **Rewards** The number of rewards paid for a trade. ## Trade details [#trade-details] To view details, click the **Trade execution time**, **Trade ID** or . The page is divided into the following tabs: On this tab, you can view detailed information about a trade. **Trading platform** The name of a trading platform. *** **Trade account type** The account type. Possible values: * Default * Payment account * PAMM investment account * PAMM master account *** **Trading account** The account number of a client that has executed a trade. *** **Trade ID** The trade identifier on the trading platform. *** **Trade execution time** The date and time when a trade was executed. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The symbol name. *** **Quote currency** The alphabetic code of a quote currency. *** **Contract size** The contract size. *** **Price** The trade execution price. *** **Volume, lots** The volume traded, in lots. *** **Volume, USD** The volume traded, in USD. *** **Commission** The total amount of paid commissions. *** **Reversal** *Applicable for cTrader only.* If **Yes**, the position was reversed as a result of the trade. For more information, refer to [cTrader documentation](https://help.ctrader.com/ctrader-web/interface/trade-watch/#reverse-and-double-position). *** **Client email** The client email. *** **Client ID** The client identifier. On this tab, you can view detailed information about rewards paid for trades. This tab is empty if no rewards were paid. **Level** The level of a client. *** **Currency** The currency in which a reward was paid. *** **Amount** The amount of a reward. *** **IB name** The partner name. *** **IB email** The partner email. *** **IB type** The name of partnership program. *** **State** The current status of a reward payment. Possible values: * **Done** — the reward was successfully credited to a partner's account. * **Pending** — the reward was calculated, but not yet credited to a partner's account. * **Canceled** — the reward was canceled and then debited from a partner's account. *** **Created** The date and time when a reward was calculated. ## Withdrawal list [#withdrawal-list] The list is sorted by date in descending order by default (newer withdrawals appear at the top of the list). To view a list of withdrawals specified by a client, navigate to the **Program** > **Clients** > **Details** > **Withdrawals** tab. To view a list of withdrawals specified by a trading account, navigate to the **Platforms** > **Accounts** > **Details** > **Withdrawals** tab. View the following information for each withdrawal: **Date** The date and time when a withdrawal operation was executed. *** **Platform** The trading platform name. *** **Account** The account number on a trading platform. *** **Currency** The currency in which a withdrawal operation was executed. *** **Amount** The amount of a withdrawal operation. *** **ID** The identifier withdrawal operation. ## Withdrawal details [#withdrawal-details] To view details, click the **withdrawal ID** or . The detailed information contains the following: **Trading platform** The trading platform name. *** **Transaction ID** The unique identifier of a withdrawal operation on a trading platform. *** **Trading account** The account number on a trading platform. *** **Base currency code** The currency in which a withdrawal operation was executed. *** **Amount** The amount of a withdrawal operation. The B2CORE IB API is currently restricted and **not** publicly available. ## App list [#app-list] View the following information for each app: **App name** The app name. *** **Registration date** The date and time when an app was registered. ## App details [#app-details] To view details, click the **app name** or **pencil icon**. The detailed information contains the following: **App name** The app name. *** **Client ID** The public identifier of your app. *** **Client secret** The private identifier of your app, which is used to verify the client's identity when accessing the system via the API. Your **Client ID** and **Client secret** are used to verify your identity. To properly protect you and your clients, please make sure that these values are kept in a secure storage. **Registration date** The date and time when an app was registered. Date and time values in the B2CORE UI are displayed according to these settings. The values on this page are read-only and can't be modified. On this page, a connection to the IB server is set up. The **API status** field on this page indicates the current API connection status. The most common statuses are listed below: * `Running` — the IB server is functioning properly. * `Maintenance` — the IB server is being updated. * `NotFoundHttpException` — an incorrect **API Base URL**. * `SSL Certificate Problem` — the certificate has expired. This page contains current versions of the B2CORE IB and a link to Release notes. ## Client list [#client-list] View the following information for each client: **Registration date** The date and time when a client was registered. *** **Name** The name of a client. This is a link to [client details](clients#client-details). *** **Country** The client's location. *** **Email** The client's email address. *** **Client ID** The client identifier used in the B2CORE UI. *** **IB type** The partnership program joined by a partner who referred the client. *** **IB** The name of a partner who referred the client. This is a link to [partner details](introducing-brokers#partner-details). ## Client details [#client-details] To access details, click the **client name** or . The page is divided into the following tabs: On this tab, you can view the client identifier, tags, chain, name, email, country, and registration date. On this tab, you can view a client's trading accounts. For a detailed description of the fields, see [Accounts](../platforms/accounts). On this tab, you can view a client's deposit history. For a detailed description of the fields, see [Deposits](../platforms/deposits). On this tab, you can view a client's withdrawal history. For a detailed description of the fields, see [Withdrawals](../platforms/withdrawals). On this tab, you can view a client's trading history. For a detailed description of the fields, see [Trades](../platforms/trades). ## Partner list [#partner-list] View the following information for each partner: **Name** The name of a partner. This is a link to [partner details](introducing-brokers#partner-details). *** **Country** The country specified by a partner during registration and a KYC procedure. *** **Email** The partner email. *** **Client ID** The partner identifier used in the B2CORE UI. *** **Direct clients** The number of partner's [direct clients](#user-content-fn-1)[^1]. *** **Trading volume, lots** The total trading volume, in lots, for which rewards were paid, including the volume traded by all of the partner's clients regardless of their level. Use a quick filter to include or exclude clients with zero trading volume. *** **Trading volume, USD** The total trading volume, in USD, for which rewards were paid, including the volume traded by all of partner's clients regardless of their level. Use a quick filter to include or exclude clients with zero trading volume. *** **Reward amount** The total amount of rewards paid to a partner. *** **IB type** The partnership program joined by a partner. *** **Master** Indicates if a partner is assigned the Master[^2] status. *** **Registration date** The date and time when a partner joined a partnership program. ## Partner details [#partner-details] To access details, click the **partner name** or . The page is divided into the following tabs: On this tab, you can view the partner profile information and do the following: * Configure payment preferences * Change a program joined by a partner * Block a partner On this tab, you can view a partner's banner performance data. For a detailed description of the fields, see [Banners](../promo/banners/). On this tab, you can view a partner's link performance data and generate a QR code. For a detailed description of the fields, see [Landings](../promo/landings). On this tab, you can view the click performance for a partner's links and banners. For a detailed description of the fields, see [Analytics](../promo/analytics/clicks). On this tab, you can view a partner's direct clients and sub-IB clients. For a detailed description of the fields, see [Clients](clients). On this tab, you can view a list of accounts of all partner's clients. For a detailed description of the fields, see [Accounts](../platforms/accounts). On this tab, you can view a partner's account deposit history. For a detailed description of the fields, see [Deposits](../platforms/deposits). On this tab, you can view a partner's account withdrawal history. For a detailed description of the fields, see [Withdrawals](../platforms/withdrawals). On this tab, you can view a partner's trading history. For a detailed description of the fields, see [Trades](../platforms/trades). On this tab, you can view the rewards paid to a partner. For a detailed description of the fields, see [Rewards](../payments/rewards). On this tab, you can view reports for paid rewards. Use the **Group by** option to view trades according to a specific timeframe (previous hour, day, week, month, year). To view trades over a custom timeframe, enter the **Period start** and **Period end** dates. For more details, refer to [Payment report](../reports/payment-report). **See also:** * [How to register a partner](../../how-to-articles/how-to-register-a-partner) * [How to block a partner](../../how-to-articles/how-to-block-a-partner) * [How to configure personal rewards](../../how-to-articles/how-to-configure-personal-rewards) * [How to configure a Master IB](../../how-to-articles/how-to-configure-a-master-ib) [^1]: Clients who signed up to the B2CORE UI by a referral link of a partner. [^2]: Key partners with personal conditions. To learn more, see [#master-ib](../../key-terms#master-ib "mention") On this page, you can reassign clients and sub-IBs from one Introducing Broker to another without manually exporting and importing IB-related data. The following options are available: * **Reassign All** — reassign all users from one IB to another. Specify the following fields: * **Source IB email** — the email address of the IB from which users are reassigned. * **New IB email** — the email address of the IB to which users are reassigned. * **Reassign One** — reassign an individual client or sub-IB to another IB. Specify the following fields: * **Client / Sub-IB email** — the email address of the client or sub-IB to be reassigned. * **Source IB email** — the email address of the IB from which the user is reassigned. * **New IB email** — the email address of the IB to which the user is reassigned. Click **Preview** to review the reassignment before applying it. ## Reassignment history [#reassignment-history] The list of performed reassignments is displayed below, providing the following information: **Type** The reassignment type: `Reassign All` or `Reassign One`. *** **Introducing brokers** The source and destination IBs of the reassignment. *** **Status** The current status of the reassignment. *** **Users** The number of reassigned users. *** **Created** The date and time when the reassignment was created. ## Type list [#type-list] View the following information for each program: **Name** The name of a partnership program. This is a link to [type details](types#type-details). *** **Levels** The number of levels[^1] configured for a partnership program. *** **Tiers** The number of tiers[^2] configured for a partnership program. *** **Introducing brokers** The number of partners participating in a program. *** **Direct clients** The number of your partners' [direct clients](#user-content-fn-3)[^3]. *** **Reward amount** The number of rewards paid to your partners. *** **Created** The date and time when a partnership program was created. ## Type details [#type-details] To access details, click the **type name** or . The page is divided into the following tabs: On this tab, you can view the partnership program settings. **Name** The name of a partnership program. *** **Description** The description of a partnership program. *** **Registration** The options of joining a partnership program. Possible values: * **Auto** — each client signing up to the B2CORE UI automatically becomes a partner. If multiple partnership programs are available, an IB account is created for each program. * **Private** — clients are added to a partnership program by a Back Office admin. * **Public** — clients can view available partnership programs in the B2CORE UI and choose which programs they join. * **Restricted** — clients can join a partnership program only using a link provided by a participant of another or the same program. The program identifier is indicated in the **Restriction** field. *** **Approvement** *Applicable only for Public or Restricted registration.* If **Enabled**, clients join a partnership program only after their [joining requests](#user-content-fn-4)[^4] are approved by a Back Office admin. *** **Masked email** If **Enabled**, client names and emails aren't visible to a partner. *** **Hidden levels** If **Yes**, all configured levels are displayed. Disabled by default. *** *** **Tier period** The number of days in which the targets set on the **Tiers** tab must be achieved by a partner to receive an increased reward. *** **Currency** The currency in which rewards to partners are paid. The currency is product-specific and can't be edited. *** **CPA Program** The CPA program assigned to this partnership program. Partners in this program will earn CPA rewards when their referred clients meet the CPA program conditions. Only active CPA programs are available for selection. If the assigned program is later deactivated, it remains linked to the partnership program and is marked as inactive. *** **Created** The date and time when a partnership program was created. On this tab, you can view all the available symbols on connected trading platforms. You can choose different [payment plans](../../payment-plans) for different symbols. Trading platforms can be connected and disconnected in the [Platforms](../platforms/) section. **Platform** The name of a trading platform. *** **Trading group** *Applicable only for MetaTrader 4, MetaTrader 5, cTrader.* The account group, as defined on the trading platform. *** **Symbol group** *Applicable only for MetaTrader 5.* The symbol group, as defined on the trading platform. *** **Symbol** The name of a symbol. This is a link to symbol details. *** **Payment plan** The [payment plan](../../payment-plans) set up for a symbol. *** **Position** The state of positions for which rewards are paid. Possible values: * Open * Closed * Open & Closed On this tab, you can view the configured levels. Define the number of partner levels to reward and specify the multiplier used for calculating rewards. Level 1 is created by default. Create an unlimited number of levels depending on your partnership program design. **Level** The sequence number of a level. *** **Ratio** The rewards multiplier. *** **Created** The date and time when a level was created. *** **Updated** The date and time when a level was last updated. On this tab, you can view configured tiers and define targets for your partners. **Name** The name of a tier. *** **Active traders** The number of clients that a partner must introduce to receive an increased reward. These clients should execute at least one trade during the specified **Tier period** to be considered active traders. If 0 (zero), this benchmark is ignored during calculation of rewards. *** **Trading volume, lots** The volume, in lots, that must be traded by partner's clients. If 0 (zero), this benchmark is ignored during calculation of rewards. *** **Ratio** The reward multiplier. *** **Created** The date and time when a tier was created. *** **Updated** The date and time when a tier was last updated. On this tab, you can view the rewards paid to your partners participating in this partnership program. For a detailed description of the fields, see [Rewards](../payments/rewards). On this tab, you can view reports on paid rewards. View trades for different time intervals (hour, day, week, month, years) or view trades according to partners. To view trades over a custom timeframe, enter the **Period start** and **Period end** times. For more details, refer to [Payment report](../reports/payment-report). **See also:** * [How to create an IB type](../../how-to-articles/how-to-create-an-ib-type) * [How to change an IB type for a partner](../../how-to-articles/how-to-change-an-ib-type-for-a-partner) [^1]: Levels determine how many participants in the chain from a partner to a trader receive a reward. To learn more, see [#level](../../key-terms#level "mention") [^2]: Goals to achieve for receiving increased rewarding. To learn more, see [#tier](../../key-terms#tier "mention") [^3]: Clients who signed up to the B2CORE UI by a referral link of a partner. [^4]: To learn more about client requests, refer to [B2CORE documentation](https://docs.b2core.b2broker.com/en/back-office-requests.html). The **Landings** section is not available in the Back Office. Landing pages are configured at the system level by your B2BROKER integration team and are used by partners in their IB Room. ## How landings work [#how-landings-work] In the current version of B2CORE IB, each instance has a single referral landing page configured at the system level. This is typically the registration page of your client portal. When a partner shares their referral link, it redirects the client to this landing page with the partner's unique token appended as a query parameter: ``` {scheme}://{host}{path}?{token}={partner_token} ``` For example: `https://my.example.com/register?referral=abc123` The following parameters are configured by your B2BROKER integration team: | Parameter | Description | Default | | --------------- | ---------------------------------------------------- | ----------- | | Scheme | Protocol used for the link | `https` | | Host | Domain of your client portal | — | | Path | Path to the registration page | `/register` | | Token parameter | Query parameter name that carries the referral token | `referral` | To configure or update these settings, contact your B2BROKER integration team. ## Partner view [#partner-view] Partners can see and copy their referral links in **IB Room → Promo → Links**. On that page, partners can also: * Select a landing page from the available options * Select a language * Add UTM parameters to their link * Generate a QR code for the link Using the **Acquisition report**, you can do the following: * Identify the partners whose clients have executed at least one trade during the reporting period. If the partner's clients haven't made any transactions for the selected period, such partners aren't included in the report. * Learn whether your referral links or promo banners are being clicked. * Assess different traffic sources and see from where new clients are coming (such as specific websites, social media or other venues). * Identify particular countries where the users who clicked your referral links are located. * View the number of clients who have completed registration after clicking your referral link or banner. * View the click conversion rate. The following filter parameters are available: * **Group by** — the criteria for grouping the filtered data. You can group the data by a country/region, referrer, partner or time period (spanning from one hour to a year). * **IB type** — the partnership program. * **Start date** — the beginning of the reporting period. * **End date** — the end of the reporting period. A report is generated automatically after applying filters. Above the report table, you can find **totals** calculated over a specified time period, along with trends obtained for the one preceding it. When exporting page data, the totals aren't included in the report file. The following data is displayed on this page: **Active partners** The number of new partners whose clients have executed at least one trade during the reporting period. *** **Clicks** The number of clicks. *** **Registrations** The number of registrations. *** **Click conversion rate** The number of registrations divided by the number of clicks, expressed as a percentage. It's calculated according to the following formula: **Registrations / Clicks × 100 %**. With a **Payment** report you can: * Spot the best performing traders generating the most revenue for you. * View the rewards paid to partners during a selected period of time. * Find out about the trading volume, both in lots and USD. To group and filter data, specify the following settings: * **Group by** — indicates whether to group data by partners or a time period * **IB type** — the partnership program * **Start date** — the beginning of a reporting period * **End date** — the end of a reporting period A report is generated automatically after applying filters. Above the report table, you can find **totals** calculated over a specified time period, along with trends obtained for the one preceding it. When exporting page data, the totals aren't included in the report file. The following data is available on this page: **Active partners** The number of new partners whose clients have executed at least one trade during the reporting period. *** **Active traders** The number of traders who have executed at least one rewarded trade. *** **Trades** The number of trades for which partners were rewarded. *** **Trading volume, lots** The volume of trades for which partners were rewarded, in lots. *** **Trading volume, USD** The volume of trades for which partners were rewarded, in USD. *** **Rewards** The rewards paid (and marked as *Credited*), in USD. A savings acquisition is created when a client referred by a partner enrolls in a savings program. The acquisition tracks savings activity events for that client. ## Acquisition list [#acquisition-list] View the following information for each savings acquisition: **Client ID** The unique identifier of the referred client. *** **Client Name** The name of the referred client. *** **Partner Name** The name of the partner who referred the client. *** **Partner User ID** The unique identifier of the partner who referred the client. *** **Savings Program** The savings program in which the client enrolled. *** **Events** The savings activity events recorded for this client, such as plan creation and deposits. *** **Created** The date and time when the acquisition was recorded. ## Sort data [#sort-data] Click the **Created** column header to sort acquisitions by creation date. Click again to toggle between ascending and descending order. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Savings Program** — select a program to display acquisitions for this program. * **Partner User ID** — enter a partner user ID to display acquisitions attributed to this partner. * **Date range** — select a start and end date to display acquisitions created during the specified period. After specifying custom filter criteria, click **Apply filters** to apply the changes. Click **Reset filters** to reset all filters. **See also:** * [Savings programs](savings-programs) * [Savings payments](savings-payments) A savings payment is created when a partner earns a reward for a referred client's savings activity during a given period. ## Payment list [#payment-list] View the following information for each savings payment: **Partner User ID** The unique identifier of the partner who earned the reward. *** **Partner Name** The name of the partner who earned the reward. *** **Client ID** The unique identifier of the client whose savings activity generated the reward. *** **Savings Program** The savings program for which the reward was calculated. *** **Level** The program level at which the reward was calculated. *** **Period Date** The date of the period for which the reward was calculated. *** **Payment Amount** The reward amount. *** **Currency** The reward currency. *** **Status** The current status of a savings payment: * **Pending** — the reward has been calculated and is waiting to be processed. * **Processing** — the reward transfer is in progress. * **Processed** — the reward was successfully transferred to the partner's account. * **Succeeded** — the reward transfer was confirmed as successful. * **Failed** — the reward could not be transferred to the partner's account. * **Cancelled** — the reward was cancelled and will not be paid. *** **Created** The date and time when the savings payment was created. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Partner User ID** — enter a partner user ID to display payments for this partner. * **Partner Name** — enter a partner name to display payments for this partner. * **Status** — select a status to display payments with this status. * **Period date range** — select a start and end date to display payments for periods within the specified range. After specifying custom filter criteria, click **Apply filters** to apply the changes. Click **Reset filters** to reset all filters. **See also:** * [Savings programs](savings-programs) * [Savings acquisitions](savings-acquisitions) A savings program defines the conditions and reward rates under which partners earn rebates when their referred clients invest in savings plans. ## Program list [#program-list] View the following information for each savings program: **Name** The name of a savings program. Click the name to open the [program details](savings-programs#program-details). *** **Currency** The currency in which partner rewards are paid. *** **Active** Whether the savings program is active: * **Yes** — the program is active and partners can earn rewards. * **No** — the program is inactive and no new rewards are created. *** **Created** The date and time when a savings program was created. *** **Updated** The date and time when a savings program was last updated. ## Create a savings program [#create-a-savings-program] To create a savings program: 1. Click **Create**. 2. Fill in the required fields: * **Name** — enter a name for the program. * **Description** — optionally, enter a description. * **Currency** — select the currency in which partner rewards will be paid. 3. Click **Save**. After creating a program, add [levels](savings-programs#levels) to define the reward structure, then activate the program. Currency cannot be changed after the program is created. ## Edit a savings program [#edit-a-savings-program] To edit a savings program, click the **Edit** icon next to the program in the list. The following fields can be edited: * **Name** — the name of the program. * **Description** — the description of the program. ## Program details [#program-details] To access program details, click the **program name**. The page displays the program settings and the list of associated levels. ### Levels [#levels] Each savings program contains one or more levels. A level defines the reward rate a partner earns based on their referred clients' savings activity. View the following information for each level: **Level** The level number. *** **Reward Value** The reward rate, as a percentage applied to the client's savings amount. *** **Active** Whether the level is active. #### Add a level [#add-a-level] To add a level to a savings program: 1. Open the program details page. 2. In the **Levels** section, click **Create**. 3. Fill in the required fields: * **Level** — the level number. * **Reward Value** — the reward percentage. * **Active** — whether the level is active. 4. Click **Save**. #### Edit or delete a level [#edit-or-delete-a-level] Levels cannot be added, edited, or deleted while the savings program is active. Deactivate the program first. ### Activate a program [#activate-a-program] A savings program can only be activated if it has at least one active level. To activate a program, click **Activate**. To deactivate an active program, click **Deactivate**. Deactivating a program stops new rewards from being created but does not affect payments already in progress. ### Assign to a partner group [#assign-to-a-partner-group] A savings program must be assigned to a partner group to take effect. Partners in the group will earn savings rewards when their referred clients invest in savings plans. To assign a savings program to a partner group, go to **Program** → **Types**, open the group settings, and select the program in the **Savings Program** field on the **Preferences** tab. ## Filter data [#filter-data] You can filter the data displayed in the savings programs list using the following criteria: * **Name** — enter a program name to search for programs with a matching name. * **Active** — select a status to display active or inactive programs. * **Date range** — select a start and end date to display programs created during the specified period. After specifying custom filter criteria, click **Apply filters** to apply the changes. Click **Reset filters** to reset all filters. **See also:** * [Savings acquisitions](savings-acquisitions) * [Savings payments](savings-payments) The **Promo Banners** tab on the **Promo** page lists a preconfigured collection of promo banners that can be used to attract new clients by means of banner advertising. A **promo banner** is represented by a rectangle of a varying size and color, within which some message is displayed. In the context of banner advertising, the purpose of such banners is to attract visitors of a host website where a banner is placed and encourage them to navigate to a specified landing page. Each banner card displays its size, language, and landing type (for example, **Registration**). **Key points:** * You can configure multiple promo banners for your referral campaign. * The promo banners can be placed on websites or any other advertising platforms. * You can filter the banners displayed on this page by their size, language, or theme. * To change the number of banners displayed per page, use the **Rows per page** dropdown. ## Filter data [#filter-data] You can filter the banners displayed on this page using the following criteria: * **Size** — select a banner size to display banners of this size. * **Language** — select a language to display banners localized for this language. * **Theme** — select a theme to display banners with this theme. To change the number of banners displayed per page, use the **Rows per page** dropdown. ## Configure a banner [#configure-a-banner] To configure a promo banner: 1. From the dropdown located at the top of the page, select a **partnership program** for which you want to configure a banner. 2. Click a **banner** that you want to configure. 3. From the **Landing page** dropdown, select a landing page to which users should be navigated after clicking the banner.\ At present, only the **Sign up** page of the B2CORE UI can be used as a landing page. 4. Click **Copy** to copy the HTML code of your banner to the clipboard. The HTML code includes your unique ID. The copied HTML code can be embedded into an advertising website of your choice. The **Promo** page includes the following tabs: The same link-building controls are also available in the **Partner Link** widget on the [Partner Dashboard](../dashboard). ## Referral links [#referral-links] The **referral link** (also referred to as **Partner Link**) is a personal URL created by a partner introducing new clients to the B2CORE UI. The URL includes a unique identifier (ID) that is assigned to a partner after joining a partnership program. The ID is used to keep track of new clients introduced by each partner and calculate rewards for trades executed by their clients. A partner may have multiple IDs after joining several programs. **Key points:** * A number of referral links can be created (your referral links can be localized or global). * Every link includes a unique partner ID. * You can convert the links into [QR codes](links#qr-codes). * The links can be shared on websites, through social media, in emails, or by any other means preferred by a partner promoting the B2CORE UI. ### Create a personal link [#create-a-personal-link] To create a referral link: 1. In the dropdown located at the top of the page, select a partnership program for which you want to create a link. 2. In the **Link settings** section: * **Landing Page** — select a webpage displayed after clicking the referral link. At present, only the **Sign Up** page of the B2CORE UI can be used as a landing page. * **Language** — select a language to create a localized URL. Select **Global** to create a regular URL that doesn't indicate a particular language. 3. Optionally, you can include [UTM parameters](links#utm-parameters) in your referral link by expanding the **UTM parameters** section and specifying the needed parameters. After you've configured the link settings, your referral link is displayed on the right side of the page. You can copy the URL to the clipboard using the **Copy** button. ### UTM parameters [#utm-parameters] The UTM parameters (or *tracking tags*) are short text codes that you can include into referral links to track various metrics and assess the efficiency of your marketing strategies. You can specify the following UTM parameters: ## QR codes [#qr-codes] If required, your referral links can be converted into QR codes that users can scan to be forwarded to a landing webpage pointed by the link URL. **Key points:** * You can generate multiple QR codes for a single referral link. * The QR codes can be customized by specifying various background colors and adding icons to them. * Similar to regular referral links, the QR codes can be shared on websites, through social media, in emails, or by any other means preferred by a partner seeking to attract new clients. * The QR codes can be downloaded to your computer and then used in printed promo materials. ### Generate a QR code [#generate-a-qr-code] To generate a QR code for your referral link, click the **Generate code** button displayed on the right side of the page. Optionally, you can apply custom settings to your QR code before generating it: * **Color** — select a QR code color. * **Icon** — select an icon to be added to a QR code. After the QR code is generated: * **Download PNG** — click this button to download a PNG image of the generated QR code to your computer. * **Copy embed code** — click this button to copy the HTML code of the generated QR code to the clipboard. You can then embed this code into your website or any other promo material. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The following information is displayed in the report table: **Account ID** The trading account identifier. *** **Platform** The trading platform on which an account is created. *** **Currency** The currency in which an account is denominated. *** **Balance** The current balance on an account. *** **Credit** The credit on an account. *** **Profit** The profit earned on an account. *** **PnL** The current profit-loss value calculated for an account. *** **Trades** The total number of trades executed on an account. *** **Vol** The total trading volume on the account. *** **Lots** The total volume, in lots, traded on the account. *** **Rewards** The total amount of rewards paid to you for trades executed on the account. *** **Created** The date and time when the account was created. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Client ID** — enter a client identifier to display the data on trading accounts created by this client. * **Account ID** — enter an account identifier to display the data on this account. * **Date Range** — select a start and end date to display the data on trading accounts created during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To specify how many items to show on each page, use the **Rows per page** dropdown. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The total number of clicks, registrations, and the click conversion rate are displayed for the selected program. The following information is displayed in the report table: **Click ID** The identifier of the click on a referral link or promo banner. *** **Client ID** The client identifier. It's displayed if after clicking your referral link or promo banner, a user has signed up to the B2CORE UI and become your [direct client](#user-content-fn-1)[^1]. *** **Country** The country where a user who clicked your referral link or promo banner is located, based on the user's IP address. *** **IP Address** The IP address of a user who clicked your referral link or promo banner. *** **Link** The identifier of a referral link or promo banner that was clicked. *** **Referrer** The resource from where a user came, such as a website or social media platform. *** **Date** The date and time when a referral link or promo banner was clicked. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Client ID** — enter a client identifier to display the data on clicks made by this client. * **Country** — select a country to display the data on clicks made by users located in this country. * **Landing page** — select a landing page to display the data on clicks resulting in this page being opened. Users are navigated to this page after clicking your referral links or promo banners. * **Referrer** — specify a resource, such as a website or social media platform, to display the data on clicks made on this resource. * **Date range** — select a start and end date to display the data on clicks made during the specified period. * **Show UTM filters** — expand this section to specify [UTM parameters](../promo/links#utm-parameters) and display the data on traffic sources. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. [^1]: The client who signed up to the B2CORE UI by your referral link. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The following information is displayed in the report table: **Client ID** The client identifier. *** **Name** The full name of a client. *** **Email** The client's email address. *** **Country** The country specified by a client when signing up to the B2CORE UI. *** **Trading Volume** The total volume, in lots, traded by the client and their clients. *** **Rewards** The total amount of rewards paid to you for trades executed by the client and their clients. *** **Clients** The total number of your clients attracted by your client, both [direct clients](#user-content-fn-1)[^1] and [sub-IB clients](#user-content-fn-2)[^2]. *** **Date** The date and time when a client has signed up to the B2CORE UI after clicking your referral link or promo banner. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **SubIB**: * Select **Yes** to display a list of your [sub-IB clients](#user-content-fn-3)[^3]. * Select **No** to display a list of your [direct clients](#user-content-fn-4)[^4]. * Select **None** to display a full list of clients. * **Client ID** — enter a client identifier to display the data on this client. * **Country** — select a country to display a list of clients who specified this country when signing up to the B2CORE UI. * **Date range** — select a start and end date to display the data on clients who have signed up to the B2CORE UI during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. ## View client details [#view-client-details] To open the **Client details** page, select a client and click the client row area. On the details page, you can switch between the following tabs: On this tab, you can find information about the client identifier, name, email address, location, and level[^5]. Depending on the configuration of your partnership program, partners rewards may be calculated based on levels assigned to their clients. On this tab, you can find a list of all clients, both [direct clients](#user-content-fn-6)[^6] and [sub-IB clients](#user-content-fn-7)[^7]. On this tab, you can find a list of client trading accounts, platforms on which the accounts were created, as well as trading and balance operations made on these accounts. On this tab, you can find a list of all trades executed by a client and learn about the rewards paid to you for each trade. [^1]: Clients who signed up to the B2CORE UI by your referral link. [^2]: Clients who signed up to the B2CORE UI by your referral link and then became partners too. [^3]: Clients who signed up to the B2CORE UI by your referral link and then became partners too. [^4]: Clients who signed up to the B2CORE UI by your referral link. [^5]: Levels determine how many participants in the chain from a partner to a trader receive a reward. To learn more, see [#level](../../../broker-guide/key-terms#level "mention") [^6]: Clients who signed up to the B2CORE UI by your referral link. [^7]: Clients who signed up to the B2CORE UI by your referral link and then became partners too. The **CPA** report lists clients you have referred to the CPA program and shows how far each client has progressed through the program conditions. ## Generate a report [#generate-a-report] The following information is displayed in the report table: **Client** The unique identifier of the referred client. *** **CPA Program** The name of the CPA program to which the client was referred. *** **Steps Accomplished** The conditions from the CPA program payment plan that the client has completed. Possible steps include: * **Registration** — the client has registered using your referral link. * **KYC** — the client has completed identity verification. * **Minimum Deposit** — the client has made the minimum required deposit. *** **Created** The date and time when the acquisition was recorded. ## Sort data [#sort-data] Click the **Created** column header to sort acquisitions by creation date. Click again to toggle between ascending and descending order. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **CPA Program** — select a CPA program to display acquisitions attributed to this program. * **Date range** — select a start and end date to display acquisitions created during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The following data is displayed in the report table: **Client Email** The email address of the client who owns the account to which the deposit was made. *** **Id** The identifier of a deposit operation. *** **Account** The trading account number. *** **Currency** The deposit currency. *** **Amount** The deposit amount. *** **Date** The date and time when a deposit was made. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Platform unique value** — enter a unique identifier of a deposit operation to display the corresponding deposit. * **Account** — enter a trading account number to display the data on deposits made to this account. * **Date range** — select a start and end date to display the data on deposits made during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. The **Reports** page is a single page with the following tabs. Each tab provides its own table columns, and shares common **Filters** and **Rows per page** controls. ## Generate a report [#generate-a-report-] The following information is displayed in the report table: **Client ID** The client identifier. *** **Level** The client level[^1]. *** **Platform** The trading platform on which a trade was executed. *** **Account ID** The identifier of a trading account on which a trade was executed. *** **Trade ID** The trade identifier. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The symbols traded. *** **Volume Lot** The volume traded, in lots. *** **Reward Amount** The rewards paid to you for a trade. *** **Trade Execution Time** The date and time when a trade was executed. *** **Transaction ID** The identifier of the transaction through which the reward was paid. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Client ID** — enter a client identifier to display the data on trades executed by this client. * **Account ID**, **Trade ID**, **Transaction ID** — enter an account, trade, or transaction identifier to display the corresponding trades. * **Symbol** — specify trade symbols, such as **ETH/USD**, to display the data on trades that were made on these symbols. * **Level** — enter a client level to display the data on rewards generated by the clients assigned this level. * **Date range** — select a start and end date to display the data on trades executed during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. [^1]: Levels determine how many participants in the chain from a partner to a trader receive a reward. To learn more, see [#level](../../../broker-guide/key-terms#level "mention") The **Savings Rebates** report lists the rewards you have received for clients who invested in savings plans. ## Generate a report [#generate-a-report] The following information is displayed in the report table: **Client** The unique identifier of the client whose savings activity generated the reward. *** **Program** The name of the savings program for which the reward was calculated. *** **Level** The program level at which the reward was calculated. *** **Rebate** The reward amount paid to you. *** **Period** The date of the period for which the reward was calculated. *** **Status** The current status of the payment: * **Pending** — the reward is waiting to be processed. * **Succeeded** — the reward was successfully transferred to your account. * **Failed** — the reward could not be transferred. ## Sort data [#sort-data] Click the **Program** column header to sort payments. Click again to toggle between ascending and descending order. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Status** — select a status to display payments with this status. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. ## Generate a report [#generate-a-report] The following data is displayed in the report table: **Email** The email address of the client who executed the trade. *** **Client ID** The client identifier. *** **Platform** The trading platform on which a trade was executed. *** **Account ID** The identifier of a trading account on which a trade was executed. *** **Symbol** The symbols traded. *** **Position ID** The identifier of the position associated with the trade. *** **Trade ID** The trade identifier. *** **Side** The trade side. Possible values: * Buy * Sell *** **Position** The position status. Possible values: * Open * Closed *** **Volume** The volume traded, in lots. *** **Trade Execution Time** The date and time when a trade was executed. *** **Price** The price at which the trade was executed. *** **Swap** The swap amount charged or credited for the trade. *** **Commission** The commission charged for the trade. *** **Profit** The profit or loss generated by the trade. ## Filter data [#filter-data] You can filter the data displayed on this page using the following criteria: * **Trade ID**, **Position ID**, **Account ID** — enter a trade, position, or account identifier to display the corresponding trades. * **Date range** — select a start and end date to display the data on trades executed during the specified period. * **Email** — specify a client email to display the data on trades executed by this client. * **Client ID** — enter a client identifier to display the data on trades executed by this client. * **Side** — specify a trade side to display the corresponding trades. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The following information is displayed in the report table: **Transaction ID** The transaction identifier. *** **Wallet ID** The identifier of a wallet to which a reward was paid. *** **Rewards** The number of trades covered by a single reward payment. *** **Amount** The amount rewarded. *** **Date** The date and time when a transaction was made. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Transaction ID** — enter a transaction identifier to display the corresponding transaction. * **Wallet ID** — enter a wallet identifier to display the data on rewards paid to this wallet. * **Date range** — select a start and end date to display the data on transactions made during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The following data is displayed in the report table: **Client Email** The email address of the client who owns the account from which the withdrawal was made. *** **Account** The trading account number. *** **Currency** The withdrawal currency. *** **Amount** The withdrawal amount. *** **Id** The identifier of a withdrawal operation. *** **Date** The date and time when a withdrawal operation was made. ## Filter data [#filter-data] You can filter the data displayed on this page using the following criteria: * **Platform unique value** — enter a unique identifier of a withdrawal operation to display the corresponding withdrawal. * **Account** — enter a trading account number to display the data on withdrawals made from this account. * **Date range** — select a start and end date to display the data on withdrawals made within the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. If the default list doesn't meet your partnership program requirements, you can add new countries using the **Create** button or modify them according to your preferences using the **pencil icon**. The following information is provided about each country: **Name** The name of a country. *** **Alpha-2 code** The two-letter country code, as per ISO 3166. *** **Alpha-3 code** The three-letter country code, as per ISO 3166. *** **Numeric code** The numeric country code, as per ISO 3166. *** **Geographic region** The geographic subregion, as per ISO 3166. *** **Created** The date and time when an entity was added. By default, you can use the service which determines the client's geolocation based on the IP address. You can edit the available geolocation services or add custom ones. ## Providers list [#providers-list] The following information is provided about each provider: **Priority** The provider priority. If you have multiple providers configured, data requests are sent based on their priority. If the highest priority provider doesn’t respond, the request moves to the next provider in line, continuing in this manner until the data is received. *** **Name** The name of a provider. This is a link to provider details. *** **Created** The date and time when a provider was added. ## Provider details [#provider-details] To access details, click the **provider name** or **pencil icon**. Here you can adjust provider settings. The page is divided into the following tabs: On this tab, you can view general information on a provider, as well as change its name and priority. On this tab, you can view general information on a database, including the number of records. On this tab, you can run diagnostics and check the connection to a provider, by clicking the **Test connection** button. View the following information for each attack: **IP Address** The client IP address from which an attack was registered. *** **Incidents** The number of failed attempts to obtain a token using invalid credentials. *** **Created** The date and time when an attack was registered. View the following information for each authentication: **IP Address** The client IP address from which the authentication was made. *** **Client ID** The client identifier. *** **User-Agent** The User-Agent data. *** **Created** The date and time when a user was authenticated. **Authorization** is a successful obtaining of an access token using provided credentials. View the following information for each authorization: **IP Address** The client IP address from which the authorization was made. *** **Client ID** The client identifier. *** **User-Agent** The User-Agent data. *** **Created** The date and time when a token was obtained. *** **Updated** The date and time when a token was last refreshed. *** **Expires** The date and time when a token expires. Any IP address from which multiple failed attempts to authorize are made is automatically blocked for a certain period of time. Such addresses are added to a blacklist, along with the IP addresses that were blocked manually. View the following blacklist settings: **Enabled** The current access permissions set for an IP address. *** **Auth attempts** The maximum number of attempts to authorize or authenticate made from an IP address before it's added to a blacklist. *** **Deny, seconds** The time period for which an IP address is blocked, in seconds. An **incident** is a failed attempt to obtain a token using invalid credentials. If the number of incidents exceeds the **Auth attempts** threshold set on the **Preferences** > **Security** > **Blacklist** page, it's classified as an [attack](attacks). View the following information for each incident: **IP Address** The client IP address from which an incident was registered. *** **User-Agent** The User-Agent data. *** **Fingerprint** The device fingerprint data. *** **Requests** The amount of failed attempts to obtain a token with invalid credentials. *** **Attack** Indicates whether the incident is considered an attack. *** **Created** The date and time when an incident was registered. View the following information for each IP address: **IP Address** The IP address. *** **Policy** The access policy. Possible values: * **allow** — access to the IB platform is allowed from this IP address. * **deny** — access to the IB platform is denied from this IP address. *** **Time to live** *(optional)* The time period for which a policy holds, in seconds. *** **Expires** The date and time when a policy expires. *** **Created** The date and time when a policy was added. Before enabling a whitelist, make sure **all** trusted IPs are assigned the **allow** policy on the **Preferences** > **Security** > **IP addresses** page. Set **Enabled** to **Yes** to allow access only from specific IP addresses and deny access from all other IPs. ## Click list [#click-list] View the following information for each click: **Date** The date and time when a click was made. This is a link to click details. *** **IP address** The IP address from which registration was completed. *** **Latitude**, **Longitude** The geographical coordinates of a newly registered client. *** **Country** The country of a newly registered client, according to the IP address. *** **Landing page** The landing page to which a referral link is pointing. *** **URL** The resource identifier. *** **UTM Campaign** The URI parameter that specifies an individual campaign name. *** **UTM Content** The URI parameter that’s used to differentiate similar content or links within the same ad. For example, if you have two call-to-action links within the same email message, you can use **UTM Content** and set different values for each so you can tell which version is more effective. *** **UTM Medium** The URI parameter that specifies advertising or marketing media, for example: cpc, banner, email. *** **UTM Source** The URI parameter that identifies an advertiser, site, publication, that’s sending traffic to your property, for example: google, youtube. *** **UTM Term** The URI parameter that identifies paid search keywords. *** **Referrer** An HTTP header identifying the address of a web page from which a resource was requested. *** **User-Agent** The User-Agent data, which may include optional comments. *** **Client ID** The link to a client's profile in the B2CORE UI. *** **Client name** The name of a newly registered client. *** **Contact email** The email of a newly registered client. *** **Country of residence** The country specified by a client during registration. *** **Registration** The status of a client registration request. ## Click details [#click-details] To access details, click the **Date** or . ## Banner list [#banner-list] View the following information for each banner: **Banner** The thumbnail banner image. *** **Name** The banner name. *** **Language** The banner [language](languages). *** **Size** The banner [size](sizes). *** **Theme** The banner [theme](themes). *** **Clicks** The number of times a banner was clicked. *** **Registrations** The number of clients registered after clicking a banner. *** **Click conversion rate** The click conversion rate, which is the number of registrations divided by the number of clicks, expressed as a percentage. *** **Created** The date and time when a banner was created. ## Banner details [#banner-details] To access details, click the **banner name** or . Here you can view and customize banner settings. **Name** The banner name. This value can be modified. *** **Language** The banner language. This value can be modified. *** **Size** The banner size. This value can be modified. *** **Theme** The banner theme. This value can be modified. *** **CDN Image URL** The CDN URL pointing to a banner along with a banner image. This value can be modified. *** **Clicks** The number of times a banner was clicked. *** **Registrations** The number of clients registered after clicking a banner. *** **Click conversion rate** The click conversion rate, which is the number of registrations divided by the number of clicks, expressed as a percentage. *** **Created** The date and time when a banner was created. *** **Updated** The date and time when a banner was last updated. ## Language list [#language-list] View the following information for each language: **Language** The language name. *** **Banners** The number of banners in a language. *** **Created** The date and time when a language was added. ## Language details [#language-details] To access details, click the language name or . Here you can view and customize language settings. **Name** The language name. This value can be modified. *** **Banners** The number of banners in a language. *** **Created** The date and time when a language was created. *** **Updated** The date and time when a language was last updated. ## Size list [#size-list] View the following information for each language: **Size** The size name. *** **Banners** The number of banners of this size. *** **Created** The date and time when a size was added. ## Size details [#size-details] To access details, click the size name or . Here you can view and customize size settings. **Width** The banner width. This value can be modified. *** **Height** The banner height. This value can be modified. *** **Banners** The number of banners in a language. *** **Created** The date and time when a language was created. *** **Updated** The date and time when a language was last updated. ## Theme list [#theme-list] View the following information for each theme: **Theme** The theme name. *** **Created** The date and time when a theme was created. *** **Banners** The number of banners added to a theme. ## Theme details [#theme-details] To access details, click the theme name or . Here you can view and customize theme settings. **Name** The theme name. This value can be modified. *** **Banners** The number of banners added to a theme. *** **Created** The date and time when a theme was created. *** **Updated** The date and time when a theme was last updated. ## Color list [#color-list] View the following information for each color: **Priority** The priority that defines the order in which colors are listed in the B2CORE UI. *** **Name** The color name. *** **Background color** The HEX code of a background color. *** **Foreground color** The HEX code of a foreground color. *** **Created** The date and time when a color was added. ## Color details [#color-details] To access details, click the color name or . Here you can view and customize color settings. **Name** The color name. This value can be modified. *** **Priority** The priority that defines the order in which colors are listed in the B2CORE UI. This value can be modified. *** **Background color** The HEX code of a background color. This value can be modified. *** **Foreground color** The HEX code of a foreground color. This value can be modified. *** **Created** The date and time when a color was added. *** **Updated** The date and time when a color was last updated. ## Icon list [#icon-list] View the following information for each color: **Priority** The priority that defines the order in which icons are listed in the B2CORE UI. *** **Icon** The thumbnail icon image. *** **Name** The icon name. *** **Created** The date and time when an icon was added. ## Icon details [#icon-details] To access details, click the icon name or . Here you can view and customize icon settings. **Name** The icon name. This value can be modified. *** **Priority** The priority that defines the order in which icons are listed in the B2CORE UI. This value can be modified. *** **Icon** The icon image. *** **Created** The date and time when an icon was added. *** **Updated** The date and time when an icon was last updated. ## General information [#general-information] The B2CONNECT FIX server provides all the functionality necessary for real-time trading and receiving up-to-date market information via the Financial Information eXchange protocol. In this document, you can find a detailed description of the B2CONNECT FIX API, including the information about how to connect to a demo FIX server. The B2CONNECT FIX API is based on the version 4.4 of the Financial Information eXchange protocol. It’s assumed that the reader of this document is already familiar with the FIX protocol. To learn more about the protocol specification, see the [FIX Trading Community website](https://www.fixtrading.org/). If your trading engine is powered by Go, take a minute to learn about [SimpleFix Go](https://github.com/b2broker/simplefix-go/). This open-source library is provided by the B2CONNECT team to help you quickly integrate FIX messaging into your environment. The library is entirely written in Go and supports any FIX API version. ### Supported message types [#supported-message-types] The following message types can be assigned to the `<35> MsgType` field of a [Standard header](fix-api#standard-header): * `0` — [Heartbeat](fix-api#heartbeat) (Client ↔ B2CONNECT) * `1` — [Test Request](fix-api#test-request) (Client ↔ B2CONNECT) * `2` — [Resend Request](fix-api#resend-request) (Client ↔ B2CONNECT) * `3` — [Reject](fix-api#reject) (Client ← B2CONNECT) * `4` — [Sequence Reset](fix-api#sequence-reset) (Client ↔ B2CONNECT) * `5` — [Logout](fix-api#logout) (Client ↔ B2CONNECT) * `8` — [Execution Report](fix-api#execution-report) (Client ← B2CONNECT) * `9` — [Order Cancel Reject](fix-api#order-cancel-reject) (Client ← B2CONNECT) * `A` — [Logon](fix-api#logon) (Client → B2CONNECT) * `D` — [New Order Single](fix-api#new-order-single) (Client → B2CONNECT) * `F` — [Order Cancel Request](fix-api#order-cancel-request) (Client → B2CONNECT) * `V` — [Market Data Request](fix-api#market-data-request) (Client → B2CONNECT) * `W` — [Market Data — Snapshot/Full Refresh](fix-api#market-data-snapshot-full-refresh) (Client ← B2CONNECT) * `Y` — [Market Data Request Reject](fix-api#market-data-request-reject) (Client ← B2CONNECT) ### Standard header [#standard-header] All FIX messages must start with a **Standard header**. The **Standard header** includes the following fields: ### Standard trailer [#standard-trailer] Along with a Standard header, all FIX messages must also contain a **Standard trailer**. The **Standard trailer** includes the following fields: ## Session messages [#session-messages] The messages listed in this section are used to maintain any live FIX session with the B2CONNECT FIX server, including both [quoting](fix-api#quoting) and [trading](fix-api#trading) sessions. ### Heartbeat [#heartbeat] This message is sent back and forth between the FIX server and the client to check the connection status and in response to [Test Request](fix-api#test-request) messages. The **Heartbeat** message includes the following fields: ### Test Request [#test-request] This message is sent back and forth between the FIX server and the client in response to [Heartbeat](fix-api#heartbeat) messages as a means of connectivity check. The **Test Request** message includes the following fields: ### Resend Request [#resend-request] This message is sent by the client or FIX server to initiate the retransmission of messages, which may be required upon detecting a gap in the sequence numbers or losing a particular message. The **Resend Request** message includes the following fields: ### Reject [#reject] This message is sent by the FIX server upon receiving a malformed message from the client. The possible reason for rejection is specified in the `<373> SessionRejectReason` field. This message is unrelated to a trade-level rejection ([Order Cancel Reject](fix-api#order-cancel-reject)) issued when a FIX server is unable to place a requested order. The **Reject** message includes the following fields: #### Possible reasons [#possible-reasons] When the FIX server sends a [Reject](fix-api#reject) notification informing the client that a session-level request has been rejected, the `<373> SessionRejectReason` field can be set to one of the following values specifying the reason for message rejection: * `0` — an invalid tag number * `1` — a required tag is missing * `2` — a tag isn’t defined for this message type * `3` — a tag is undefined * `4` — a tag has no value assigned * `5` — an assigned value is incorrect (out of range) for this tag * `6` — an incorrect value data format * `7` — an issue related to decryption * `9` — an issue related to `CompID` * `10` — an accuracy issue related to `<52> SendingTime` * `11` — an invalid `<35> MsgType` * `12` — an XML validation error * `13` — the same tag appears more than once * `14` — a tag is specified not in the required order * `15` — a wrong order of repeating group fields * `17` — a non-“Data” value includes a field delimiter (an SOH character) * `99` — other (unspecified) reason ### Sequence Reset [#sequence-reset] This message is sent by the client or FIX server to indicate to the recipient the sequence number of the next message from the sender, immediately following the Sequence Reset message. This may be necessary to recover from a disconnect, in case if some messages were lost or their resending is not desirable. The **Sequence Reset** message includes the following fields: ### Logon [#logon] This message is sent by the client to initiate a FIX session. The **Logon** message includes the following fields: ### Logout [#logout] This message is sent by the client or FIX server to terminate a session. When terminated, the possible reason is specified in the `<58> Text` field. The **Logout** message includes the following fields: ## Demo mode [#demo-mode] The B2CONNECT FIX server supports a Demo mode that allows clients to establish a test connection and simulate quoting and trading sessions. Contact your account manager to obtain a set of settings and credentials. ## Quoting [#quoting] After connecting to the FIX server and establishing a live quoting session, the client can send a [Market Data Request](fix-api#market-data-request) to subscribe to quote updates streamed by B2CONNECT. To subscribe to multiple symbols, the client should send a separate [Market Data Request](fix-api#market-data-request) for each symbol. Upon successful subscription to a selected symbol, the FIX server starts streaming market data updates by sending [Market Data — Snapshot/Full Refresh](fix-api#market-data-snapshot-full-refresh) messages each time the market data is updated. The quote updates are streamed continuously for the entire duration of a FIX session. If a subscription request can’t be executed for some reason (for example, when a requested symbol isn’t found), the FIX server responds with a [Market Data Request Reject](fix-api#market-data-request-reject) message providing detailed information about an error. To terminate a specific subscription and stop receiving the updates, the client can send a [Market Data Request](fix-api#market-data-request) with the `<263> SubscriptionRequestType` set to `2` (standing for “Unsubscribe”). Upon sending a [Logout](fix-api#logout) request, the current session is closed and subscriptions to all ticker symbols are terminated. ### Market Data Request [#market-data-request] This message is sent by the client to start receiving up-to-date quoting data for a specified ticker symbol. The **Market Data Request** message includes the following fields: ### Market Data Request Reject [#market-data-request-reject] This message is sent by the FIX server to reject a [Market Data Request](fix-api#market-data-request) with invalid values. The **Market Data Request Reject** message includes the following fields: #### Possible reasons [#possible-reasons-1] The `<281> MDReqRejReason` field can be set to one of the following values specifying the reason for request rejection: * `0` — the specified symbol isn’t recognized * `1` — a duplicate `<262> MDReqID` * `2` — insufficient bandwidth * `3` — insufficient permissions * `4` — the specified `<263> SubscriptionRequestType` isn’t supported * `5` — the specified `<264> MarketDepth` isn’t supported * `6` — the specified `<265> MDUpdateType` isn’t supported * `8` — the specified `<269> MDEntryType` isn’t supported ### Market Data — Snapshot/Full Refresh [#market-data--snapshotfull-refresh] Such messages are continuously sent by the FIX server after the client subscribes to a ticker symbol. A new message is sent with each market data update. The **Market Data — Snapshot/Full Refresh** message includes the following fields: ## Trading [#trading] **Place an order** After establishing a trading session with the FIX server, the client can place a new order by sending a [New Order Single](fix-api#new-order-single) message. In response to this, the FIX server sends back an [Execution Report](https://docs.b2connect.b2broker.com/en/fix-api.html#execution-report) with the `<150> ExecType` field set to `A`, indicating that the order is placed successfully. If the order can’t be placed (for example, due to lack of credit funds or other issues), the report is sent with `<150> ExecType` set to `8`. After placing the order, the FIX server sends a separate report with `<150> ExecType` set to `F` each the order status changes: * If the order is executed partially, `<39> OrdStatus` is set to `1`. * When the order is fully filled, `<39> OrdStatus` is set to `2`. **Cancel an order** To cancel an open order, the client can send an [Order Cancel Request](fix-api#order-cancel-request). If the order is canceled (either explicitly by a trader, or automatically due to timeout), the [Execution Report](fix-api#execution-report) is sent with `<150> ExecType` set to `4`. In this case, the `<14> CumQty` field indicates the amount that has already been filled by the time the order was canceled, and `<151> LeavesQty` indicates the unfilled amount. If an order can’t be canceled for any reason, the FIX server sends back an [Order Cancel Reject](fix-api#order-cancel-reject) message indicating why the order cancellation failed. ### New Order Single [#new-order-single] This message is sent by the client to place a new order with specified parameters. The **New Order Single** message includes the following fields: ### Order Cancel Request [#order-cancel-request] This message is sent by the client to cancel an open order in its entire remaining amount. This request is assigned a unique `<11> ClOrdID` and is treated as a separate order. Upon successful cancellation of the order, an [Execution Report](fix-api#execution-report) is sent with the `<39> OrdStatus` field set to `4`. In this case, the `<14> CumQty` field indicates the amount that has already been filled by the time the order was canceled. If the order can’t be canceled for some reason, the FIX server sends back an [Order Cancel Reject](fix-api#order-cancel-reject) message indicating why the order cancellation failed. The **Order Cancel Request** message includes the following fields: ### Order Cancel Reject [#order-cancel-reject] This message is sent by the FIX server upon receiving an [Order Cancel Request](fix-api#order-cancel-request) that can’t be fulfilled. The **Order Cancel Reject** message includes the following fields: ### Execution Report [#execution-report] This message is sent by the FIX server upon successfully placing or cancelling an order, or any change to the order status (such as a complete or partial execution). Among other data, the report indicates: * the current order status at the moment of report creation (`<39> OrdStatus`) * the most recent change in the order status, which is being reported (`<150> ExecType`) The **Execution Report** message includes the following fields: Explore the liquidity providers and FIX platforms supported by B2CONNECT Explore the liquidity providers and FIX platforms supported by B2CONNECT Find step-by-step instructions on most common user scenarios Find step-by-step instructions on most common user scenarios Explore the B2CONNECT FIX API reference Explore the B2CONNECT FIX API reference ## July 30, 2026 [#july-30-2026] ### New features [#new-features] #### Daily turnover reports delivered to Slack and email [#daily-turnover-reports-delivered-to-slack-and-email] B2CONNECT now produces a Turnover Report for each hub automatically, once a day, and delivers it to the Slack channels and email addresses of your choice. Both the CSV and the PDF arrive as ready-to-open attachments on the message itself, so recipients read the report without opening the Web UI or holding platform credentials. Daily volume becomes visible to management, account managers, and back-office teams alike. Each report covers the previous trading day and breaks traded volume down by trading instrument, asset class, and quote currency, showing bought and sold volume for each, followed by totals per quote currency. Administrators control delivery from the B2CONNECT Web UI: * Set the daily publication time for each hub, or switch the schedule off. * Produce a report on demand with **Publish now**. * Subscribe Slack channels and email recipients under **Business notifications**, alongside the platform's other notifications. * Re-download any past report from the report archive. This is the next step in the rollout of **TRAM** (Tracking, Reporting, Alerting, and Monitoring), the unified reporting and observability layer that brought **Hub Reports** to the Web UI in the April release. Where Hub Reports covers reports requested on demand for individual margin accounts, daily turnover reporting replaces the manual, spreadsheet-based volume roundups that reporting teams previously assembled by hand. #### HTX USDT-M Futures upgraded to API V5 [#htx-usdt-m-futures-upgraded-to-api-v5] B2CONNECT has been upgraded to HTX API V5 for USDT-M perpetual futures across the full path: market data, funding data, symbol information, and trading. HTX has retired the legacy API behind these instruments, so the upgrade keeps this liquidity available on a supported interface. Brokers sourcing HTX perpetual futures liquidity through B2CONNECT keep uninterrupted market data and order flow, with no action required on their side. B2CONNECT now also confirms the collateral mode on every HTX connection when it starts, so a change made to the account on the exchange side can no longer cause order placement to fail without an evident cause. *** ### Improvements [#improvements] #### More efficient liquidity provider connections [#more-efficient-liquidity-provider-connections] Liquidity provider connections on a hub now make more efficient use of its infrastructure, while each connection stays isolated from the others and is monitored independently. A new liquidity provider also goes live sooner. The change is being enabled progressively. #### Order recovery after an interruption [#order-recovery-after-an-interruption] After a connection to a liquidity venue is interrupted, B2CONNECT now sizes its recovery request to the length of the interruption instead of using a fixed window, so orders placed during a longer outage are still picked up and reconciled. *** ### Resolved issues [#resolved-issues] The issues below occurred infrequently and only under specific conditions. Some may have affected production environments; most were identified in testing before they could. * Resolved an issue where, in rare cases, the connection to a liquidity venue did not re-establish itself after a network drop, leaving the affected instruments without fresh quotes until the service was restarted. Connections now detect a silent drop on their own, reconnect, and restore every affected instrument. * Resolved two issues that could occasionally leave funding data for perpetual futures failing after an instrument's mapping changed. Quotes recovered on their own, but funding rate, mark price, and funding interval could remain affected. Funding data now follows mapping changes as quotes do. * Resolved two issues affecting connection setup and quote acceptance in certain scenarios: a liquidity provider credentials element was rejected as too long when configuring a connection, and quotes for certain FX instruments arriving from a liquidity aggregator hub were rejected because of a mismatch in how the quote's entry count was determined. ## June 29, 2026 [#june-29-2026] ### Improvements [#improvements-1] #### Systematic Hedging under high-frequency flow [#systematic-hedging-under-high-frequency-flow] Systematic Hedging, introduced in the previous release, has been hardened to stay reliable under high-frequency, high-volume flow such as copy-trading and HFT bursts. B2CONNECT shapes the incoming client flow so that only the residual net position is routed to each liquidity provider (LP), keeping order placement comfortably within venue API rate limits even during tick storms. In the B2CONNECT Web UI, the real-time Risk Status view and its cumulative order-accumulation status bar now update accurately at very high request rates, so risk teams keep a precise, live picture of how exposure is building and when it will hedge. #### More flexible symbol and instrument naming [#more-flexible-symbol-and-instrument-naming] The liquidity aggregator integration now supports independent taker-side and maker-side symbols. Previously both legs shared a single venue name, causing a platform to distribute the LP’s symbols to the FIX clients. B2CONNECT now resolves the incoming FIX symbol against a dedicated taker symbol and maps it to the liquidity aggregator catalog name separately — so brokers can keep their own client-facing symbology regardless of an LP’s naming. Asset and trading instrument names can now also include the ampersand (`&`) character. Such symbol names are accepted directly, removing the previous need to substitute `AND`. #### Reduced noise from stale-liquidity alerts [#reduced-noise-from-stale-liquidity-alerts] Stale-liquidity alerts triggered by delisted symbols now fire once instead of repeating, cutting alert noise for monitoring teams when a venue delists an instrument. *** ### Resolved issues [#resolved-issues-1] * Resolved an issue where a market-data subscription on WebSocket liquidity venues (such as Kraken, Huobi, and Binance) could remain silent after a connector reconnect, leaving the affected symbols without fresh quotes — and FIX clients receiving only invalidations — until the connector was restarted. Such subscriptions now recover automatically. * Resolved an issue in the liquidity aggregator integration where a transient quote-cancel message was treated as a permanent subscription rejection, silently stopping quote publishing for the symbol until a restart. Transient cancels no longer drop the subscription, so streaming resumes as soon as the venue sends the next quote. ## May 29, 2026 [#may-29-2026] ### New features [#new-features-1] #### Systematic Hedging [#systematic-hedging] **B2CONNECT** introduces **Systematic Hedging**, a new execution option that complements — and does not replace — standard straight-through processing (STP). When enabled for a symbol, **B2CONNECT** aggregates incoming client flow into a managed risk position, nets opposing buy and sell volume, and hedges only the net residual to the liquidity provider (LP). This gives risk teams tighter control over exposure and lower execution costs. And because only net positions are hedged, platforms send far fewer orders to their LPs — staying comfortably within API rate limits and easing the load on each provider, so every LP connection goes further. Hedging stays fully under the risk team's control and is set per symbol: trigger by accumulated volume, a timer, a schedule, or manually; tune the hedge ratio and lock-routing behavior; or keep routing large orders straight through. The **B2CONNECT** Web UI adds a **Symbol Hedging Configuration** page, a real-time **Risk Status** page, and a master toggle, and risk-position state is restored automatically after any restart — so exposure is never lost or double-counted. #### B2CORE integration [#b2core-integration] **B2CONNECT** now integrates with **B2CORE**, the **B2BROKER** ecosystem's CRM — the centralized control center for a brokerage's front-end client experience and back-end administrative operations. By connecting margin accounts on the **B2CONNECT** hub directly to **B2CORE**, the integration gives B2B clients who power their trading platforms with **B2CONNECT** seamless account onboarding and a streamlined day-to-day experience, with account creation, funding, and balance management all handled from one control center. It also puts the wider advantages of the **B2BROKER** ecosystem within reach on a single, connected stack. Administrators set up and manage the connection from a new **B2CORE Integration** page in the **B2CONNECT** Web UI. #### Tiered commission profiles [#tiered-commission-profiles] **B2CONNECT** now supports **tiered commission profiles**, which automatically lower the commission rate as an account's traded volume grows. Administrators define volume thresholds and the rate that applies beyond each one; **B2CONNECT** tracks cumulative volume over the chosen period — for example, a calendar month — and steps the rate down as each threshold is reached, including on liquidation orders. For brokers, this turns growing volume into lower costs: the more flow through the hub, the lower their own per-trade commission — rewarding scale and protecting margins as the business grows. *** ### Resolved issues [#resolved-issues-2] There have been no customer-facing issues reported in this release. ## April 30, 2026 [#april-30-2026] ### New features [#new-features-2] #### Tiered margin profiles [#tiered-margin-profiles] **B2CONNECT** now supports tiered margin profiles, allowing Administrators to apply different margin rates to different slices of an account's notional exposure. Each profile can define up to five threshold–rate pairs per symbol, so brokers can mirror the bracketed margin schedules used by major liquidity providers — without falling back on inflated blanket rates that deter retail traders or on manual, position-by-position adjustments. This delivers predictable, schedule-aligned leverage on every tranche of a client's position and removes a recurring source of operational overhead for risk and operations teams. #### Hub Reports under TRAM [#hub-reports-under-tram] A new **Hub Reports** section is now available under **TRAM** (Tracking, Reporting, Alerting, and Monitoring) in the **B2CONNECT** Web UI, bringing reporting for margin accounts together in a single place. Back-office operators can request, track, and download reports directly from the platform — an important milestone in the rollout of TRAM, the unified reporting and observability layer for B2CONNECT. The initial release of Hub Reports ships with three reports: * **Consolidation Statement** — a complete picture of an account's activity and exposure for any reporting period, including opening and closing balances, deposits, withdrawals, fees, opening and closing equity, unrealized PnL, used and free margin, margin utilization, and a dedicated **Open Positions** section listing each position's symbol, direction, average price, unrealized PnL, and margin. Account names are populated automatically, so each statement is clearly attributed. * **Trading Report** — per-trade execution details for one or more margin accounts over a chosen date range, delivered as a CSV. Each row includes the connection used, taker login and order identifiers, executed price and volume, and commission, giving back-office and reconciliation teams everything they need to audit individual fills. * **Turnover (Traded Volume) Report** — aggregated traded volume per account and per symbol for the selected period, supporting fee schedules, rebate calculations, and periodic client reviews. *** ### Improvements [#improvements-2] #### Binance Futures WebSocket endpoints [#binance-futures-websocket-endpoints] **B2CONNECT** has been migrated to **Binance**'s new WebSocket URL architecture for perpetual futures, which separates traffic into dedicated public, market, and private channels. Brokers connecting to Binance Futures via B2CONNECT will continue to receive uninterrupted market data and order updates after Binance retires the legacy WebSocket URLs on **2026-04-23**, with no action required on the broker's side. #### Stream update reliability for Incoming Connectors [#stream-update-reliability-for-incoming-connectors] Subscription updates on **Incoming Connectors** are now more resilient under load. The platform allows more time for new streams to take effect and automatically retries on transient failures, preventing the rare cases where a slow update could leave a maker's symbols without fresh quotes until the next resubscription cycle. *** ### Resolved issues [#resolved-issues-3] * Resolved a consistency issue in the oneZero quoting integration where unsubscribing and immediately resubscribing to a symbol could occasionally fail with a duplicate-request error, leaving the symbol without market data until the next resubscription cycle. Resubscriptions are now handled atomically. ## March 2, 2026 [#march-2-2026] ### New features [#new-features-3] #### Automatic account liquidation on stop-out [#automatic-account-liquidation-on-stop-out] **B2CONNECT** now automatically liquidates open positions when an account's equity falls to the stop-out level, eliminating the need for manual intervention during margin events. The liquidation process executes iteratively — the system sends liquidation orders for all active positions, waits for each to reach a final state, and then evaluates whether the account has recovered before scheduling the next iteration. If the account's margin recovers above the stop-out threshold at any point, liquidation halts immediately. The engine is designed for operational reliability: if a restart occurs mid-liquidation, the process resumes safely without duplicating or missing orders. Execution uses live market pricing to ensure liquidation orders reflect current conditions, preventing margin miscalculations during volatile periods. The waiting period before liquidation begins and the retry policy between iterations are configurable. *** ### Improvements [#improvements-3] #### Account cache reliability [#account-cache-reliability] The account management system now supports per-account cache reinitialization. When a cache error is detected, only the affected account's state is rebuilt rather than triggering a broader reset. This targeted recovery approach improves stability and reduces the potential for stale account data to affect margin calculations or order routing during error-recovery scenarios. *** ### Resolved issues [#resolved-issues-4] There have been no customer-facing issues reported in this release. ## February 27, 2026 [#february-27-2026] ### New features [#new-features-4] #### New B2CONNECT website and deep Insights [#new-b2connect-website-and-deep-insights] This February release is dedicated to documentation updates. Alongside the ongoing expansion of our integrations-related docs, we've launched the new **B2CONNECT** product website and introduced the **Insights** section— deep-dive articles aimed at brokers, exchanges, and liquidity providers building multi-asset liquidity infrastructure. *** ### Improvements [#improvements-4] #### Liquidity engine performance, stability, and security enhancements [#liquidity-engine-performance-stability-and-security-enhancements] We've delivered a set of improvements across the quoting and trading engine to increase overall performance and operational robustness. These updates include several security and stability hardening primarily related to the underlying technology stack and runtime components that support core execution workflows. *** ### Resolved issues [#resolved-issues-5] There have been no customer-facing issues reported in this release. ## January 30, 2026 [#january-30-2026] ### New features [#new-features-5] #### Incoming Connectors: Trading Settings tab [#incoming-connectors-trading-settings-tab] A new dedicated **Trading Settings** tab is now available for Incoming Connectors, allowing the Hub Administrators to configure symbols directly within the connector setup. This streamlines onboarding of new liquidity providers and simplifies ongoing symbol configuration and updates. *** ### Improvements [#improvements-5] #### Improved FIX credentials compatibility [#improved-fix-credentials-compatibility] FIX credential settings for supported liquidity aggregators are now more aligned with the standard FIX naming convention, ensuring more consistent configuration and reducing setup friction. #### More descriptive error messages [#more-descriptive-error-messages] Incoming Connector pages now display clearer, human-readable error messages in two common cases: when credential validation fails, and when the Administrator tries to enable trading for a symbol that’s disabled in Hub settings. These messages help identify the issues, so troubleshooting is more straightforward. *** ### Resolved issues [#resolved-issues-6] * Generated FIX credentials no longer start with an underscore in `SenderID` or `TargetID`, resolving compatibility issues with counterparties that reject such values. ## December 22, 2025 [#december-22-2025] ### New features [#new-features-6] #### Perpetuals data over FIX: funding rate, mark price & funding interval [#perpetuals-data-over-fix-funding-rate-mark-price--funding-interval] B2CONNECT now enriches FIX market‑data streams with `FundingRate`, `MarkPrice`, and `FundingInterval` fields, allowing any FIX‑compatible platform to price and offer perpetual futures out of the box. These parameters are delivered alongside standard quote updates in the FIX contract, eliminating the need for custom side channels or additional integrations to pass funding data. #### Interest on idle cash and unused margin (AMS) [#interest-on-idle-cash-and-unused-margin-ams] The **AMS** module now supports paying interest on idle cash and unused margin via dedicated **Interest rate profiles** in the Web UI. Administrators can configure per‑asset interest rates and a daily posting time in UTC; B2CONNECT then accrues interest automatically and posts it once per day as separate **Interest** transactions on client accounts. Brokers, exchanges, and other trading platforms are empowered to create a clear incentive for end-users (traders) to keep extra funds in their accounts, strengthening client retention and serving as a strong competitive differentiator. *** ### Improvements [#improvements-6] #### Maker credentials management inside Incoming Connectors [#maker-credentials-management-inside-incoming-connectors] Trading and quoting Maker credentials are now configured directly within each Incoming Connector. Administrators can add, revoke, and review credentials in the same place where they manage the connection, reducing context switching and keeping connectivity and access control aligned per connector. #### Target maker [#target-maker] A new **Target maker** control has been added to the Incoming Connectors page, making it straightforward to set or review which maker is currently used for routing. This improves transparency around active maker selection and simplifies switching and validating liquidity sources. *** ### Resolved issues [#resolved-issues-7] There have been no customer-facing issues reported in this release. ## October 30, 2025 [#october-30-2025] ### New features [#new-features-7] #### New docs section: Supported FIX platforms [#new-docs-section-supported-fix-platforms] With this release, we’ve added a new [FIX platforms](supported-venues/fix-platforms) section to our documentation, showcasing trading platforms compatible with B2CONNECT via the **FIX protocol**. This new catalog includes baseline configuration guides and is linked to our FIX API reference. Integration teams can now quickly verify FIX compatibility and access the appropriate configuration templates from a single location, streamlining the setup process. *** ### Improvements [#improvements-7] #### Deep order recovery on LP disconnects [#deep-order-recovery-on-lp-disconnects] We’ve moved from a conservative recent‑orders snapshot to a controlled step‑by‑step rebuild that thoroughly recovers pending orders after a disconnect. As before, requests respect each Liquidity Provider’s API limits; the updated pacing keeps us right at the safe edge, delivering a far higher recovery count without triggering rate‑limit bans. Expect more complete catch‑ups on high count bursts and during volatile periods. *** ### Resolved issues [#resolved-issues-8] There have been no customer-facing issues reported in this release. ## September 30, 2025 [#september-30-2025] ### New features [#new-features-8] #### Internal risk warehousing (formerly B-Book) [#internal-risk-warehousing-formerly-b-book] B2CONNECT clients can now execute selected symbols internally within the crypto-native liquidity hub, retaining spread and reducing external fees. This new execution model provides per-symbol control to enable internal execution where it’s commercially advantageous, empowering clients to optimize their risk-return profiles with unprecedented precision. The configuration can be managed via CSV. #### Partial risk internalization (formerly C-Book) [#partial-risk-internalization-formerly-c-book] B2CONNECT clients can now optimize risk management with configurable order splitting between external hedging and internal execution. Set hedge ratios per symbol (0-100%) to determine the split, where the internal portion mirrors external fill pricing and proportions exactly. This approach reduces commission costs while maintaining risk control and supports both market and limit order flows. #### Price invalidation for synthetic symbols [#price-invalidation-for-synthetic-symbols] Synthetic markets now support invalidation signals the same way as organic symbols, providing consistent invalidation behavior across all symbol types. This development unlocks safe production deployment of the invalidation feature, providing traders with more reliable price feeds and reducing the risk of stale quotes across the entire trading ecosystem. #### Liquidity acquisition configuration via incoming connectors [#liquidity-acquisition-configuration-via-incoming-connectors] The configuration of liquidity acquisition service has been migrated from a global CSV to a structured, connector‑based flow. The new approach includes bulk asset upload capabilities, automated symbol-to-maker listing matching, and quoting CSV configuring, reducing setup time and potential errors while enabling more granular control over individual service instances. *** ### Improvements [#improvements-8] #### WebUI modernization [#webui-modernization] The Admin panel interface has been enhanced delivering improved usability. The following upgrades land across the **AMS accounts**, **AMS profiles**, **Notifications**, **Incoming Connectors** and **Symbols** sections: * **Navigation enhancements**: * Streamlined menu structure with fewer clicks to access key data. * Relocated Notifications to Hub settings for better organization. * Expanded table layouts for improved data visibility. * **Single Sign-On**: * Centralized identity provider with standards-based SSO. * Unchanged sign-in experience for end users. * Continued user management capabilities for B2CONNECT administrators. Additionally, the sidebar has been redesigned, with rebuilt left navigation reflecting the new information architecture, making the **Liquidity**, **Symbols**, **Accounts**, and **Settings** sections easier to access. #### AMS profiles: CSV import/export [#ams-profiles-csv-importexport] The **Commission** and **Margin Requirements** profiles setup has been accelerated through an import wizard and one‑click CSV export. These enhancements optimize workflows particularly when working with large instrument lists. #### Asset management [#asset-management] B2CONNECT administrators are now provided with enhanced control over asset configurations with built-in safeguards to prevent deletion of referenced assets. This ensures system integrity while providing the flexibility to clean up obsolete or unused assets. *** ### Resolved issues [#resolved-issues-9] * Fixed an issue with trading parameter calculations for instruments with contract sizes. The system now correctly converts all trading parameters using contract size multipliers, ensuring accurate minimum order amounts, price steps, and notional values are communicated through the FIX SecurityList endpoint. This fix particularly benefits trading of derivative contracts where the underlying instrument differs from the quoted contract size. ## August 29, 2025 [#august-29-2025] ### New features [#new-features-9] #### New docs section: Supported exchanges [#new-docs-section-supported-exchanges] With this release, we've introduced a detailed [Supported exchanges](supported-venues/exchanges) section in our documentation, offering a comprehensive reference for each exchange our platform supports. This addition promotes clarity and easy access, allowing B2CONNECT users to quickly compare and reference available capabilities across exchanges at a glance. *** ### Improvements [#improvements-9] #### Explicit default STP setting [#explicit-default-stp-setting] To prevent unexpected behavior and reduce reliance on exchange policy defaults, we now explicitly set a fixed internal default STP (Self-Trade Prevention) mode in our API calls. This ensures consistent and predictable trade execution across all environments, regardless of future changes by liquidity providers. *** ### Resolved issues [#resolved-issues-10] There have been no customer-facing issues reported in this release. ## July 31, 2025 [#july-31-2025] ### New features [#new-features-10] #### Granular asset management via Web UI [#granular-asset-management-via-web-ui] B2CONNECT administrators now benefit from enhanced control and efficiency in asset management with new export/import options integrated into the B2CONNECT Web UI: * **Bulk asset export**: Efficiently export assets to CSV for reporting or backup purposes, streamlining administrative tasks and protecting essential configuration data. * **Bulk asset import**: Effortlessly import multiple assets from CSV files, reducing manual entry, minimizing errors, and ensuring asset uniqueness through built-in validation rules. #### Alerts system for swap charge issues [#alerts-system-for-swap-charge-issues] The system monitoring has been enhanced by implementing automated notifications for failed swap charges. These real-time notifications provide detailed explanations of failures, facilitating quick troubleshooting, and boosting system reliability. Common issues addressed include missing market rates, symbol data discrepancies, infrastructure issues, and internal errors. *** ### Improvements [#improvements-10] #### Enhanced compatibility with Binance [#enhanced-compatibility-with-binance] To ensure continued compatibility and accuracy, B2CONNECT services have been updated to align with recent changes in the Binance API. This enhancement makes certain that the minimum notional values provided through the B2CONNECT FIX API SecurityList endpoint are always accurate, preventing order rejections due to incorrect amounts. Additionally, the Binance Spot adapter has been updated to meet the latest WebSocket API requirements, ensuring smooth order updates and improved platform reliability. #### Advanced raw message logging [#advanced-raw-message-logging] A significant enhancement has been added to order placement and execution workflow. A key point is the implementation of advanced raw message logging. This enables B2CONNECT to log all raw incoming and outgoing messages during its communication with a supported liquidity provider, thus enabling precise troubleshooting and rapid issue resolution at the LPs end. #### Improved error handling [#improved-error-handling] Another improvement in the order placement and execution workflow includes the refined logic for handling timeout errors. An order is now considered placed if such an error occurs, providing a definitive status and preventing uncertainty during order execution. #### Rate limiting for reliable connectivity [#rate-limiting-for-reliable-connectivity] The reconnect algorithm for a supported liquidity provider has been improved by integrating a robust rate-limiting mechanism. This enhancement caps the number of reconnect attempts to an optimal value, reducing the chance of IP bans and maintaining stable, uninterrupted connectivity. #### Reduced trading service startup time [#reduced-trading-service-startup-time] With this release, the bulk-load order event recovery mechanism has been implemented. By efficiently processing large volumes of order events during system startup, this update significantly reduces the time required to restore services after a restart or unexpected outage. As a result, traders experience minimal downtime, ensuring continuous access to the trading platform and improving overall operational efficiency. *** ### Resolved issues [#resolved-issues-11] There have been no customer-facing issues reported in this release. ## June 30, 2025 [#june-30-2025] ### New features [#new-features-11] #### Advanced multi-provider liquidity orchestration [#advanced-multi-provider-liquidity-orchestration] This release introduces a groundbreaking update in liquidity infrastructure management: B2CONNECT now features liquidity orchestration across multiple liquidity providers and trading platform types. Key enhancements include: * Liquidity acquisition from multiple providers and its distribution to diverse trading platforms and market data consumer types. * Price feed across all asset classes, including forex, CFDs, indices, metals, and crypto (both spot and derivatives), accessible via both single or multiple connectors. * Uninterrupted liquidity with automated order routing based on symbol availability and robust failover policies. #### Advanced spread control [#advanced-spread-control] B2CONNECT administrators can now precisely control the maximum allowable spread in order books, significantly enhancing liquidity and boosting trader confidence. They can set and manage maximum spread limits to avoid sharp market data fluctuations, and track anomalies through detailed metrics. #### Symbol-based price invalidation [#symbol-based-price-invalidation] B2CONNECT introduces sophisticated symbol-based price invalidation to ensure price accuracy: * **Web interface management**: Configure, view, and manage price invalidation parameters directly through the Web UI. * **CSV import**: Import symbols via CSV files that include detailed price invalidation parameters. * **Real-time logic**: Implement comprehensive real-time price invalidation across all stages for consistent and precise quoting and trading. #### Aggregated execution reports [#aggregated-execution-reports] Execution reporting now supports fill aggregation, optimizing reports for platforms such as cTrader. This feature consolidates multiple fills into a single, coherent execution report. B2CONNECT administrators can enable or disable aggregation settings to tailor reporting to the trading platform preferences. Alerts for overfilled aggregation scenarios provide timely insights for effective risk management. #### Automated swap fee charging [#automated-swap-fee-charging] B2CONNECT now streamlines swap charge management. B2CONNECT administrators can easily set up Swap Profiles and apply them to trading accounts. The built-in Swap Charges Planner helps schedule and run swap charges efficiently. Migration to an optimized Account Configuration system provides superior performance and reliability. *** ### Improvements [#improvements-11] #### Enhanced precision handling for FOK orders [#enhanced-precision-handling-for-fok-orders] Handling of Fill-or-Kill (FOK) orders has been improved to guarantee compatibility across all liquidity providers, even when the order amount precision differs from trading platform specifications. #### Standardized order cancellation for Liquidity Takers [#standardized-order-cancellation-for-liquidity-takers] The order cancellation support has been improved for liquidity aggregators and other liquidity consumers, ensuring more responsive and reliable order lifecycle management. #### Symbol integration into account configuration [#symbol-integration-into-account-configuration] Symbol management is now seamlessly incorporated into account configuration to maintain consistency across liquidity settings and to simplify administrative tasks. #### Streamlined UX [#streamlined-ux] The B2CONNECT WebUI has been upgraded, focusing on user experience and performance enhancements. These improvements feature a more intuitive color scheme and streamlined design, offering a modern and visually appealing interface. The user flow has been optimized, making navigation more straightforward and efficient. Additionally, component performance has been boosted, reducing load times and enhancing overall responsiveness for a better user experience. *** ### Resolved issues [#resolved-issues-12] * Fixed an issue where an order cancellation request might be mishandled if received before the system processed the initial order confirmation from a liquidity provider. ## May 30, 2025 [#may-30-2025] ### Improvements [#improvements-12] #### Enhanced FIX API SecurityList endpoint [#enhanced-fix-api-securitylist-endpoint] Improved the liquidity metadata handling to ensure that order placements, based on the liquidity parameters provided via the SecurityList FIX endpoint, are compatible across multiple liquidity streams. This upgrade aggregates liquidity parameters for symbols across multiple providers, combining them into universally supported values. As a result, orders can be placed across several liquidity providers either simultaneously or in a failover mode, ensuring compatibility with all involved providers. #### Improved handling of negative spreads [#improved-handling-of-negative-spreads] Enhanced management of negative spreads has been achieved through more efficient filtering of Level 2 quotes and incremental updates. This improvement targets asset prices that could cause negative spreads in liquidity distributed to trading platforms and other consumers via the FIX protocol. The newly updated business logic effectively and efficiently filters out such quotes to prevent the negative spreads from appearing in the distributed liquidity. #### Enhanced resilience when processing fast subscribe/unsubscribe sequences [#enhanced-resilience-when-processing-fast-subscribeunsubscribe-sequences] B2CONNECT FIX server can robustly handle fast subscribe/unsubscribe sequences by liquidity aggregators, even when these aggregators do not strictly adhere to the FIX protocol standard, reusing the same request IDs. The newly implemented algorithm reliably handles such cases, eliminating even the intermittent subscription failures. *** ### Resolved issues [#resolved-issues-13] * Fixed an issue, where orders were re-sent (placed again) if one of the supported liquidity providers returned an unrecognized error message. Such messages are now categorized under a unified system, resulting in conserving the API rate limits on redundant order placements and reducing the risk of IP bans. * Fixed an issue where, after replacing the API credentials of a supported liquidity provider with new ones, the system continued subscribing to the execution reports stream using the old credentials until restarted. This fix ensures that the credentials can be replaced live, without the restart of services. ## March 31, 2025 [#march-31-2025] ### New features [#new-features-12] #### New integration with Bybit [#new-integration-with-bybit] B2CONNECT has launched a new adapter for **Bybit**, providing full support for perpetual futures contracts. This integration leverages B2CONNECT's robust infrastructure, allowing access to Bybit's market data and trading functionalities. It ensures seamless trading and quoting, enabling client platforms to offer advanced trading options and enhanced user experience. Benefit from efficient order execution and reliable price feeds — all within the B2CONNECT ecosystem! #### Advanced Trade API support for Coinbase integration [#advanced-trade-api-support-for-coinbase-integration] With this release, B2CONNECT introduces full support for **Coinbase Advanced Trade API**, replacing the deprecated Coinbase Pro API. This update ensures uninterrupted access to Coinbase’s liquidity, benefiting from the superior capabilities and performance of the Advanced Trade API. This upgrade affirms B2CONNECT commitment to delivering cutting-edge liquidity solutions, ensuring clients always have access to the best available liquidity infrastructure. *** ### Improvements [#improvements-13] #### Improved symbol specification management and real-time configuration [#improved-symbol-specification-management-and-real-time-configuration] The process for managing symbol specifications during bulk import has been significantly enhanced. Users can now interactively review and selectively edit symbol specifications directly within the import interface. This improvement enables on-the-fly adjustments, ensuring higher accuracy and flexibility when dealing with large sets of symbols. #### Binance Futures adapter enhancements [#binance-futures-adapter-enhancements] Several improvements have been implemented for the Binance Futures adapter, increasing its reliability and stability: * **Execution report deduplication**: Logic has been added to effectively deduplicate execution reports from Binance Futures. This resolves issues caused by occasional duplicate reports originating from the LP side, ensuring accurate order state tracking. * **Order state recovery rate limiting**: A rate limiter has been implemented for requests related to order state recovery. This proactive measure prevents potential rate limit violations on the Binance Futures platform, safeguarding against temporary bans or request throttling during high-activity periods. These updates contribute to a more robust and resilient integration with Binance Futures. *** ### Resolved issues [#resolved-issues-14] There have been no customer-facing issues reported in this release. *** ## Past releases [#past-releases] ### December 24, 2024 🎄 [#december-24-2024-] #### New features [#new-features-13] ##### Taker orders routing to multiple LPs [#taker-orders-routing-to-multiple-lps] This newly released feature allows orders received through a single FIX connector to be routed to multiple liquidity providers. This functionality enables sophisticated order placement and execution strategies through: * **Failover mechanism**: Enables B2CONNECT to maintain each Taker connector linked to multiple liquidity sources and to dynamically reroute orders among them in case a provider becomes unavailable. * **Symbol-based order routing**: Caters to cases where a particular symbol may be unavailable with one liquidity provider, but listed on others. This feature allows for dynamic routing of orders to the most suitable liquidity source based on the specific trading symbol. This feature significantly enhances access to a wider range of trading instruments and improves fault tolerance for liquidity distribution at supported trading venues via both quoting and trading sessions. ##### Incoming connectors creation [#incoming-connectors-creation] B2CONNECT administrators can now create and configure connections to Makers via the Web UI. The solution supports a variety of protocols (WSS, REST, FIX), offering flexible and robust connectivity options. By streamlining the setup process, it enhances the user experience, making it easy to integrate incoming connectors. ##### Order status recovery at WebSocket disconnect [#order-status-recovery-at-websocket-disconnect] This feature ensures the recovery of pending order statuses in case a WebSocket connection is disrupted or unavailable. It's specifically designed for WSS+REST trading integration, allowing retrieval of a placed order status even if the execution report can't be extracted from a WebSocket data stream B2CONNECT subscribed to. This solution largely eliminates cases where an order is placed on the liquidity provider but is not correctly confirmed on the Taker platform due to WebSocket issues. The implementation significantly enhances execution quality and mitigates market risks. #### Improvements [#improvements-14] ##### Symbol creation interface [#symbol-creation-interface] The B2CONNECT Web UI now features a dedicated interface for adding symbols. This enhancement utilizes existing base and quote assets, building on the recent release of the Asset and Asset Classes management UI. This feature is in addition to the bulk settings import functionality, allowing for individual symbol creation and management. #### Resolved issues [#resolved-issues-15] There have been no customer-facing issues reported in this release. *** ### November 29, 2024 [#november-29-2024] #### New features [#new-features-14] ##### Taker FIX credentials management via the Web UI [#taker-fix-credentials-management-via-the-web-ui] The latest B2CONNECT release introduces a brand new Web UI Section in the Liquidity Hub administrative interface, designed for managing FIX protocol credentials. These authorization details are vital for B2CONNECT customers, including digital asset exchanges, brokerages, crypto payment gateways, and other liquidity consumers, to connect to the Liquidity Hub. Following the trend of previous improvements, such as the Maker API keys management interface, this update enables B2CONNECT administrators to efficiently generate and distribute FIX credentials. Once the credentials are generated and validated, B2CONNECT administrator can transfer them to a Taker platform so that their clients can authorize when connecting to the B2CONNECT FIX server. Credentials are automatically updated across B2CONNECT services, ensuring seamless client connectivity. This development marks a significant stride toward achieving comprehensive connectivity and streamlined liquidity distribution within B2CONNECT's growing infrastructure. #### Resolved issues [#resolved-issues-16] There have been no customer-facing issues reported in this release. *** ### October 31, 2024 [#october-31-2024] #### New features [#new-features-15] ##### Faster order placement and execution on the Binance spot platform [#faster-order-placement-and-execution-on-the-binance-spot-platform] B2CONNECT Liquidity Hub has implemented an advanced adapter to the WebSocket API for the Binance (spot) trading platform. This upgrade allows for faster order placement, thereby improving the trading experience and enhancing the liquidity distribution quality. By employing a high-end connectivity technology, trade-related messages are now transmitted through a bidirectional full-duplex protocol. When assessed against previous benchmarks, the order round-trip time on Binance (spot) has been shortened significantly. This advancement will be beneficial to any trading platform or liquidity taker client, substantially enhancing their user experience in order execution. #### Improvements [#improvements-15] ##### Enhanced Admin interface for configuring trading credentials [#enhanced-admin-interface-for-configuring-trading-credentials] B2CONNECT administrators can now independently configure trading credentials via the web interface, ensuring a faster and more secure process. This improvement simplifies the procedure of entering API keys using a dynamic, maker-specific form tailored with relevant fields, thereby streamlining operations. The system automatically validates the entered API keys to minimize errors. This is another addition to the rapidly expanding capabilities of the Liquidity Engine Web UI. #### Resolved issues [#resolved-issues-17] There have been no customer-facing issues reported in this or previous releases. *** ### September 30, 2024 [#september-30-2024] #### New features [#new-features-16] ##### Fully-featured liquidity adapter for Crypto.com [#fully-featured-liquidity-adapter-for-cryptocom] The full-blown liquidity acquisition adapter to **Crypto.com** is now available immediately to all B2CONNECT Liquidity Hub clients connecting via the FIX API. Crypto.com is a top-ranked cryptocurrency exchange platform that has recently been gaining traction among B2B clients as a direct market access enabler. With the introduction of the new connectivity option, B2CONNECT clients can now enhance their offerings with an expanded range of trading pairs. This feature also empowers them to diversify effectively, mitigating various risks such as counterparty, regulatory, and so on. The adapter enables access to price feeds (Level 2 quotes) on the trading platform and supports order placement, execution, and execution confirmation. Besides, its implementation ensures that these two main processes, getting quotes and trading, can be done in parallel, with the highest possible throughput and lowest network latency. This is the next step in B2CONNECT’s mission to enhance access to liquidity for its B2B clientele — digital asset exchanges and brokerages. We’re excited to provide trading platform operators with new opportunities to differentiate themselves by offering the trading community a wider range of trading options and better UX. ##### Liquidity configuration via CSV [#liquidity-configuration-via-csv] The B2CONNECT Web UI has been enhanced with the bulk import option of liquidity settings via a CSV file. This new feature enables B2CONNECT administrators to import an unlimited list of markets along with advanced liquidity parameters such as markups, volume modifiers, market depth, price and volume precision, and so on. Additional fields for defining synthetic instruments are provided to configure synthetic cross legs, quote sources, inversion, and more. The new interface validates the CSV file upon upload and also stores a history of imported settings. The latter empowers the B2CONNECT Hub operators to always have a fresh copy of the setup available for export as a CSV file, making it easier to enter adjustments, re-upload the configuration, and apply new liquidity settings. *** ### August 29, 2024 [#august-29-2024] #### New features [#new-features-17] ##### Faster Perpetual Futures trading via a high-end communication protocol [#faster-perpetual-futures-trading-via-a-high-end-communication-protocol] With this release, the B2CONNECT team has implemented a new integration with a fresh WebSocket API introduced by the Binance Futures platform earlier this year. This is a new option in addition to the time-tested REST API trading. The new connectivity technology uses a bidirectional, full-duplex protocol to transmit trade-related messages, which drastically increases execution quality. The average route time for trades shows an up to fourfold improvement over previously measured round-trip benchmarks. This is a true moonshot advancement in order execution quality that will allow any trading platform or other liquidity taker to offer exceptional trader UX improvements throughout their entire user base. ##### Concurrent connections to multiple API endpoints [#concurrent-connections-to-multiple-api-endpoints] This new feature allows B2CONNECT liquidity adapters to connect simultaneously to multiple endpoints associated with private and public APIs (where available). This enables access to digital resources on both types of endpoints at the same time. This advanced architecture improves resource availability and eliminates a single point of failure, giving B2CONNECT liquidity acquisition and distribution services the ability to simultaneously access market and trading data across various API clusters. The primary benefit of this new feature from a client perspective is much more reliable, fault-tolerant price feeds, order placements, and execution confirmations, improving UX while reducing market risks at the same time. #### Improvements [#improvements-16] * Trading log entries and error messages from both B2CONNECT internal services and external sources (such as supported liquidity providers) are now categorized and given a unified content and format before being transmitted to taker platforms. This ensures that messages are organized in a consistent manner and are better prepared for human consumption. This improvement is aimed at enhancing UX and reducing the load on a technical support team. * An improved B2CONNECT FIX server shutdown procedure has been implemented, which allows for graceful state saving and restoration, as well as prevents data loss due to interruptions of quoting and trading sessions. This enhancement ensures orderly logouts across all platforms connected via the FIX protocol, and availability of FIX messages after a restart. #### Resolved issues [#resolved-issues-18] * Fixed an issue where, in some scenarios, third-party FIX clients had issues reconnecting to the B2CONNECT FIX server after a logout. We have also ensured that a Logout message is consistently sent upon a client’s logout, which in rare cases may have been skipped prior to this release. * Fixed an issue that infrequently caused situations where after setting the order book depth to decrease, the number of levels would sometimes not increase back after reverting the settings. *** ### March 13, 2024 [#march-13-2024] #### New features [#new-features-18] ##### Liquidity distribution to the B2TRADER Brokerage Platform (BBP) [#liquidity-distribution-to-the-b2trader-brokerage-platform-bbp] With this release, the B2CONNECT team is excited to announce that the emerging B2TRADER Brokerage Platform has been added to our growing list of supported trading venues. This addition further advances our commitment to delivering top-notch connectivity to trading platforms and liquidity providers. The key updates encompass a bespoke order execution flow as well as custom FIX API endpoints that streamline the retrieval of available markets and contract specifications. With these enhancements, our industry-standard FIX protocol implementation enables a robust connection between the newly added platform and the liquidity providers supported by B2CONNECT. This integration empowers BBP’s clients to embrace flexible business models and adjustable execution strategies. And, as a result, further boost their success by providing exceptional user experiences to their end users — the members of the trading communities. ### November 10, 2023 [#november-10-2023] #### New features [#new-features-19] ##### Maker-integration with cTrader via the FIX protocol [#maker-integration-with-ctrader-via-the-fix-protocol] With this release, the B2CONNECT team is pleased to announce the achievement of a significant milestone in our ongoing quest to provide exceptional connectivity to both trading platforms and liquidity providers: we have successfully integrated B2CONNECT Liquidity Hub with **cTrader**. With this integration, B2CONNECT Liquidity Hub can now distribute the liquidity to cTrader, a complete trading platform solution for the forex and CFD brokers, via the FIX protocol. On one hand, this furnishes our clients running trading platforms with the ultimate access to liquidity. On the other hand, this empowers liquidity providers to implement comprehensive distribution solutions. This release marks the paradigm shift in the connectivity approach by including trading platform integrations alongside the liquidity providers and liquidity aggregators — our focus previously. This is a major step forward in expanding our ecosystem to include taker-venues, making our product a versatile liquidity distribution solution that meets the needs of a wide range of industry players in the dynamic world of trading. This new integration enables the provision of unique liquidity streams empowering our clients to differentiate themselves in a competitive and highly volatile market. Retail and institutional brokers, crypto exchanges, and liquidity providers can leverage our performant liquidity distribution solutions powered by industry-standard communication protocols and fast APIs built on scalable frameworks. *** ### October 20, 2023 [#october-20-2023] #### New features [#new-features-20] ##### Full support for Bitfinex Derivatives [#full-support-for-bitfinex-derivatives] Following the Bitfinex Spot support implemented earlier this year, we are pleased to announce full support for Bitfinex Derivatives with this release. It has been done per popular client request to support and improve diversification of perpetual futures liquidity flows, following the collapse of a global cryptocurrency derivatives player late last year. With this release, trading platforms powered by the B2BROKER technology receive additional benefits and opportunities, such as: * expand your offer with additional trading instruments * increase market depth due to additional liquidity source * improve liquidity, including faster and more flexible price feeds and better execution quality * diversify liquidity streams by the additional source of liquidity and avoid a single point of failure * differentiate yourself from competing platforms and, at the same time, delight your users by creating unique liquidity streams that have just become available from the newly supported platform. Among other features, the trading API and pre-execution model are fully supported and immediately available to client venues using the FIX protocol and relying upon the B2CONNECT’s signature FIX API (v1.2 and later). #### Improvements [#improvements-17] * A new tutorial has been added to the B2CONNECT Product guide, illustrating the process of setting up a connection to Coinbase. We took a special care to highlight the required credentials and help clients find them easily. *** ### September 29, 2023 [#september-29-2023] #### New features [#new-features-21] ##### FIX API 1.2 [#fix-api-12] With this release, B2CONNECT introduces a new version 1.2 of FIX API, which is an expanded and improved version of the previous implementation: * The Business Message Reject has been deleted. * The [Sequence Reset](fix-api#sequence-reset) message has been added. * The following tags have been added to the [Market Data Request](fix-api#market-data-request) message: `<267> NoMDEntryTypes` (required), `<269> MDEntryType` (required). * The following tag has been added to the [Market Data — Snapshot/Full Refresh](fix-api#market-data-snapshot-full-refresh) message: `<299> QuoteEntryID`. * The following tag has been added to the [New Order Single](fix-api#new-order-single) message: `<1> Account`. * The following tags have been added to the [Execution Report](fix-api#execution-report) message: `<64> SettlDate`, `<75> TradeDate`, `<103> OrdRejReason`. * The following tag has been added to the [Order Cancel Reject](fix-api#order-cancel-reject) message: `<39> OrdStatus` (required). The [FIX API specification](fix-api) has been updated to reflect the changes as well as to become more clear and consistent. *** ### May 12, 2023 [#may-12-2023] #### New features [#new-features-22] ##### A new form for entering API keys [#a-new-form-for-entering-api-keys] The B2CONNECT Web UI has been updated to display a customized form for entering API keys for each of the supported hedging platforms. As a result, the issues with entering the credentials have been eliminated. Since every platform features a different set of fields for entering the API keys, this form was updated to display the authorization fields as they are provided by each hedging platform and to prevent any ambiguity arising from the difference in the field names. #### Improvements [#improvements-18] * The contents of Web UI controls and field descriptions have been revised to afford a more intuitive interface. * The look and feel of the B2CONNECT Web UI has been enhanced by updating some of its most commonly used visual elements. #### Resolved issues [#resolved-issues-19] * Fixed an issue causing the API key editing window to hang when an entry for a hedging platform was absent in the configuration. Such exceptions are now handled, and the stability of the UI has increased as a result. * Fixed an issue due to which empty fields were erroneously assigned zero values after updating the hedging configuration. * Fixed an issue due to which duplicate entries could be displayed for clients on the Hedging Status tab. * Fixed an issue due to which incorrect values were submitted in certain scenarios when enabling or disabling hedging on the Hedging Status page of the Web UI. *** ### April 21, 2023 [#april-21-2023] #### Improvements [#improvements-19] ##### Liquidity provider validation before accepting incoming orders [#liquidity-provider-validation-before-accepting-incoming-orders] The order execution reliability has been greatly improved as a result of including a check for the actual availability of the supported liquidity providers before the B2CONNECT Liquidity Hub services can go forth and accept the incoming orders from a taker platform. Following the update of the B2CONNECT liquidity distribution services, they now always ensure that the connected liquidity providers are ready to execute a placed order, in which case the order is then accepted for execution on the connected trading venue serving as a liquidity consumer. ##### Type-agnostic execution of orders [#type-agnostic-execution-of-orders] If the order type that was set by a taker platform isn’t recognized as a valid execution option, the B2CONNECT liquidity distribution services can be configured to emulate the required order type by assigning a different type to the order. This way you can further ensure that the placed orders will be filled regardless of their types, and their execution quality will match the expectations of your end-users to the fullest possible extent. ##### Repeated requests for order placement [#repeated-requests-for-order-placement] The B2CONNECT order placement services have been revised to enable them to retry order placement if a target liquidity provider platform is unable to fill an order for a transient reason. If the dedicated B2CONNECT service recognizes the returned error as transient (as opposed to intrasient errors, such as those arising from connection failures), the service then works around this issue by automatically sending a repeated request for order placement, which increases the chances that the order will be eventually filled. This is especially useful in times of increased market volatility resulting in drastic increase in traders’ activity, which may overwhelm the liquidity provider services making it difficult to fulfill all the requests for orders execution. #### Resolved issues [#resolved-issues-20] * Fixed some issues affecting the B2CONNECT notification service. These include occasional service stability issues arising from an incorrect data format, as well as the issue due to which a user identifier defined in hedging configuration could not be resolved if this user’s trading platform was left unspecified. * Fixed an issue that affected the adapter used to connect to one of the supported liquidity providers and prevented restarting the service and restoring the connection after the liquidity provider has disconnected the communication protocol. * Fixed some minor issues with the B2CONNECT Web UI due to which it could be difficult for users to replace the API keys in certain scenarios. * Fixed an issue with the Hedging Reports section of the B2CONNECT Web UI due to which the Amount field in the Order Details section could be occasionally assigned incorrect data. *** ### March 10, 2023 [#march-10-2023] #### New features [#new-features-23] ##### Hedging on Bitfinex [#hedging-on-bitfinex] Bitfinex, a global cryptocurrency exchange and spot trading venue, is now supported as a new hedging platform. As is well known, diversification is the key to thriving, regardless of market conditions. This is why with the two most recent releases we specifically focused on providing the widest variety of connectivity options to our global-minded clients, while offering them the opportunity to hedge market risks on suitable platforms in as many regions and jurisdictions as possible with a view of achieving the maximum geographical and regulatory diversity. The newly released trading adaptor for the Bitfinex API is the next step on the B2CONNECT’s journey aimed at empowering its discerning B2B clients, which include cryptocurrency exchanges and crypto brokers. In the meantime, our main goal remains constant: we are eager to not only delight trader communities by ensuring a fantastic user experience, but also to offer trading platforms broad opportunities for spreading risks and allow them to take a savvy approach to exposure in a wide range of market situations. #### Improvements [#improvements-20] ##### Enhanced support for trading instruments engineered as contracts [#enhanced-support-for-trading-instruments-engineered-as-contracts] We have significantly expanded the contract specification capabilities for some of the supported crypto assets by encompassing all popular methods of defining trading instruments. With the enhanced contract sizes, the price and/or amount can be configured in any combinations while designing contracts for various symbols, with taking into consideration both the contracts that are priced by amount and those evaluated by face value regardless of their amount. #### Resolved issues [#resolved-issues-21] * Fixed an issue due to which the adaptor used for price discovery on one of the supported liquidity providers could hang in certain scenarios. * Fixed an issue which hampered the efficiency of the cloud resources utilization by making multiple subscriptions to quotes for the same asset if liquidity for this asset was used to maintain price feeds for several symbols. * Fixed an issue which caused intermittent disconnection of the FIX protocol after restarting one of the supported liquidity aggregators. * Fixed an issue related to number formats which occasionally appeared in hedging reports. As a result, the scientific EXP format used for some of the fields has been replaced with a more user-friendly financial format. *** ### February 17, 2023 [#february-17-2023] #### New features [#new-features-24] ##### Hedging on Kraken [#hedging-on-kraken] As part of our relentless pursuit of providing crypto asset exchanges and brokers seamless access to the widest possible choice of hedging platforms, we are pleased to announce full support for the Kraken trading API, which opens new horizons for trading venues relying on B2CONNECT Liquidity Hub in terms of risk transfer and supplying the price feed. This is a major landmark for B2CONNECT, made possible by enhancing the previously released adapter used for connecting to this well-established bitcoin trading platform and cryptocurrency exchange which is based in San Francisco. As a result, both Level 2 quotes and hedging for all symbols traded on Kraken are now available to B2CONNECT clients. #### Improvements [#improvements-21] ##### Extended documentation [#extended-documentation] [A new tutorial](how-to-articles/how-to-properly-configure-api-keys-on-kraken) has been added to B2CONNECT documentation, illustrating the process of obtaining the API keys required to enable hedging on Kraken using the newly introduced hedging adapter. Paying special attention to keeping our documentation up-to-date and complete, we invite you to learn more about B2CONNECT by exploring our Product Guide and encourage you to contact us if you have any suggestions or need further assistance. #### Resolved issues [#resolved-issues-22] * Fixed an issue which caused the hedging engine to hang up immediately after entering the API keys for connecting to some of the hedging platforms in certain scenarios. * Fixed an issue which prevented simultaneous placement of multiple hedging orders, causing instead their consecutive placements which resulted in slightly delayed execution. * Fixed an issue which caused recurrent switching between the main and backup liquidity providers in certain scenarios. *** ### January 27, 2023 [#january-27-2023] #### New features [#new-features-25] ##### Level 2 quotes supported for Bitfinex spot liquidity [#level-2-quotes-supported-for-bitfinex-spot-liquidity] Yet another major cryptocurrency exchange Bitfinex has been integrated, ensuring steady supply of spot asset liquidity from this global platform. This highly anticipated development opens exciting new opportunities for operators of crypto trading venues, since it is hard to overestimate the importance of being able to connect to unique liquidity sources. For those who are determined to survive the ongoing “crypto winter” and excel in a highly competitive environment, this is a great opportunity to appeal to extremely discerning trader communities with the best possible offering, which includes a wide array of trading instruments and guarantees tighter spreads and remarkable market depth. This is undoubtedly great news both for the exchanges powered by matching engines, such as B2TRADER, and for third-party crypto exchanges and brokers connected to B2CONNECT via the FIX protocol (either using the B2CONNECT proprietary FIX API or solutions relying on liquidity aggregators, such as oneZero and PrimXM). #### Improvements [#improvements-22] ##### Improved handling of Level 2 quotes [#improved-handling-of-level-2-quotes] The performance of locally maintained extended order books with a virtually unlimited number of price levels (up to 5,000 and beyond) has been enhanced, thanks to implementation of an improved solution, which enables combining multiple price feeds into a single data stream, as opposed to one-to-one channel subscriptions that were previously supported. This has resulted in a drastic performance boost for the price discovery engine, along with a notable increase in the frequency of Level 2 quote updates. #### Resolved issues [#resolved-issues-23] * Fixed an issue that caused occasional generation of empty reports due to incorrect logging of executed trades. * Fixed an issue that prevented subscription to more than a hundred trading instruments due to a bug in the adaptor used to connect to one of the supported liquidity providers. * Fixed an issue related to data exchange with message-oriented middleware, which caused occasional rejection of orders placed using the FIX protocol. * Fixed an issue due to which in certain scenarios the hedging engine attempted to place trades on one of the supported liquidity provider platforms despite the corresponding API keys being missing. * Fixed an issue due to which requests to place offset orders were occasionally sent to hedging platforms even when the order volume was zero after applying the trading rules governing decimal precision of order amounts on these platforms. ### December 16, 2022 [#december-16-2022] #### New features [#new-features-26] ##### Support for multiple accounts on a single hedging platform [#support-for-multiple-accounts-on-a-single-hedging-platform] Automated hedging can now be performed simultaneously on two or more accounts on the same hedging platform for routing offset trades with a purpose of hedging market risks. First and foremost, the B2CONNECT team is committed to empowering its user base — that is, operators of trading venues, such as spot crypto exchanges and brokerages — and putting their best efforts to implement as flexible and efficient hedging policies as possible. With that in mind, this newly added feature is aimed at supporting multiple accounts on a single hedging platform, while ensuring precise order placements, timely delivery of execution confirmations and in-depth reporting for each account used to make offset trades on a given liquidity provider platform. #### Improvements [#improvements-23] ##### Unmatched execution quality due to asynchronous placement of orders [#unmatched-execution-quality-due-to-asynchronous-placement-of-orders] The B2CONNECT order placement engine relying on trading sessions maintained using the FIX protocol has been vastly improved by adding support for asynchronous placement of large numbers of orders submitted for execution on liquidity provider platforms, which has resulted in unprecedented speed and unrivaled execution quality. ##### Extended infrastructure for engineering of synthetic instruments [#extended-infrastructure-for-engineering-of-synthetic-instruments] A new improvement to the B2CONNECT synthetics engine has significantly extended the range of available sources of quotes suitable for engineering synthetic trading instruments, such as synthetic crosses, fractional markets and inverted pairs. Accessible price feeds are not only received from a B2CONNECT instance hosting the synthetics engine itself, but also from any other instance within the Liquidity Hub ecosystem. #### Resolved issues [#resolved-issues-24] * Fixed an issue related to the reporting service: when a single order was filled by way of multiple executions on a particular hedging platform, only one of the executions was recorded. * Fixed a bug related to the [SimpleFIX Go library](https://github.com/b2broker/simplefix-go/) implementing the FIX protocol, which could have caused an issue with the logon sequence if a client used a different FIX protocol implementation. * Fixed an issue causing a resource leak in the synthetics engine that could have given rise to intermittent stability issues. In addition, another resource leak has been eliminated in an adapter used to connect to one of the supported spot cryptoasset liquidity providers, ensuring overall stability of the service, its reliability and uninterrupted uptime. ### November 25, 2022 [#november-25-2022] #### New features [#new-features-27] ##### Direct integration of the B2CONNECT FIX server with PrimeXM [#direct-integration-of-the-b2connect-fix-server-with-primexm] The B2CONNECT Liquidity Hub is now capable of distributing liquidity as a maker to PrimeXM. Client connections to this leading liquidity aggregation platform are powered by the industry-standard FIX protocol, and the liquidity bridged by B2CONNECT can now be distributed directly on PrimeXM for its subsequent distribution across other trading venues. Both the quoting and trading sessions are supported, providing immense benefits to trading venues participating in the B2CONNECT ecosystem and offering them new exciting opportunities to grow their business and differentiate from competitors in both the scope and performance of trading instruments available both to their users and the trading community as a whole. #### Improvements [#improvements-24] ##### Automatic validation of markups [#automatic-validation-of-markups] The price construction mechanism featured by B2CONNECT has been further improved by adding validation to the key parameters entered for price markups. If the markup values assigned to the BID and ASK sides are asymmetric, a warning is issued prompting a venue operator to correct the entered values so that unequal markup amounts are not placed on both sides of the order book. ##### More data for tracking orders and matching elements of the hedging flow [#more-data-for-tracking-orders-and-matching-elements-of-the-hedging-flow] The logging and reporting functionality provided by various B2CONNECT services has been enhanced by listing external execution identifiers assigned by connected liquidity providers along with their B2CONNECT-assigned equivalents. This way, order matching has become much quicker, also facilitating subsequent analysis of trades. Moreover, orders have also become easier to track thanks to newly introduced granular timestamps. #### Resolved issues [#resolved-issues-25] * Fixed an issue due to which the order book was reset upon receiving out-of-sequence incremental updates for Level 2 quotes from one of the supported liquidity providers. * Fixed an issue related to one of the supported liquidity providers: a command to subscribe to incremental updates was ignored for all trading instruments if it couldn’t be executed only for some of them. * Fixed an issue related to the B2CONNECT FIX protocol: non-sequential numbers were assigned to certain FIX messages. * Fixed a rarely occurring issue related to the B2CONNECT Web UI: toggling a certain switch when setting up one hedging platform could result in misconfiguration of another hedging platform. * Fixed an issue related to the reporting and alerting service used for sending messages to a Slack channel: in some cases, incorrect data was being reported. *** ### October 14, 2022 [#october-14-2022] #### New features [#new-features-28] ##### Liquidity from and hedging on FTX [#liquidity-from-and-hedging-on-ftx] We are happy to announce yet another major achievement in our quest for unrivaled connectivity for B2CONNECT across the spot crypto liquidity space: with this release, FTX, a top-rated global crypto exchange, has been supported, once again letting B2CONNECT assert itself as a flagship liquidity hub and price discovery engine. The liquidity for all markets represented on FTX is immediately available for any exchange powered by the B2TRADER matching engine as well as to any trading platform connected to B2CONNECT via the FIX API. Along with supplying the price feed for spot markets, the newly introduced connection adapter radically extends the range of price risk hedging options offered by the B2CONNECT hedging engine. #### Improvements [#improvements-25] ##### DB connectivity monitoring [#db-connectivity-monitoring] When it comes to the cloud infrastructure accommodating the B2CONNECT services, we put our best efforts to not only ensure its highest performance and extreme reliability, but also envision efficient ways to monitor and maintain connectivity. In keeping true to our principle — trust, but verify — we have implemented automated detection of connectivity issues related to managed cloud database services. ##### Optimal subscription management [#optimal-subscription-management] Superb performance is the cornerstone on which rests the success of the B2CONNECT liquidity platform, and it’s been proved time and again during its development that the key to achieving the highest degree of efficiency is constant optimization. This time, it has been ensured that the liquidity hub only subscribes to the symbols that take part in liquidity distribution. This saves the cloud resources due to removal of subscriptions which are not currently in demand and further improves the overall platform performance. #### Resolved issues [#resolved-issues-26] * Fixed an issue due to which one of services stopped after removing a subscription to a price feed. * Fixed an issue due to which a mandatory time-in-force parameter value wasn’t sent when placing hedging orders of a certain type on a particular hedging platform. *** ### September 23, 2022 [#september-23-2022] #### New features [#new-features-29] ##### Conversion of derivative contract lot sizes to smaller and larger tradable amounts [#conversion-of-derivative-contract-lot-sizes-to-smaller-and-larger-tradable-amounts] With this release, you can split derivative contracts and reform contract specifications with underlying digital assets to change the contract lot size and lot price. This is a major development, since it enables quoting and trading fractional and, inversely, consolidated crypto derivative contracts. For example, if an instrument is traded at a liquidity provider venue in lots of 1000, such derivatives can now be traded in lots of one to a million on a taker side, with the contract quotes readily adjusted to the new contract sizes. When the orders are placed for executions on liquidity provider venues, they are adjusted to meet the lot size requirements of each venue. #### Improvements [#improvements-26] ##### The order book state may be preserved indefinitely [#the-order-book-state-may-be-preserved-indefinitely] The adapter used to connect to liquidity providers has been further improved by adding the option to hold the last value of a quote indefinitely. A good case for this is dealing with acquisition of quotes when the asset price changes only intermittently even though the connection to the liquidity provider is alive. ##### The current state of Level 2 quotes is now reset upon disconnection [#the-current-state-of-level-2-quotes-is-now-reset-upon-disconnection] This improvement is related to the previous one: it has been ensured that even when the asset price is configured to handle infrequent refreshing of quotes, once connection to a liquidity provider goes down, the state of Level 2 quotes is reset until connection to the source of quotes is renewed. #### Resolved issues [#resolved-issues-27] * Fixed an issue due to which, when asset volume is denominated with high decimal precision, small order amounts could be truncated to zero and error messages may be sent by liquidity providers. It is now ensured that hedging is handled properly, and in cases when orders are so small that they would be rejected by liquidity provider venues, they are not sent there for execution. * Fixed an issue which caused race conditions. This has resulted in improved stability and performance of a hedging agent along with an adapter used to fetch asset quotes from a liquidity provider venue. * Fixed an issue related to recording of time values. It has been ensured that timing is now properly recorded and corrected for ongoing order execution requests. * Fixed an issue concerning a service responsible for handling the FIX protocol. The service is now capable of resuming the price feed after connection to the liquidity taker was reinstated. * Fixed an issue due to which upon entering a long numerical value on a Web UI form, its last digit was switched to zero. *** ### September 2, 2022 [#september-2-2022] #### New features [#new-features-30] ##### Updated documentation [#updated-documentation] A new section has been added to the B2CONNECT documentation providing a user interface overview and illustrating how to accomplish the most common tasks. Refer to the **Product guide** to learn about the hedging functionality provided by B2CONNECT. #### Improvements [#improvements-27] With this release, various changes have been introduced to B2CONNECT user interface, which include the following improvements: * A table header in the Hedging configuration section has become fixed, making it easier to see the field captions when scrolling down the page. * All buttons have been provided with tooltips describing their functionality. * The minimum screen resolution (960px) is now supported on all product pages. *** ### August 12, 2022 [#august-12-2022] #### New features [#new-features-31] ##### Full support for Huobi Futures [#full-support-for-huobi-futures] Huobi Futures, a top-rated derivative exchange platform, has been fully supported. As a result, robust supply of level 2 quotes has been ensured across the entire range of trading instruments, including but not limited to futures, swaps and perpetual swaps available on the newly supported platform. This new level of liquidity has been provided following a major update of a recently released Huobi Spot Adapter, which was greatly extended to allow B2CONNECT clients to explore all the advantages offered by Huobi-powered trading venues. The trading API is also supported, which opens new opportunities for best price execution and radically expands the range of options available to B2CONNECT Liquidity Hub clients in the realm of market risk mitigation while allowing them to offer their end users the tightest spreads and deepest order books across today’s markets. Among other features, pre-execution model is fully supported and immediately available to client venues utilizing the FIX protocol and relying upon the B2CONNECT signature FIX API. #### Improvements [#improvements-28] ##### Increased consistency of synthetic quotes [#increased-consistency-of-synthetic-quotes] The engine responsible for engineering synthetic cross pairs and fractional trading instruments has received yet another boost in functionality to increase the consistency of synthetic quotes by eliminating any outlying values when calculating spreads. ##### Extra validation ensuring decimal precision of asset prices [#extra-validation-ensuring-decimal-precision-of-asset-prices] Arguably, when it comes to cryptocurrencies and other types of digital assets, the issue of decimal precision may be challenging for some legacy trading platforms and liquidity aggregators that primarily deal with fiat instruments and traditional securities. In contrast, B2CONNECT ensures that liquidity is always ingested, handled and distributed with superb efficiency, regardless of decimal precision and numerical value range of asset prices. With an additional layer of validation added to its liquidity engine, B2CONNECT makes sure that decimal precision values are always handled in strict accordance with the client specification, throughout the entire liquidity processing pipeline. #### Resolved issues [#resolved-issues-28] * Fixed an issue due to which supported platforms could sometimes fail to subscribe to level 2 quotes provided by B2CONNECT. * Fixed an issue due to which the final status of an order execution could be recorded incorrectly in certain scenarios involving one of the supported hedging platforms. *** ### July 1, 2022 [#july-1-2022] #### New features [#new-features-32] ##### Hedging reports — New section in Web UI [#hedging-reports--new-section-in-web-ui] On a newly introduced Hedging Reports page, you can find the history of hedging orders, view comprehensive order data and drill down to the minute details of each execution. The data on order placement requests and hedging platform responses is readily available, along with the information related to timing of each step along the order processing pipeline. You can filter the reports by various criteria, including different types of order and counterparty IDs, order placement and execution data, as well as various time intervals. The table layout is configurable, making it possible to reorder the columns and display or hide any column according to your preferences. #### Resolved issues [#resolved-issues-29] * Fixed various usability issues to improve the user experience. * Fixed an issue which prevented access to inputs due to an overlapping menu. *** ### June 10, 2022 [#june-10-2022] #### New features [#new-features-33] ##### A tenfold increase in Level 2 quotes update speed [#a-tenfold-increase-in-level-2-quotes-update-speed] The rate of Level 2 quote updates has been increased ten times compared to the previous release, enabling liquidity feeds to be refreshed with an interval of 100 ms. This feature allows B2CONNECT Liquidity Hub clients to initiate and maintain the most up-to-date order books that enhance user experience for traders on the supported exchange and broker platforms, as well as make risk management aspects of trading venue operations more predictable. #### Improvements [#improvements-29] ##### API rate limits implementation [#api-rate-limits-implementation] The B2CONNECT Liquidity Hub hedging engine’s reliability has been given yet another boost with the implementation of support for request rate limits. This ensures optimal uptime for API connections employed for the purposes of trade executions and reporting. ##### Heartbeats and graceful connection termination [#heartbeats-and-graceful-connection-termination] Health checks and connection handling safeguards have been added to ensure a seamless connection to liquidity provider data. As a result, unmatched reliability in managing Level 2 quote feeds has been achieved. #### Resolved issues [#resolved-issues-30] * Fixed timeout issues that could affect reliability of full-duplex communication channels-while connecting to certain liquidity providers via API. * Fixed an issue with the mechanism responsible for restoring an API connection upon its interruptions in certain corner cases. * Fixed an issue due to which the Filled Amount field in hedging order execution reports could contain incorrect values. *** ### May 20, 2022 [#may-20-2022] #### New features [#new-features-34] ##### Markups as a function of order book depth [#markups-as-a-function-of-order-book-depth] B2CONNECT Liquidity Hub clients can now apply multiple markups based on the price level defined for Level 2 quotes. Together with variable volume modifiers introduced earlier this year, this feature empowers the trading venue operators to manage the liquidity of their order books to a highest precision, thus improving the user experience while mitigating market risks. #### Improvements [#improvements-30] ##### Improved logics for applying markups [#improved-logics-for-applying-markups] The algorithms used for applying both constant and multi-tiered markups have been revised. This has resulted in improved quality of liquidity distribution after applying markups. ##### More granular analytics with new data included in hedging order execution reports [#more-granular-analytics-with-new-data-included-in-hedging-order-execution-reports] More data about orders is now recorded by the B2CONNECT reporting engine. A new field has been added to store the order status information provided by hedging platforms. Furthermore, a new status has been included to distinguish expired orders from those canceled for other reasons. #### Resolved issues [#resolved-issues-31] * Fixed an issue that caused a leak of resources during disconnections occurring as a result of intermittent network failures. * Fixed several issues that occurred in rare scenarios. Reliability and high availability of services responsible for liquidity supply in various market conditions has been ensured as a result. *** ### April 29, 2022 [#april-29-2022] #### New features [#new-features-35] ##### Yet more liquidity from Huobi Global [#yet-more-liquidity-from-huobi-global] The B2CONNECT Liquidity Hub is celebrating a new major update: we worked hard to introduce a fully featured adapter for the top-rated crypto exchange Huobi Global. Both the Level 2 quote and hedging adapters have become available to all B2CONNECT Ecosystem participants. This highly anticipated component has boosted both the breadth and depth of the crypto spot liquidity offering, carrying a great advantage for supported digital asset exchanges, including B2TRADER. For the liquidity hub as a platform, this also ensures increased availability and improved failover capability. The influx of liquidity from the new source will also benefit the client venues integrated with B2CONNECT via FIX API. #### Improvements [#improvements-31] ##### Optimized market data delivery [#optimized-market-data-delivery] The parser of market data coming from one of the world's largest crypto exchanges has been optimized, which resulted in a significant improvement in the adapter performance. Latency has been reduced by an order of magnitude, and the quality of market data and overall reliability have been considerably improved. ##### More flexible hedging with enhanced time-in-force settings [#more-flexible-hedging-with-enhanced-time-in-force-settings] A hedging adapter for one of the major crypto-asset exchanges has been revamped, extending our offering to encompass the full range of trading parameters available for orders placed in the context of market risk hedging. With the newly introduced time-in-force options, our clients are free to devise more flexible and ultimately more efficient hedging strategies. #### Resolved issues [#resolved-issues-32] * Fixed an issue which didn't allow the hedging agent to record certain fields when trades were rejected by a hedging platform. * Fixed an issue which affected processing of incoming and outgoing messages used by one of the supported protocols, when some messages could be blocking other ones at a high load. A considerable potential bottleneck has been prevented as a result. * Fixed an issue that could affect order book consistency for one of the supported exchanges. * Fixed an issue that could have impact on the stability of some of the B2CONNECT services if reports were received in an incorrect format. * Fixed an issue that could result in a failure to cancel a previously placed order while executing a hedging strategy on one of the supported hedging platforms. ### April 8, 2022 [#april-8-2022] #### New features [#new-features-36] ##### Comprehensive integration with Bittrex Global [#comprehensive-integration-with-bittrex-global] A new adapter has been introduced to enable price discovery and market risk hedging on Bittrex Global. Connection to this global crypto exchange drastically extends the range of trading instruments and hedging options provided by B2CONNECT. ##### Hedging on Coinbase [#hedging-on-coinbase] A new adapter has been introduced to enable spot asset hedging on the Coinbase crypto exchange. For B2CONNECT Liquidity Hub clients who already came to appreciate the advantages of seamless Coinbase connection, this improvement signals complete integration with this major crypto trading platform, opening the opportunity for superior spot asset hedging. #### Improvements [#improvements-32] ##### Extended price feed options [#extended-price-feed-options] The price feed can now be streamed in the form of order book snapshots. Adding up to incremental feed updates, this further ensures even and reliable streaming of prices. ##### New performance benchmark reached [#new-performance-benchmark-reached] Over 200% increase in B2CONNECT performance has been secured thanks to optimization of the data interchange mechanism, which resulted in a major reduction of latency and more judicious use of computing resources. Smart use of cloud resources and bandwidth directly translates into the amount of trading instruments which a B2CONNECT instance can handle efficiently. This also implies increased market depth and higher frequency of symbol quote updates, along with a much better quality of order execution and improved bottom line. #### Resolved issues [#resolved-issues-33] * Fixed an issue impairing the reliability of streaming order book data in rare scenarios. * Fixed an issue which occasionally caused a resource leak in cases when specific configuration parameters were missing. The stability of the hedging services has improved as a result. * Fixed an issue causing occasional inversion of sides when hedging trades were placed on certain platforms. *** ### March 18, 2022 [#march-18-2022] #### New features [#new-features-37] ##### Streamlined order book consolidation [#streamlined-order-book-consolidation] With this release, B2CONNECT supports consolidation of Level 2 quotes with unlimited market depth into any order book, according to flexible configuration rules. As a result, B2CONNECT clients can stream a price feed with a specified liquidity distribution to fill an order book with fewer levels while preserving the overall market depth. This way the B2CONNECT platform, with its support for virtually unlimited market depth, becomes even easier to integrate with trading venues whose market depth is limited to just a dozen or a hundred order book levels. At present, this functionality is available only for services accessible via FIX API. ##### Improved SimpleFIX Go documentation [#improved-simplefix-go-documentation] The official documentation for the SimpleFIX Go library has been updated. This state-of-the-art library makes for a major contribution to open source on behalf of B2BROKER, providing an up-to-date FIX engine implementation out of the box while featuring high performance and employing a highly sought-after Go technology stack. The library is available at [https://github.com/b2broker/simplefix-go](https://github.com/b2broker/simplefix-go/) offering the global developer community a quick and easy approach to integrate FIX messaging pipelines into modern trading solutions powered by Go as well as ensure a closer integration with well-proven products from the B2BROKER family. #### Improvements [#improvements-33] ##### Support for liquidity with virtually unlimited order book depth [#support-for-liquidity-with-virtually-unlimited-order-book-depth] As a result of this improvement, nearly unlimited number of Level 2 quotes is now supported when it comes to the actual number of price levels in the order book, which includes (but is not limited to) order books featuring 1,000+ levels that are currently supported. ##### Extended configuration of Level 2 quotes [#extended-configuration-of-level-2-quotes] The set of configuration parameters required for consolidation of Level 2 quotes into a custom price feed has been extended to include the options that define the number of price levels being consolidated into a target order book, volume distribution settings and the rules for discovering prices at specific order book levels. #### Resolved issues [#resolved-issues-34] * Revamped a service responsible for switching the source of Level 2 quotes in the case when the counterparty starts supplying incorrect order book data. Continuous operation of price discovery services has been ensured as a result. * Fixed an issue that caused inversion of hedging trade sides in certain scenarios. *** ### February 25, 2022 [#february-25-2022] #### New features [#new-features-38] ##### Pre-trade execution control [#pre-trade-execution-control] B2CONNECT now supports pre-trade execution control that enables the trading venues integrated via the FIX API to connect to the B2CONNECT Liquidity Hub as takers. When connected as a taker, a venue receives Level 2 quotes, it can place orders and receive confirmations when a maker executes the orders. ##### FIX API documentation [#fix-api-documentation] Basic [FIX API specification](fix-api) has become available to help independent trading venues and liquidity providers integrate B2CONNECT Liquidity Hub into their solutions via the FIX API. #### Improvements [#improvements-34] ##### Pricing Service streams prices with markups already applied [#pricing-service-streams-prices-with-markups-already-applied] A specialized B2CONNECT service providing top-of-the-book prices (that is, Level 1 quotes) is now streaming quotes with configurable markups already applied, as opposed to the earlier implementation, with only the raw quotes provided so that markups had to be applied explicitly upon receiving the markup values via separate REST APIs. The newly introduced approach is much easier and less time-consuming. #### Resolved issues [#resolved-issues-35] * Fixed an issue that resulted in the lot size not being taken into account when placing hedging orders on certain hedging platforms. * Fixed issues that affected the stability and performance of the B2CONNECT hedging engine. *** ### February 4, 2022 [#february-4-2022] #### New features [#new-features-39] ##### Full support for Kraken spot liquidity [#full-support-for-kraken-spot-liquidity] Trading venues participating in the B2CONNECT Ecosystem can now take advantage of ready access to spot liquidity on one of the top-ranked cryptocurrency exchanges — yet another milestone for B2CONNECT continuing on its mission of diversifying access to liquidity, be it crypto spot markets, crypto derivatives or other popular trading instruments. #### Improvements [#improvements-35] ##### Improved support for Poloniex API [#improved-support-for-poloniex-api] The Poloniex connection adapter has been updated following the changes to the API of this leading digital assets exchange, which resulted in enhanced performance and improved connection stability. ##### Extended integration with B2TRADER [#extended-integration-with-b2trader] With this release, B2CONNECT features even deeper integration with B2TRADER, a flagship matching engine and crypto assets exchange platform. As a result, more efficient delivery of trading reports and faster execution of hedging orders have become possible. #### Resolved issues [#resolved-issues-36] * Fixed an issue related to the Poloniex adapter and causing inconsistencies in Level 2 quotes under certain circumstances. * Fixed a reporting-related issue to ensure that the fees and commissions data is properly received and reflected in hedging reports. * Fixed issues causing occasional quote feed inconsistencies arising immediately after updating the configuration of some of the B2CONNECT services. *** ### January 14, 2022 [#january-14-2022] #### New features [#new-features-40] ##### Volume modifiers variable by price level [#volume-modifiers-variable-by-price-level] B2CONNECT Liquidity Hub clients can now configure a volume modifier (otherwise known as multiplier) as a function of market depth. Risk management precision can be ensured by fine-tuning liquidity distribution data in the order book. ##### Execution of hedging orders on Binance Futures [#execution-of-hedging-orders-on-binance-futures] A new adapter has been introduced for execution of hedging orders on Binance Futures, a major platform specializing in crypto derivatives. Combined with instruments for perpetual futures trading, this new service creates truly exciting opportunities for B2CONNECT Liquidity Hub clients. ##### Hedging of spot assets with Binance perpetual futures [#hedging-of-spot-assets-with-binance-perpetual-futures] Spot asset trades can be hedged with perpetual futures. B2CONNECT clients can reduce costs and improve the cash flow by applying more attractive strategies. #### Improvements [#improvements-36] * A new adapter has been introduced for connection to Gemini, another major cryptocurrency exchange providing spot liquidity for B2CONNECT clients. * A new adapter has been introduced for execution of hedging orders on the Poloniex crypto exchange. #### Resolved issues [#resolved-issues-37] * Fixed an issue that could result in omission of some trade parameters in the hedging orders trade history. * Fixed an issue that could cause an order timeout error despite normal execution of actual trades. ### December 17, 2021 [#december-17-2021] #### New features [#new-features-41] ##### Hedging configuration in the B2CONNECT Admin panel [#hedging-configuration-in-the-b2connect-admin-panel] Introducing a new Admin panel with a convenient user interface featuring useful hedging configuration options, allowing you to: * Specify the minimum and maximum amount at which to execute hedging orders, and define different hedge ratios for each order side. * Map some of the hedging order symbols to other symbols, meaning that you can hedge using any symbols apart from those present in a particular instrument. These options can find a variety of applications. For example, you can hedge by forcibly splitting large orders and executing each portion separately. ##### Hedging status — New section in Web UI [#hedging-status--new-section-in-web-ui] On a new Hedging Status page, you can manage and monitor trading venues and hedging platforms to solve any of the following tasks: * Run or stop the hedging process. * Connect hedging platforms to client exchanges or disconnect them according to your risk transfer preferences. * Manage API keys provided by the connected hedging platforms. *** ### December 3, 2021 [#december-3-2021] #### New features [#new-features-42] ##### FIX integration — Another major liquidity distribution platform supported [#fix-integration--another-major-liquidity-distribution-platform-supported] A new adapter has been introduced for connection to another major platform specializing in margin trading. This is a welcome addition to a rich set of connectivity options available to B2CONNECT Liquidity Hub clients. ##### Simultaneous connection to a number of ecosystem makers [#simultaneous-connection-to-a-number-of-ecosystem-makers] Any venue participating in the B2CONNECT ecosystem (or *ecosystem taker*) can now establish a live connection with multiple *ecosystem partners*, enjoying simultaneous access to multiple liquidity streams and gaining a competitive edge on the turbulent hedging market #### Improvements [#improvements-37] * The identifier assigned to executions by an exchange is now being tracked throughout the entire succession of hedging operations. This greatly improves the quality of end-to-end analytics available to risk managers employed at venues participating in the B2CONNECT ecosystem. * The hedging order placement process has been streamlined, resulting in improvements to the prioritization engine, which ensures the fastest possible routing of orders resulting in timely and efficient risk transfer coming handy to any risk management strategy. * In anticipation of possible connection failures or other issues compromising continuous liquidity flow from ecosystem makers, both the price feed and hedging can be configured to prescribe automatic switching to another ecosystem partner or external liquidity provider, followed by switching back to use them again as soon as the connection is restored. #### Resolved issues [#resolved-issues-38] * Fixed an issue that could compromise reliability of order routing services in some scenarios. Fault tolerance is now ensured in potentially disruptive cases, such as when trading symbols are found to be misconfigured or missing from a hedging configuration. *** ### November 12, 2021 [#november-12-2021] #### New features [#new-features-43] ##### The VWAP and total volume included in reports [#the-vwap-and-total-volume-included-in-reports] Hedging orders exceeding a certain amount (configurable) can be executed in multiple portions. The total hedging volume and Volume Weighted Average Price are included into a corresponding report. ##### 100 price levels — Market depth milestone passed [#100-price-levels--market-depth-milestone-passed] Liquidity can now be provided with a market depth of more than 100 order book levels, which in practice implies virtually infinite order book. The previous milestone, with a maximum of 100 levels in the order book, has been reached and passed — the actual market depth now depends solely on the available computing resources. ##### Flexible user roles and granular access permissions [#flexible-user-roles-and-granular-access-permissions] It is now possible to configure and assign custom user roles, dynamically if required. This approach to maintaining access permissions ensures proper access control granularity, promising an easier way to manage a multitude of permissions across various system modules. #### Improvements [#improvements-38] * Data exchange between various product services via the internal messaging system has been optimized, resulting in sturdier interoperability and reduced consumption of cloud resources. * Currency pairs can now be inverted, which adds up to the range of hedging parameters available for synthetic instruments. They can be modeled on any of the symbols in a pair, regardless of whether they are notionally considered base or quoted. #### Resolved issues [#resolved-issues-39] * Fixed an issue that imposed an unreasonable limit upon the order book depth. *** ### October 22, 2021 [#october-22-2021] #### New features [#new-features-44] ##### Synthetic Engine integration [#synthetic-engine-integration] The Synthetics Engine has become an integral part of the B2CONNECT Liquidity Hub ecosystem. ##### Notional values as hedging order limits [#notional-values-as-hedging-order-limits] The set of hedging configuration parameters has been extended, making for a much more flexible risk management: when configuring limit settings of your hedging orders, you can list both a base asset and a notional symbol which may be quoted in any asset, including fiat currencies. ##### More order types, hedging with time-in-force settings [#more-order-types-hedging-with-time-in-force-settings] The set of available time-in-force options has been extended. Apart from a variety of market orders, you can place limit orders and configure their slippage settings. #### Improvements [#improvements-39] * Precise timing is now an important aspect of analytics available to B2CONNECT Liquidity Hub clients. The time of order execution at a hedging platform is now being tracked, opening doors for new insights inspired by accurate execution data. * It is now possible to specify the minimum and maximum amount for hedging orders. The amount limits are adjusted to the hedge ratio. #### Resolved issues [#resolved-issues-40] * Fixed an issue compromising the stability of an internal service monitoring the status of sources supplying Level 2 quotes to B2CONNECT. Continuous streaming of liquidity feeds is now ensured. *** ### June 10, 2021 [#june-10-2021] #### New features [#new-features-45] ##### RESTful API with Swagger documentation [#restful-api-with-swagger-documentation] RESTful API has been provided to lay the ground for a graphical user interface and further integration between B2CONNECT and other B2BROKER products featuring a UI. ##### External liquidity providers as venues for price risk hedging [#external-liquidity-providers-as-venues-for-price-risk-hedging] Trades executed on B2TRADER can now be hedged automatically, by forwarding price risks to an external liquidity provider, such as Binance. ##### Direct hedging upon external liquidity providers for B2BX clients [#direct-hedging-upon-external-liquidity-providers-for-b2bx-clients] Direct hedging of price risks via external liquidity providers has become possible. You can execute hedging orders on Binance or any other platform connected to a client exchange participating in the B2CONNECT ecosystem and receiving liquidity from B2BX. ##### Currency conversion for values displayed in reports [#currency-conversion-for-values-displayed-in-reports] A new service has been introduced, tracking conversion rates and allowing you to convert the reported order size and trade total values into any currency. #### Improvements [#improvements-40] ##### Extended hedging parameters [#extended-hedging-parameters] The set of hedging parameters has been extended, enabling B2CONNECT clients to: * configure hedge parameters based on trader account identifiers * define a hedge ratio based on the trade side (buy or sell) * map a hedging instrument to another spot market symbol (for instance, you can hedge BTC/USDT trades with BTC/USDC orders) ##### Improved trade placement and execution analytics [#improved-trade-placement-and-execution-analytics] More data about each trade is now provided by B2TRADER, improving end-to-end analytics derived from hedging requests and responses. ##### Synthetics engine supports inversion [#synthetics-engine-supports-inversion] When designing synthetic instruments, components of synthetic cross pairs can now be inverted. #### Resolved issues [#resolved-issues-41] * Fixed an issue causing the hedging agent to drop connection in case of empty credentials having been specified for any API member in the configuration. * Fixed an issue preventing operation of some of the markets available to a pricing service. * Fixed an issue related to a price discovery gateway and resulting in improper application of market depth constraints to some of the trading instruments. *** ### February 18, 2021 [#february-18-2021] #### New features [#new-features-46] ##### Internal hedging on B2TRADER [#internal-hedging-on-b2trader] Introducing a new hedging agent, named Hedgehog, for redirecting trading orders placed on one platform to another venue. ##### Authorization based on JSON Web Token [#authorization-based-on-json-web-token] A new JWT-based service has been implemented, enabling authorization of clients connecting to B2CONNECT. Among other things, this makes it possible to identify transactions made on different B2TRADER platforms with a view of subsequent hedging. ##### Tracking of hedging orders [#tracking-of-hedging-orders] A new service has been implemented for gathering statistics and analytics necessary to properly monitor execution of hedging orders. #### Improvements [#improvements-41] ##### Timeout customization for individual instruments [#timeout-customization-for-individual-instruments] Custom timeouts can now be configured separately for each instrument. Using this option, you can reset the instrument's order book and switch to another price source, ensuring price quotation reliability for low-liquidity instruments. ##### Improved price feed [#improved-price-feed] The price feed reliability has been ensured, while the overall performance has improved. ##### New metrics for performance monitoring [#new-metrics-for-performance-monitoring] New metrics have been added for tracking the status and performance of B2CONNECT services to identify and prevent any possible failures. #### Resolved issues [#resolved-issues-42] * Fixed an issue preventing constructed quote (market) updates for some instruments by checking that a corresponding symbol is mapped. Learn about trading platforms, payment providers, and other third-party solutions integrated with B2CORE Learn about trading platforms, payment providers, and other third-party solutions integrated with B2CORE Gain a deeper view of the B2CORE Back Office user interface Gain a deeper view of the B2CORE Back Office user interface Step-by-step guides for common admin tasks and configurations in the B2CORE Back Office Step-by-step guides for common admin tasks and configurations in the B2CORE Back Office Deploy branded mobile apps for iOS and Android Deploy branded mobile apps for iOS and Android Identify and address common issues quickly and effectively with our guides Identify and address common issues quickly and effectively with our guides The B2CORE API is restricted and *not* publicly available. If you require the API documentation, please submit a support ticket with a clear and detailed description of your intended use cases. Providing a thorough explanation of how you plan to use the API will help us assess your needs accurately and minimize follow-up questions or delays. Explore the Back Office and learn how to launch your own partnership programs Explore the Back Office and learn how to launch your own partnership programs Discover IB Room and join a partner plan to begin attracting new clients while earning rewards Discover IB Room and join a partner plan to begin attracting new clients while earning rewards ## May 29, 2026 [#may-29-2026] ### New features [#new-features] #### CPA (Cost-Per-Acquisition) payment plans [#cpa-cost-per-acquisition-payment-plans] A new **Cost-Per-Acquisition (CPA)** payment model is now available. Brokers can reward partners when a referred client reaches a milestone, such as completing **registration**, passing **KYC verification**, or making a **minimum deposit**. *** #### Granular access permissions [#granular-access-permissions] Access to the **Introducing Brokers** section can now be controlled with greater precision. The broad **View** and **Edit** permissions have been split into per-section permissions, so Back Office roles can be granted access to exactly the sections they need — for example, viewing **Reports** without the ability to edit **Payment plans**. *** ### Improvements [#improvements] * A **date range** filter has been added to an individual partner's payment report, making it easier to review rewards over a specific period. *** ### Resolved issues [#resolved-issues] * Resolved an issue where exporting trades for a specific client could be very slow for partners with large trade histories. These exports now complete significantly faster. *** ## Past releases [#past-releases] ### April, 2026 [#april-2026] #### New features [#new-features-1] ##### Platform Spread and Platform Markup payment plans [#platform-spread-and-platform-markup-payment-plans] Two new payment plans are now available — **Platform Spread** and **Platform Markup**. They reward partners based on the actual spread and markup applied on the trading platform, captured automatically per symbol, rather than values estimated from a configured ratio. #### Improvements [#improvements-1] * The process that recalculates statistics and reports has been reworked for greater speed and reliability. Partner and program figures now refresh more consistently, even for brokers handling large data volumes. *** ### March, 2026 [#march-2026] #### New features [#new-features-2] ##### IB chain reassignment [#ib-chain-reassignment] New **“Reassign Users”** UI added. Brokers can now reassign an entire IB sub-branch from one partner to another in a single operation. This significantly simplifies the reassignment process, making it faster and less prone to errors than moving branches manually one by one. #### Improvements [#improvements-2] * A **Position lifetime** column has been added to the **Trades** table. *** ### February, 2026 [#february-2026] #### New features [#new-features-3] ##### TradeLocker platform integration [#tradelocker-platform-integration] The **TradeLocker** platform is now supported, enabling brokers to connect TradeLocker to their partnership program and reward partners on the same terms as other platforms. Support covers accounts, symbols, trading groups, trades, and payment plans, all manageable from the Back Office. #### Improvements [#improvements-3] * Added a new **IB Program Type** restriction. *** ### January, 2026 [#january-2026] #### New features [#new-features-4] ##### Asynchronous data exports [#asynchronous-data-exports] Exporting large data sets from the **Introducing Brokers** section — including trades, payments, accounts, and rewards — now runs asynchronously in the background. Brokers can continue working while an export is prepared and download the file once it's ready, rather than waiting on the page or risking a timeout. This makes it possible to export much larger data sets reliably. ### December, 2025 [#december-2025] #### New features [#new-features-5] ##### B2TRADER platform integration [#b2trader-platform-integration] The B2TRADER platform is now integrated with B2CORE IB, enabling brokers to connect B2TRADER to their IB setup and start rewarding partners on the same terms as other platforms. All payment plans are supported, so you can keep existing partner configurations and apply the same reward logic across supported environments. ##### Spread payment plan for cTrader [#spread-payment-plan-for-ctrader] The Spread payment plan is now available for the cTrader platform, allowing brokers to reward partners based on a percentage of the spread. This option aligns cTrader with the spread-based rewards model already available on other platforms, so you can keep a consistent approach to partner payouts. #### Improvements [#improvements-4] * Reports for deposits and withdrawals have been reimplemented to improve consistency and performance. The updated reporting logic is designed to present results in a clearer, more stable way. ### October, 2024 [#october-2024] #### New features [#new-features-6] ##### New Spread payment plan for MT5 platform [#new-spread-payment-plan-for-mt5-platform] The IB team is excited to introduce the much-anticipated Spread payment plan for the MetaTrader 5 platform. This innovative plan enables brokers to reward their partners based on a percentage of the spread, significantly expanding their referral reach across various markets. ##### Tier volume in USD [#tier-volume-in-usd] From now on, trading volume for tiers can be set not only in lots, but in USD as well, offering brokers increased flexibility in IB types configuration. #### Improvements [#improvements-5] * The **IB** column has been added to the **Clients** page. It shows the partner's name who referred the client and serves as a link to the partner details. * The **Payments** > **Methods** page has been removed from the Back Office due to the potential for unforeseen issues arising from modifying or deleting payment methods. For the same reason, it’s no longer possible to delete platforms through the Back Office. * When creating a new IB type, a default tier with empty parameters will no longer be automatically created, as previously done. #### Resolved issues [#resolved-issues-1] There have been no customer-facing issues reported in this release. *** ### August, 2024 [#august-2024] #### New features [#new-features-7] ##### Migration to PostgreSQL [#migration-to-postgresql] Our team is happy to announce that the migration from MongoDB to PostgreSQL has been successfully completed. Although this is mostly an internal technical enhancement, end-users will notice that the IB application now runs faster and more stable. ##### Min. position lifetime for cTrader [#min-position-lifetime-for-ctrader] For the cTrader platform, the **Min position lifetime** option has been added. The logic is exactly the same as for MT platforms: if a position was closed earlier than the Min position lifetime, it’s not taken into account in rewards calculations. The **Min position lifetime, sec.** field is now available in the cTrader platform preferences. #### Improvements [#improvements-6] * IDs of new partners are now in UUID format, not an index number, as it was before. This change eliminates the need for the **Encrypted** setting on the **Promo** > **Landings** > **Links** page. Existing IDs retain the numeric format, the **Encrypted** setting continues to work for them. All existing referral links remain working. * Information on clients’ accounts is now available on a separate **Accounts** tab in IB details. * Payment of rewards has become faster, thanks to technical improvements that allow for parallelization of the process. * Now running the system processes from the Back Office is disabled by default. It’s aimed at avoiding potential overloads of the database and application. Contact our technical support team if you need to restart a process. * To improve system performance, process logs are no longer stored in the database. As a result, the **Introducing brokers** > **Logs** section has been removed from the Back Office menu, and the **Logs** column has been removed from the **Introducing brokers** > **Processes** page. * To improve system performance, data storage limits have been implemented in the database: * Processes: 1 month * Deposits: 1 year * Withdrawals: 1 year * Trades: 1 year ### March 21, 2023 [#march-21-2023] #### New features [#new-features-8] ##### cTrader integration with IB [#ctrader-integration-with-ib] cTrader has been integrated with B2CORE IB, allowing you to connect the cTrader platform to your IB instance by navigating to **Introducing Brokers** > **Platforms** > **Platforms**. #### Resolved issues [#resolved-issues-2] * Fixed an issue due to which it was impossible to create a payment plan for all symbols in a trading group as it was only created for the selected symbol. * Fixed an issue due to which the trade opening time wasn’t updated according to the time zone set on the MetaTrade4 platform. * Fixed an issue due to which the position lifetime didn’t match the time difference between opening and closing a position. * Fixed an issue due to which the clients’ deposit and withdrawal operations weren’t displayed in the **Introducing Brokers** section. * Fixed an issue due to which duplicate records were displayed for deposit and withdrawal operations. ### April 12, 2022 [#april-12-2022] #### New features [#new-features-9] ##### Brand new IB section [#brand-new-ib-section] The IB section featuring new design and extended functionality for running partnership programs has been introduced in the B2CORE UI. For details, refer to the **For partners** section. ##### Max amount payment plan [#max-amount-payment-plan] A new **Max amount** payment plan has been introduced with this release. With this plan, you can pay partners a fixed amount for each lot traded by their clients, in the same way as with the Lot payment plan, but with the opportunity to set the maximum reward amount regardless of the number of levels and specify the exact amount which a partner receives at each level. For details, refer to [Payment plans](broker-guide/payment-plans#max-amount). ##### Data on deposits, withdrawals and trades [#data-on-deposits-withdrawals-and-trades] The **Deposits**, **Withdrawals**, and **Trades** tabs have been added to IB details in the B2CORE Back Office. The tabs display data on deposits, withdrawals, and trades of all clients of a selected partner. The export feature as well as filtering and sorting options are available. *** ### March 29, 2022 [#march-29-2022] #### New features [#new-features-10] ##### Deposits & withdrawals data [#deposits--withdrawals-data] The **Deposits** and **Withdrawals** sections have been added to **Platforms**. They display data on deposits/withdrawals of all clients on all trading accounts, indicating the date-time, account, amount, and currency as well as the unique identifier of the operation on the trading platform. *** ### March 15, 2022 [#march-15-2022] #### New features [#new-features-11] ##### Platform disabling [#platform-disabling] A new feature that enables you to turn off a trading platform without deleting it has been implemented. A new **Status** field (Enabled/Disabled) has been added to the platform details in **Platforms** > **Platforms**. ##### Account disabling [#account-disabling] A new feature that allows you to disable trading accounts without deleting them has been implemented. Disabled accounts are excluded from data sync and reward payment. A new **Enabled** field (Yes/No) has been added to the account details in **Platforms** > **Accounts**. ##### Filter by account type [#filter-by-account-type] This feature is aimed at closer integration with PAMM, MAM, and B2COPY. It helps to distinguish trading accounts from investment accounts. A new **Account type** field has been added to **Platforms** > **Accounts**, **Platforms** > **Trades** and **Payments** > **Rewards**. When opening a trading account, its type is obtained from B2CORE. When changing the type of an accounts group in B2CORE, the type is updated for all accounts. ##### Trading volume in USD [#trading-volume-in-usd] The **Trading volume, USD** column has been added to the **Introducing brokers** section and **Clients** tab in broker details. Filtering by non-zero/zero trading volume (Yes/No) is available. The **USD Trading volume** field has also been added to the **Payment report**, **Reports** tab in partner details and IB type details, to the trade details and payment details. ##### Deposits & withdrawals data [#deposits--withdrawals-data-1] The **Deposits** and **Withdrawals** tabs have been added to the client details in **Program** > **Clients** and account details in **Platforms** > **Accounts**. They display data on deposits/withdrawals, indicating the date-time, account, amount, and currency of the operation. ##### Contract size [#contract-size] A new **Contract size** field has been added to the symbol details, trade details and payment details. *** ### March 1, 2022 [#march-1-2022] #### New features [#new-features-12] ##### Partners and clients data import [#partners-and-clients-data-import] Customers who switch to B2CORE from other systems can now import data of their partners and clients into B2CORE IB. #### Improvements [#improvements-7] * Languages and themes of banners in selectors are now displayed in alphabetical order in the B2CORE UI. *** ### February 15, 2022 [#february-15-2022] #### New features [#new-features-13] ##### Deposits & withdrawals details [#deposits--withdrawals-details] Dates, currencies, amounts, and account numbers of deposits and withdrawals have been synchronized with MT4 and MT5. ##### Trading volume in USD [#trading-volume-in-usd-1] Trading volume in USD is now calculated for each trade. #### Improvements [#improvements-8] * The capability to sort banners by size has been added to the B2CORE UI. The banners are ordered by their width. If two banners have the same width, their length is taken into account. * The Client tag field has been added to the client’s details. Before, it was displayed only on the Clients tab in the partner’s details. *** ### February 1, 2022 [#february-1-2022] #### New features [#new-features-14] ##### PDO Driver v3 [#pdo-driver-v3] MetaTrader 4, MetaTrader5, and B2CORE Payment Method have migrated to the PDO driver v3. ##### B2CORE admin tags [#b2core-admin-tags] Access to the data of B2CORE Back Office sections can now be restricted using tags specified for the admin. See [B2CORE Back Office Guide](https://docs.b2core.b2broker.com/en/back-office-guide.html) for more details. ##### Languages priority [#languages-priority] The Priority property has been added to the Languages tab of **Promo** > **Landing** > **Links**. ##### Symbol group trades [#symbol-group-trades] The Trades tab has been added to the trading group details. On this tab, you can see and export a list of trades in the symbol group. #### Improvements [#improvements-9] * The **Base currency code** and **Quote currency code** fields have been added to **Platforms** > **Symbols**. Filtering and sorting by these fields are supported. *** ### January 18, 2022 [#january-18-2022] #### New features [#new-features-15] ##### WEBAPI v4 driver [#webapi-v4-driver] Sync of trading groups and trading symbols can now be run with the newly integrated WEBAPI v4 driver. ##### Drivers priority [#drivers-priority] The **Priority** property has been added to drivers, with prioritization logic similar to that of rate providers: first, the driver with the highest priority is taken, in case of failure — the next backup driver, and so on. If all drivers return a failure, the service reports that the function can't be performed. This property has been added to the **Drivers** tab in **Platforms** > **Platforms**. When creating a driver, it's automatically assigned the lowest priority; the priority can be changed when a driver is being edited. #### Improvements [#improvements-10] * A validation by platform ID has been added to the B2CORE Back Office, which prohibits connecting the same trading platform multiple times. ### December 21, 2021 [#december-21-2021] #### New features [#new-features-16] ##### Converter platform support [#converter-platform-support] Starting with this release, partners can receive rewards for the exchange operations performed by their clients. Currency pairs data is taken from the Currency pairs section of the B2CORE Back Office. Rewards are paid in the base currency of the partner's account, regardless of the currency pair of the exchange operation. The Commission payment plan is available. Rewards for exchange operations on demo accounts aren't processed. ##### Customizing link languages [#customizing-link-languages] For links in **Promo** > **Landings**, language customization has been added. You can configure separate URLs for each language of the landing page on the **Languages** tab, which has been added to the **Link** editing page. #### Improvements [#improvements-11] * From now on, when clients and partners are deleted from the B2CORE Back Office, their details such as name, email and account number are still displayed in the rewards history. * The **Platforms** section has been optimized to display information about various trading platforms: unused fields have been hidden to reduce the amount of displayed data and make it more accessible. * Sorting by the **Registrations**, **Clicks**, **Click Conversion Rate** fields has been added to the sections **Promo** > **Banners** > **Banners** and **Promo** > **Landing** > **Links**. *** ### December 7, 2021 [#december-7-2021] #### New features [#new-features-17] ##### Concurrency integration [#concurrency-integration] The concurrency framework has been implemented along with parallel processing of commands for synchronizing data with trading platforms, calculating rewards, crediting money to accounts and canceling rewards. The performance is expected to increase on average by 500%. ##### Support for B2CORE multi-currency accounts [#support-for-b2core-multi-currency-accounts] A new version of the **Payment method** for IB has been developed, which is compatible with multi-currency accounts of the B2CORE. It's important that this feature doesn't imply multi-currency payments: rewards are still paid in the original account currency or base currency. #### Improvements [#improvements-12] * The **Landing page** selector has been removed from banners create/edit pages. *** ### October 26, 2021 [#october-26-2021] #### New features [#new-features-18] ##### Export feature [#export-feature] The **Export** button is added to the number of sections and tabs and allows to download available data. For most sections, unless stated otherwise, the data is downloaded in CSV format, and retains all filters and a structure of the original table. The **Export** button is only visible to users with granted **Export** permissions. Explore the new feature here: * **Banners** — Introducing brokers > Program > Introducing Brokers > Edit > Banners tab. * **Links export** — Introducing brokers > Program > Introducing Brokers > Edit > Links tab. * **Currencies** — Introducing Brokers > Payments > Currencies section. * **Account transactions** — Introducing brokers > Payments > Accounts > Edit > Transactions tab. * **Transaction rewards** — Introducing brokers > Payments > Accounts > Edit > Transactions > Edit > Rewards tab. * **Logs** — Introducing brokers > Logs section. * **Countries** — Introducing brokers > Preferences > Location > Countries section. * **Accounts** — Introducing Brokers > Payments > Accounts section. The data in the Accounts section is downloaded in CSV format, and retains all filters and a structure of the original table except for the Balance field, which doesn't get exported. *** ### October 12, 2021 [#october-12-2021] #### New features [#new-features-19] ##### Transactions export [#transactions-export] List of transactions in the **Introducing Brokers** > **Payments** > **Transactions** section can now be exported via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. The export feature for this and other sections and tabs is only available to users with Export permissions. ##### Symbols export [#symbols-export] List of symbols can now be exported in the **Introducing Brokers** > **Platforms** > **Symbols** and **Introducing brokers** > **Programs** > **Types** > **Symbols** tab sections via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. ##### Trades export [#trades-export] Trades data for a particular account or a client can now be exported via the **Export** button located on **Trades** tab in **Introducing Brokers** > **Platforms** > **Accounts** and **Introducing Brokers** > **Clients** sections. The data is downloaded in CSV format, and retains all filters and table structure of the original table. ##### Accounts export [#accounts-export] List of all accounts or accounts belonging to a specific client can now be exported via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. To explore the feature navigate to **Introducing brokers** > **Platforms** > **Accounts** or **Introducing brokers** > **Clients** > **Account** tab. ##### Clicks statistics export [#clicks-statistics-export] Clicks data on the **Introducing brokers** > **Program** > **Introducing brokers** > **Clicks** tab can now be exported via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. #### Improvements [#improvements-13] * Newly generated QR codes in the **Promo** section are now displayed in a smaller size. *** ### September 28, 2021 [#september-28-2021] #### New features [#new-features-20] ##### Clients and trading groups export [#clients-and-trading-groups-export] List of Introducing brokers clients and **Platform** > **Groups** can now be exported to a CSV file via the new **Export** button that replaced the **Excel** and **CSV** buttons. This feature is only available to users that have **Export** permissions. All entries in an exported data set are sorted in the same way they were in the original table. #### Improvements [#improvements-14] * Users can now see when a particular program's tier or level was created and updated. * Date-time in all sections is now displayed in a single format: `Mon. DD, YYYY HH:MM:SS`, for example: Jan. 21, 2021 11:28:06. Month abbreviations consist of the first three characters of the month name. Months with four-character names, such as June, aren't abbreviated. * Paxios currency new alias is updated in currency details. #### Resolved issues [#resolved-issues-3] * Fixed the Client ID filter error in Preferences > Security > Authorizations, Preferences > Security > Authentications. *** ### September 14, 2021 [#september-14-2021] #### New features [#new-features-21] ##### Tiers and levels settings export [#tiers-and-levels-settings-export] Tiers and levels settings of an IB Program can now be exported to a CSV file via the new **Export** button (that replaced the **Excel** and **CSV** buttons). This feature is only available to users that have Export permissions. All entries in an exported data set are sorted in the same way they were in the original table. To explore the new feature, navigate to **Introducing Brokers** > **Program** > **Types** > **details** > **Tiers** and **Levels** tab. ##### Clicks records export [#clicks-records-export] Clicks records export is now available to users with **Export** permissions via the new **Export** button. All entries in an exported data set are sorted in the same way they were in the original table. To explore the new feature, navigate to **Promo** > **Analytics** > **Clicks**. *** ### August 31, 2021 [#august-31-2021] #### New features [#new-features-22] ##### Export and import permissions for Introducing brokers [#export-and-import-permissions-for-introducing-brokers] New **Export permission** and **Import permission** groups have been added to the **System** > **Groups** > **Introducing brokers** section of the B2CORE Back Office. ##### Geolocation update button [#geolocation-update-button] It has become possible to update your database to the latest version by clicking the **Update** button on the **Database** tab in the **Preferences** > **Location** > **Geolocation** section. ##### QR code generation [#qr-code-generation] It has become possible to generate QR codes for a partner link. A new feature is available in the **Program** > **Introducing brokers** section on the **Links** tab of the partner’s detailed information. #### Improvements [#improvements-15] * Only the languages, that are enabled in the **System** > **Localization** section, are now being displayed if you click the localization button next to the **Name** and **Description** fields of the **Preferences tab** in the **Introducing brokers** > **Program** > **Types** section. * You can now filter trading groups by multiple parameters at the same time. To do that, type in a list of groups separating them with space, comma, or colon in the filter field. * Symbol settings import support is available for macOS and Windows. *** ### August 03, 2021 [#august-03-2021] #### Improvements [#improvements-16] * The list of trading instruments is now synchronized and displayed in the **Symbols** section of the B2CORE Back Office. *** ### July 20, 2021 [#july-20-2021] #### New features [#new-features-23] ##### New Description field [#new-description-field] A new **Description** field has been added to IB types. In this field you can specify more information about the partnership program. ##### QR codes colors and icons [#qr-codes-colors-and-icons] Color and icon configurations for QR codes generation are added to the B2CORE Back Office. ##### Link to Release notes [#link-to-release-notes] You can navigate to Release notes from the **Updates** section of the B2CORE Back Office. #### Improvements [#improvements-17] * IB types, partners and clients are combined in the **Program** section in the B2CORE Back Office to optimize the convenience of B2CORE IB use. * To create a new IB type, specify only its name, description, type of registration, approval, and currency for rewarding partners. * When registering in the type with disabled approval option, the partner redirects immediately to the IB Room with no need to refresh the page. * The size of the distributive is now 2 times smaller. It speeds up the installation and updating processes, minimizes the amount of space needed on the hard drive and optimizes the hosting costs. * The troubleshooting is faster and more accurate, and the problems can be solved in a few seconds due to the improved diagnostics of the geographical location service. *** ### July 6, 2021 [#july-6-2021] #### Improvements [#improvements-18] * On the **Payment plans** tab of a symbol, you can now configure how much the broker pays for trades with this symbol for all IB types or edit these values in one place. This is especially useful when new symbols appear on trading platforms: on the list of symbols, sort and filter by date to select recently added symbols, then set up payment plans for all types at once on one page. * In the details of a partner, the number of levels for which the broker pays this partner is now explicitly displayed. When changing the IB type, the number of levels automatically changes according to the IB type settings. To set up individual conditions for a partner, the broker can select Custom Levels and specify the number of Master Levels for which the partner receives a reward. * The **encrypted links** configuration is moved from IB type settings to **Links** to make the setup more convenient. To enable or disable encryption for a link, open the edit link and set the value to Enabled or Disabled. * It's now possible to see not only levels for which the broker pays partners, but also those for which the broker doesn't pay. Partners still can see only paid levels which are configured in the IB type or individually for a partner. The Show hidden levels option can be enabled in the IB type, it's disabled by default. #### Resolved issues [#resolved-issues-4] * Fixed an issue with filtering by 0. You can now filter entries by any value including 0, for example, find crypto currency 0x. * In the partners app, fixed a filter that incorrectly displayed the list of rewards for the specified time period — not including the end date. For the end date, the time was set to 00:00, which caused incorrect selection and made it impossible to view the rewards of one day. The end date is now set to 23:59. *** ### June 22, 2021 [#june-22-2021] #### Improvements [#improvements-19] * Added currencies signs. * Special characters are now allowed in the Alias field for currency. * For payment plan, number of digits after the decimal separator now matches the currency settings (minor unit value). All non-significant zeros after the decimal separator are hidden for readability. * A new type of client request has been added to quickly filter requests related to Introducing brokers in the B2CORE Back Office. #### Resolved issues [#resolved-issues-5] * Fixed sorting and filters by country, latitude, longitude and position lifetime. *** ### June 8, 2021 [#june-8-2021] #### Improvements [#improvements-20] * Base and quote currencies were added to symbol details, trades details, and reward details. * Reward states naming was improved. The following states are now available: * **Done** — the reward was successfully credited to the partner’s account * **Pending** — the reward was calculated, but not yet credited to the partner’s account * **Canceled** — the reward was canceled and debited from the partner’s account * In the **trade details**, fields naming and order were reworked and improved. The data is now split into two tabs — **Trade data** and **Rewards**. * In the **reward details**, fields naming and order were reworked and improved. The data is now split into two blocks — **reward data** and **trade data**. * In the **symbol details**, fields naming and order were reworked and improved. The data is now split into two tabs — **Symbol** and **Payment plan**. * All top-ranked cryptocurrencies with a market capitalization of over $1B added to the default configuration to make the setup process easier. *** ### May 26, 2021 [#may-26-2021] #### New features [#new-features-24] ##### Min position lifetime [#min-position-lifetime] New parameter was added to MT4 and MT5 platforms in Introducing brokers. If a position was closed earlier than the min position lifetime, it's not taken into account in rewards calculating. ##### Symbols import [#symbols-import] It's now possible to import symbol settings, as a CSV file, in IB types. The **Import** button is available on the **Symbols** tab of the **IB type details** in the B2CORE Back Office. You can now export settings, change the formula, and then import the settings file in the same or in a different IB type. #### Improvements [#improvements-21] * Tier name was added. * Added MaxMind geolocation service diagnostics. * Added PostgreSQL reporting support for MT5. #### Resolved issues [#resolved-issues-6] * Fixed displayed number of digits after decimal separator for JYP. *** ### April 27, 2021 [#april-27-2021] #### New features [#new-features-25] ##### Reports [#reports] The Reports section has been added. At the moment, Acquisition report and Payment report are available with date range filters, grouping by hour, day, week, month, year. IB also provides performance indicators with actual value, absolute, and relative change compared to the previous period, as well as traffic analytics: group by country, geographic region, traffic source. ##### Symbols export [#symbols-export-1] It's now possible to export symbol settings to a CSV file. The Export button is available on the Symbols tab of IB type details. ##### New rates provider integrated [#new-rates-provider-integrated] A new rates provider has been integrated — **Open Exchange Rates**. #### Improvements [#improvements-22] * Reworked and optimized the naming of entities related to Symbols. * Another update in rates providers: B2BINPAY Rate Provider was removed. * Open positions on MetaTrader 4 added to trading session syncing. * Position ID added to trading session syncing. * Payment Level UX improved. * Added Diagnostic failure details. *** ### March 16, 2021 [#march-16-2021] #### New features [#new-features-26] ##### Lot size [#lot-size] A new **Lot size** field has been added for cent groups in the **Platforms** > **Groups** section. ##### Geolocation service [#geolocation-service] A new IP intelligence and online fraud prevention tool - **MaxMind** has been added to **Preferences** > **Location** > **Geolocation**. ##### Location data [#location-data] New fields: **Latitude**, **Longitude** and **Country** have been added to clicks statistics data in **Promo** > **Analytics**. ##### Country of residence [#country-of-residence] A new **Country of residence** field has been added to IB’s and client’s **Personal data** tabs. ##### Countries [#countries] A new **Countries** section has been added to **Preferences** > **Location**, displaying a list of countries divided into the following fields: Name, Alpha-2 code, Alpha-3 code and Numeric code, which conforms to the [ISO-3166 standard](https://www.iso.org/iso-3166-country-codes.html). ##### Geographic regions [#geographic-regions] A list of Geographic regions in M49 Standard Country or Area Codes for Statistical Use (United Nations GeoScheme) has been added. ##### Geospatial queries support [#geospatial-queries-support] Added Geospatial Queries support within GeoJSON objects: points and polygons. ##### Clicks and registrations stats [#clicks-and-registrations-stats] Statistics on banner clicks and the following registrations are added to **Promo** > **Analytics**. *** ### March 2, 2021 [#march-2-2021] #### New features [#new-features-27] ##### User-Agent info for link clicks [#user-agent-info-for-link-clicks] To **Promo** > **Analytics** > **Clicks**, a new field **User-Agent** has been added to display information about the software, such as browser and operating system, used by people who clicked on partners’ affiliate links. ##### Extended settings for Master levels [#extended-settings-for-master-levels] A new setting is added to Master partners that allows to override the number of Levels a Master partner is paid for. ##### HTTP version preference [#http-version-preference] Added HTTP Protocol Version (1.0, 1.1, 2.0) preference to deal with Expect: 100-continue header. *** ### February 16, 2021 [#february-16-2021] #### New features [#new-features-28] ##### Rewards data export [#rewards-data-export] Brokers can now export information about all rewards paid within a particular IB type or to a particular partner via the new **Export** button added to **Program** > **Introducing Brokers** / **Type** > **Edit** > **Rewards** tab. ##### Master partner settings [#master-partner-settings] A new feature that allows brokers to individually set the Number of Levels and Master Level Ratio for Master partners has been added to the Personal data tab of an IB. ##### Trading session sync by trading account number [#trading-session-sync-by-trading-account-number] A new **Trading account number** option has been added and allows a broker to synchronize the trading session for the selected trading account from the admin panel. ##### Banners [#banners] New **Banners**, **Themes**, **Languages** and **Sizes** subsections have been added to the Promo > Banners section, allowing the broker to create and manage the banners in an easier and more efficient way. ##### Prevented attacks log [#prevented-attacks-log] A new **Security** > **Attacks** section has been added that displays all prevented brute-force attacks. ##### System incidents log [#system-incidents-log] A new **Security** > **Incidents** section has been added that displays information about all security incidents registered in the systems such as: invalid client ID, invalid client secret or invalid access token. ##### Blacklist and Whitelist settings for an API access [#blacklist-and-whitelist-settings-for-an-api-access] New **Blacklist** and **Whitelist** sections have been added and allow admin users to manage which IPs get access to APIs. *** ### February 2, 2021 [#february-2-2021] #### New features [#new-features-29] ##### IB type change [#ib-type-change] A new option has been added that allows brokers to change partner’s type. ##### Rewards cancellation [#rewards-cancellation] A new option has been added that allows brokers to cancel trade rewards. ##### Tier rolling period [#tier-rolling-period] A new **Tier period** field has been added to the **Program** > **Types** > **Edit** > **Preferences** tab, allowing the broker to customize the duration of each tier in rolling days. ##### Trading groups archiving [#trading-groups-archiving] Brokers can now archive trading groups, accounts, and symbols that were removed from trading platforms. ##### Rewards per transaction [#rewards-per-transaction] A new **Rewards** tab, that contains a list of all rewards for a specific transaction, has been added to transaction details in **Payments** > **Transactions**. #### Improvements [#improvements-23] * The process of setting up landing links for partners is simplified. ### December 22, 2020 [#december-22-2020] #### New features [#new-features-30] ##### Encrypted tokens [#encrypted-tokens] Encrypted tokens option has been added to **Promo** > **Landings** > **Links**. ##### Tier calculation [#tier-calculation] Tiers can now be calculated by the number of active clients referred by a partner. ##### Position settings in payment plan [#position-settings-in-payment-plan] A new **Position** field has been added to the **Platforms** > **Symbols** > **Edit** > **Payment plan** tab and indicates whether the payments are made for a closed or an open position, or for both. ##### Bulk update of trading groups [#bulk-update-of-trading-groups] An option to bulk update the settings of the trading groups has been added. ##### 145 new filters [#145-new-filters] Data filtering across the entire **Introducing Brokers** section has been made even better with around 145 of new filters. *** ### December 8, 2020 [#december-8-2020] #### New features [#new-features-31] ##### Program rewards statistic [#program-rewards-statistic] Report on all rewards payable in a particular program type has been added to **Program** > **Types** > **Edit** > **Reports** tab. ##### Partner’s rewards statistic [#partners-rewards-statistic] Report on all rewards payable to a particular partner has been added to **Introducing brokers** > **Edit** > **Reports** tab. ##### Export of partners and clients data [#export-of-partners-and-clients-data] Data in the **Introducing brokers** > **Program** > **Introducing brokers** and **Introducing brokers** > **Program** > **Clients** sections can now be exported via the newly added export function in CSV or Excel formats. *** ### November 24, 2020 [#november-24-2020] #### New features [#new-features-32] ##### Payments and trades data export [#payments-and-trades-data-export] Data in the **Trades** and **Payments** sections can now be exported in CSV or Excel formats. ##### Restricted registration [#restricted-registration] A new **Restricted registration** type has been added to **Program** > **Types** > **Edit** > **Preferences** and allows a selective acquisition of new partners for a particular partnership program. *** ### November 17, 2020 [#november-17-2020] #### New features [#new-features-33] ##### New payment systems [#new-payment-systems] Three new rate providers have been integrated: **B2BINPAY**, **CoinMarketCap** and **European Central Bank**. ##### Custom rate provider [#custom-rate-provider] With the new **Custom rate provider** feature, brokers can now create their own crypto currency exchange rates. ##### Support for multi-language links [#support-for-multi-language-links] Multi-language links support has been added to the B2CORE URI. ##### System logs [#system-logs] The **Logs** section has been added and provides detailed information about all system events. ##### Network diagnostics [#network-diagnostics] Network diagnostic is added and allows to individually or in bulk test the connection of drivers in **Platforms**, **Rates** and **Geolocation** sections. ##### Unix socket support [#unix-socket-support] **Unix socket** support has been added to the **Payment method** connection settings. ##### AWS deployment support [#aws-deployment-support] Support for deployment on AWS has been added. *** ### September 22, 2020 [#september-22-2020] #### New features [#new-features-34] ##### Client details [#client-details] Brokers can now view full client details in the **Partner** > **Referral** section of the B2CORE UI. ##### Reward details [#reward-details] Brokers can now view full partner rewards details in the **Partner** > **Rewards** section of the B2CORE UI. #### Improvements [#improvements-24] * A majorly improved **Introducing brokers** section of the B2CORE Back Office that now displays all data available in the partnership program. * The **Client chain** field has been added to the client’s **Personal data** tab and indicates which partner referred a particular client to the broker. The chain data is presented in the following format: Partner's name → Client's name. Understand the basics and learn everything you need to start using the B2TRADER API Understand the basics and learn everything you need to start using the B2TRADER API Consult an in-depth reference describing REST API requests and responses Consult an in-depth reference describing REST API requests and responses Explore the supported WebSocket API methods and streams Explore the supported WebSocket API methods and streams Connect to the FIX 4.4 API for market data streaming and order execution Connect to the FIX 4.4 API for market data streaming and order execution ## June 2, 2026 [#june-2-2026] ### Improvements [#improvements] #### Trading API: Stop orders for closed markets [#trading-api-stop-orders-for-closed-markets] The **Trading API** now accepts **Stop** orders for markets that are closed according to their trading calendar. The order is stored and activates automatically when the market reopens, instead of being rejected at submission. #### Reports API: full account history [#reports-api-full-account-history] Trading reports can now be generated for the entire account history. The previous **92-day** limit has been removed, and an **All data** range is now available for report generation. #### Trading API: market asset identifiers [#trading-api-market-asset-identifiers] The `baseAssetId` and `quoteAssetId` fields have been added to the v6 `/markets` responses, allowing clients to resolve the base and quote assets of each market without additional lookups. #### Accurate unrealized PnL [#accurate-unrealized-pnl] Unrealized PnL returned by the API is now calculated using the correct order book side for each position direction, improving the accuracy of PnL values in position and margin responses. *** ### Resolved issues [#resolved-issues] * Resolved an issue where `WebhookAlert` order reason and position modifier values were returned as numeric codes instead of API enum strings in History API `/v2/orders` responses. ## April 9, 2026 [#april-9-2026] ### New features [#new-features] #### Trading credit in API responses [#trading-credit-in-api-responses] Broker-issued **trading credit** is now exposed through the API. The account margin data response and the real-time margin stream include the current credit amount in the Reference Asset (`creditInRAT`). Credit is included in the account equity and excluded from the withdrawable amount. *** ### Improvements [#improvements-1] #### Webhook Trading API: webhook URL in key listing [#webhook-trading-api-webhook-url-in-key-listing] The list webhook API keys response now includes the `webhookUrl` field, so the configured webhook endpoint can be retrieved for each key. ## March 16, 2026 [#march-16-2026] ### New features [#new-features-1] #### Webhook Trading API [#webhook-trading-api] A new **Webhook Trading API** has been added, enabling automated order creation via webhook alerts with API key authentication. **Key points:** * Create and manage webhook API keys for secure authentication * Receive trading alerts and create orders automatically * Idempotency supported via deduplication ID * Market type routing by symbol prefix (spot, CFD, perpetual) #### Public Account ID [#public-account-id] A new `publicAccountId` field has been added across all API endpoints, providing a human-readable account identifier as an alternative to internal UUIDs. **Affected APIs:** * Trading API — account-related responses and filters * Settings API — account configuration endpoints * History API — all REST endpoints and WebSocket streams * Reports API — report responses and filters #### Long-term trading data history [#long-term-trading-data-history] Date range restrictions have been removed from **Order History** and **Closed Positions** endpoints, allowing access to full trading history without time-based limitations. *** ### Improvements [#improvements-2] #### Transfer subtype field [#transfer-subtype-field] A new `subtype` field has been added to transfer responses in the History API to distinguish **Negative Balance Protection** transfers from manual ones. #### Rounded position prices [#rounded-position-prices] The `positionPriceInRAT` values are now properly rounded in closed position API responses according to the Reference Asset (RAT) scale. *** ### Resolved issues [#resolved-issues-1] * Resolved an issue where `/total-swaps` requests returned HTTP 504 timeout errors. ## March 11, 2026 [#march-11-2026] ### Added FIX API documentation [#added-fix-api-documentation] Added new FIX API section covering Market Data and Trading sessions via the FIX 4.4 protocol. ## March 11, 2026 [#march-11-2026-1] ### Initial version [#initial-version] ## March 2, 2026 [#march-2-2026] ### New features [#new-features-2] #### Trading Terminal AI assistant [#trading-terminal-ai-assistant] A new **AI assistant** has been added to the Trading Terminal, providing traders with an intelligent widget for market analysis and trading support. *** ### Improvements [#improvements-3] #### Public Account ID (preview) [#public-account-id-preview] The `publicAccountId` field has been added to account-related API responses as a preview, ahead of the full rollout across all endpoints. ## February 25, 2026 [#february-25-2026] ### New features [#new-features-3] #### Funding Rates API [#funding-rates-api] New API endpoints have been added for retrieving funding rate data synchronized from **B2CONNECT**, including funding rates, mark price, and funding interval for Perpetual Futures markets. **Key points:** * Funding rate values streamed in real time * Mark price used for position valuation when available from LP * Funding interval synchronized per market configuration * FIX API contract extended with funding data fields #### OHLC Candlestick API [#ohlc-candlestick-api] A new API endpoint has been added for retrieving OHLC (candlestick) data, supporting both **Spot** and **Perpetual Futures** markets. Minute-level candle data is now stored for up to 5 years. OHLC candle data streaming is also available via the WebSocket API using gRPC transport, providing real-time candlestick updates. #### Favorite markets [#favorite-markets] A new **Favorite markets** feature has been added, allowing traders to manage personalized market lists via the Trading API. #### Comment field for orders and positions [#comment-field-for-orders-and-positions] A new `comment` field has been added to order and position responses across REST, WebSocket, and History APIs. The comment can be set when placing an order and is propagated to the associated position and execution records. #### B2COPY Integration API [#b2copy-integration-api] New API endpoints have been added for **B2COPY** and IB (Introducing Broker) integrations, including special account types for copy trading. The `isCopyTradingAccount` field has been added to the `/api/v1/total-fundings` endpoint. *** ### Improvements [#improvements-4] #### FIX API: enhanced request throughput [#fix-api-enhanced-request-throughput] The FIX API trading request processing has been optimized to support up to 100 requests per second per connection. All `TimeInForce` types are now supported, including **GTD** (Good Till Date). #### Multilingual support [#multilingual-support] Trading API, Settings API, and Reports API endpoints now support multilingual content with full Unicode character support, enabling localized responses for configurable fields, report names, and templates. #### Stop Market order calculation [#stop-market-order-calculation] The **Value** and **Amount** calculation for **Stop Market** orders has been corrected for **Spot** markets. **Slippage Rate** has been removed from **CFD** and **Perpetual Futures** order calculations. #### Trading API: empty categories hidden [#trading-api-empty-categories-hidden] Empty market categories are now automatically excluded from Trading API responses, reducing unnecessary data in category listings. #### Balance API: zero balance for all assets [#balance-api-zero-balance-for-all-assets] Assets without prior balance operations now return a zero balance in API responses instead of being omitted. #### Cross-rate market configuration [#cross-rate-market-configuration] Markets used exclusively for cross-rate calculations can now be disabled for trading while remaining active for rate conversion. #### History API: extended contracts [#history-api-extended-contracts] Positions and Events API responses have been extended with additional fields. The `updatedAt` field is now available as a sorting and filtering parameter in History Server API endpoints. #### Settings API: market update endpoint [#settings-api-market-update-endpoint] The market update endpoint has been changed from `PATCH` to `PUT` semantics, requiring the full market object in the request body. #### Settings API: legacy endpoints removed [#settings-api-legacy-endpoints-removed] Legacy commission and routing rule endpoints have been removed following the tier commission update. Use the current endpoints as documented in the API reference. *** ### Resolved issues [#resolved-issues-2] * Resolved an issue where `takeProfitPrice` and `stopLossPrice` values were missing from the History Server `/v2/orders` endpoint responses. * Resolved an issue where bulk order cancellation returned a successful result for non-existing orders. * Resolved an issue where bulk order cancellation returned a successful result for orders that could not be cancelled. * Resolved incorrect error codes returned when `closePositionLotAmount` was set to `0`, a negative value, or an empty string. * Resolved an issue where the WebSocket Book stream continued sending prices with an outdated tick size after market parameter changes. * Resolved an issue where negative spreads in the **Market Data API** were not handled correctly. * Resolved an issue where orders could not be created when using the default 24/7 calendar. * Resolved an issue where the `/external-orders` API returned `null` for `rejectReason` although the Trading Server received a reason from the LP. Customize your Trading Terminal and configure settings Customize your Trading Terminal and configure settings Explore and manage all available trading widgets Explore and manage all available trading widgets Learn basic terms and values used across the platform Learn basic terms and values used across the platform 快速了解 B2TRANSLATE,并熟悉基础知识和关键术语 快速了解 B2TRANSLATE,并熟悉基础知识和关键术语 探索 B2TRANSLATE 界面,并开始管理您的产品翻译 探索 B2TRANSLATE 界面,并开始管理您的产品翻译 ## 2026 年 7 月 9 日 [#july-9-2026] ### 新功能 [#new-features] #### 通知 [#notifications] **B2TRANSLATE** 现已包含通知中心。侧边栏底部的铃铛会显示未读通知数量徽章,点击后可打开面板查看最新通知,例如已完成的 AI 翻译、已准备好的导出内容或已完成的导入。打开 **所有通知** 可查看完整历史记录,也可以单独或一次性将所有通知标记为已读。 通知还可以推送到应用外部,例如 **电子邮件**、**Slack** 或 **Telegram**。工作区管理员可以设置这些渠道,并选择每类事件的接收人。 *** #### 账户设置页面 [#account-settings-page] 侧边栏中新增的 **账户** 项会打开专门的 **设置** 页面,将您的个人选项集中在一处,其中包含 **个人 API 令牌** 和 **更改密码** 标签页。 *** ### 改进 [#improvements] #### 更改自己的密码 [#change-your-own-password] 现在,您可以通过 **账户** > **更改密码** 自行更改登录密码,无需联系管理员。 *** #### 重新设计的导航 [#redesigned-navigation] 界面语言、通知和退出登录控件已移至侧边栏底部,以便更快访问。**个人 API 令牌** 现在通过新的 **账户** > **设置** 页面进行管理,取代了原来的个人资料菜单。 *** ### 已解决的问题 [#resolved-issues] 此版本未报告任何面向客户的问题。 ## 2026 年 6 月 29 日 [#june-29-2026] ### 改进 [#improvements-1] #### 现代化界面 [#modernized-interface] **B2TRANSLATE** 界面已基于现代技术栈重新构建。您使用的一切都保留在原来的位置——此次更新刷新了界面基础,并为更快交付新功能铺平道路。 ## 2026 年 5 月 14 日 [#may-14-2026] ### 改进 [#improvements-2] #### Customer 角色的租户语言管理 [#tenant-language-management-for-the-customer-role] 拥有 **Customer** 角色的用户现在可以直接在 **编辑项目** 模态框中管理其租户的语言列表——无需请求管理员协助即可添加或删除语言。 为防止意外更改,**Customer** 用户的租户名称字段现在为只读。 ## 2026 年 4 月 29 日 [#april-29-2026] ### 新功能 [#new-features-1] #### 翻译版本历史记录 [#translation-version-history] 每个翻译键现在都会保留每种语言最近 10 个目标值的审计记录。在翻译视图中,打开历史记录对话框即可查看是谁在何时更改了翻译以及之前的值,并可一键恢复任意早期版本。这可防止翻译因意外编辑和 AI 覆盖而受到影响。 *** ### 改进 [#improvements-3] #### 个人 API 令牌——自定义过期时间 [#personal-api-tokens--custom-expiration] 创建或轮换 **个人 API 令牌** 时,现在可以通过日历选择器精确选择过期日期,最长可设置为一年后。这取代了此前的固定预设选项,并符合要求定期轮换凭据的企业安全策略。 *** #### 新增语言:希伯来语和蒙古语 [#new-languages-hebrew-and-mongolian] **希伯来语** 现已支持完整的从右到左(RTL)显示,**蒙古语** 也已添加并采用正确的复数形式。两种语言均立即可用于每个项目,并可进行 AI 翻译。 ## 2026 年 3 月 31 日 [#march-31-2026] ### 新功能 [#new-features-2] #### 个人 API 令牌 [#personal-api-tokens] **B2TRANSLATE** 现已支持 **个人 API 令牌**——一种用于以编程方式访问 API 的新身份验证方法。用户可以生成长期有效的令牌,将 **B2TRANSLATE** 与外部工具和自动化工作流集成,而无需共享其登录凭据。 * 可在 **个人资料** 页面生成和管理个人令牌 * 令牌支持所有 V2 API 端点 * 可配置的令牌过期时间:1、6、12 或 24 小时 * 可随时撤销令牌以保障安全 ## 2026 年 3 月 17 日 [#march-17-2026] ### 新功能 [#new-features-3] #### 自定义语言排序 [#custom-language-ordering] 现在,您可以自定义项目中语言的显示顺序。可从 **项目** 页面上的 **三点菜单** 或项目内部打开 **语言顺序** 模态框,然后通过拖放将语言排列为您偏好的顺序。自定义顺序将应用于整个项目中的语言下拉菜单和列表。 若要恢复默认的字母排序,请在模态框中点击 **重置为默认值**。 ## 2026 年 2 月 10 日 [#february-10-2026] ### 新功能 [#new-features-4] #### 紧凑模式 [#compact-mode] **个人资料菜单** 中新增了 **紧凑模式** 开关,可让您减少所有 UI 组件的间距和密度。此选项为希望一次在屏幕上查看更多内容的用户提供了更紧凑的界面。 *** ### 改进 [#improvements-4] #### BCP 47 语言支持 [#bcp-47-language-support] B2TRANSLATE 现已支持语言代码的 **BCP 47 标准**,可提供更精确的语言识别和区域变体处理。系统在翻译端点中保持与旧格式代码的向后兼容性,确保现有集成可继续无缝运行。语言表中的每种语言现在均包含描述性标签,以提高可读性。 #### 统一搜索和筛选器 [#unified-search-and-filters] 所有系统页面中的搜索输入字段和筛选控件现已标准化,在整个平台中提供一致的用户体验。无论您在哪个页面工作,这种统一方式都能让您更轻松地查找和筛选内容。 *** ### 已解决的问题 [#resolved-issues-1] 此版本未报告任何面向客户的问题。 ## 2026 年 1 月 13 日 [#january-13-2026] ### 改进 [#improvements-5] #### AI 模型升级 [#ai-model-upgrade] B2TRANSLATE 已将其 AI 翻译引擎从 Chat GPT 4.0 升级到 **Chat GPT 5.2**,在所有支持的语言中提供了更好的翻译质量和更高的性能。 #### 通过键盘快捷键增强搜索 [#enhanced-search-with-keyboard-shortcuts] 通过新增用于快速访问搜索功能的键盘快捷键,导航得到了简化。用户现在可以按 **⌘/**(**Ctrl+/**)和 **⌘K**(**Ctrl+K**)立即打开搜索功能,从而更快地查找键并浏览项目。 *** ### 已解决的问题 [#resolved-issues-2] 此版本未报告任何面向客户的问题。 ## 2025 年 12 月 12 日 [#december-12-2025] ### 改进 [#improvements-6] #### 重新设计的翻译页面 [#redesigned-translations-page] **翻译** 页面已重新组织,以提供更清晰的视图和更流畅的编辑体验: * 键标识符现在占据单独的行,并包含类别徽章和最后更新时间戳。 * 翻译列拥有更清晰的标签,每列均显示语言徽章,因此您始终知道正在编辑哪种语言。 * 使用 AI 翻译、重置为源翻译和保存为空等操作归类在直观的图标下,便于发现和使用。 * 全局控件——语言选择器、搜索字段、筛选面板、键导入和 CSV 上传——位置保持一致且更易查找。 *** ### 已解决的问题 [#resolved-issues-3] 此版本未报告任何面向客户的问题。 ## 2025 年 9 月 30 日 [#september-30-2025] ### 改进 [#improvements-7] 此版本在**多种语言中引入了全面的默认翻译**,并通过 ChatGPT 集成为管理员提供了**自动化批量翻译功能**,从而简化本地化工作流并加速全球部署。 ## 2025 年 9 月 10 日 [#september-10-2025] ### 新功能 [#new-features-5] #### 复数形式支持 [#pluralization-support] B2TRANSLATE 现已包含全面的复数形式支持,可在所有语言中准确翻译**依赖数量的字符串**。该功能满足了处理会随数量变化的字符串这一关键需求,例如“1 个文件”与“3 个文件”,这对于具有**复杂复数规则**的语言尤为重要。 系统会根据键格式和目标语言的组合智能检测是否需要使用复数形式。当需要使用复数形式时,B2TRANSLATE 会根据 Unicode 复数形式规则,为每个键自动生成多个输入字段。每种形式均包含说明正确用法的上下文标签,例如“一个”“少数”或“许多”,帮助译者了解应在何时应用每种形式。此功能与 AI 翻译完全兼容。 有关详细信息,请参阅[处理复数形式](user-guide/manage-translations/handle-plural-forms)。 所有现有的非复数字符串均可继续完全正常运行,确保与当前项目和工作流完全向后兼容。 *** ### 改进 [#improvements-8] #### 更清晰的翻译层级 [#clearer-hierarchy-of-translations] 默认翻译和自定义翻译的管理变得更加直观。**挂锁图标** 已被移除,其功能已由更具声明性的选项取代:**重置为默认值** 和 **保存为空**。**翻译** 字段中的工具提示会显示 WebUI 当前使用的是哪一项默认翻译。 #### 增强的键显示和项目导航 [#enhanced-key-display-and-project-navigation] 项目界面经过重新设计,可为翻译键提供更好的可见性和更灵活的组织方式。此前,**类别** 为必填项,并可能导致部分键被隐藏。现在,系统默认显示所有项目键的完整列表,使译者能够立即访问其全部翻译范围。 **类别** 已重新定位为可选的**筛选**工具,同时仍保留其自动分配功能。译者现在可以处理任何键,无论其是否被分配到类别。此改进对于保持翻译一致性尤其有利,因为相似的键现在会一同显示在统一列表中,而不是可能被隐藏在不同的类别部分。当需要时,仍可应用类别筛选器来缩小键列表范围,以便集中处理。 此外,**翻译页面** 已重新组织,以实现更清晰的结构和显示: * 默认翻译已归入单一列中。 * 已添加语言图标。 * 有关键何时添加或更新的信息已移至键详情中。 *** ### 已解决的问题 [#resolved-issues-4] 此版本未报告任何面向客户的问题。 ## 2025 年 8 月 4 日 [#august-4-2025] ### 改进 [#improvements-9] 此版本专注于为平台管理员带来益处的幕后改进。此次虽然没有为您带来新功能,但这些更新有助于确保一切顺畅运行。 ## 2025 年 6 月 27 日 [#june-27-2025] ### 新功能 [#new-features-6] #### 平台 [#platforms] 此版本引入了新的 **平台** 实体。平台是产品中的独立分区,例如 Web、iOS、Android。每个平台都有自己的一组类别,而同一产品内的所有平台共享同一组语言。目前,此功能仅为 `b2core` 产品类型启用。 平台由管理员添加和配置。如果一个项目只有一个平台,用户体验将保持不变。但是,如果添加了多个平台,**类别** 页面上会显示相应的标签页,用户必须先选择一个平台才能提供翻译。 *** ### 改进 [#improvements-10] * 内部改进:新增了一个端点,用于更新 **翻译** 页面语言选择模态框中的语言列表。 *** ### 已解决的问题 [#resolved-issues-5] * 修复了类别中键搜索的问题。 ## 2025 年 5 月 20 日 [#may-20-2025] ### 新功能 [#new-features-7] #### 翻译下载/上传功能 [#translation-downloadupload-functionality] 通过此版本,我们实现了翻译下载/上传功能。现在,您可以将特定语言的选定翻译以 CSV 格式导出,以便进行外部编辑。编辑后,您可以将 CSV 上传回 B2TRANSLATE,从而实现更快捷、更轻松的翻译批量更新和管理。此外,系统还会提供消息,指示导出/导入尝试成功或失败。 有关详情,请参阅[这篇文章](user-guide/manage-translations/download-and-upload-translations)。 #### 键复制按钮 [#copy-buttons-for-keys] 为了进一步改善用户交互,我们在翻译页面的每个键名称旁添加了复制按钮。此更新让您能够轻松将完整键名称复制到剪贴板。复制按钮会附带视觉确认提示,以表示复制操作成功。此功能兼容包括 Chrome、Safari 和 Firefox 在内的主流 Web 浏览器,确保提供一致的用户体验。 #### 阿拉伯语、波斯语和乌尔都语的 RTL/LTR 光标 [#rtlltr-cursor-for-arabic-farsi-and-urdu-languages] 编辑器现已支持从右到左(RTL)和从左到右(LTR)语言,从而增强了翻译处理能力。文本方向现在会根据所选语言自动调整,优化文本显示且不会产生失真。所有方向下的光标移动和文本选择均流畅顺滑,这些改进已无缝集成,不会影响既有编辑器功能。此更新可确保所有支持语言均具有可靠的文本管理能力,为您提供直观的翻译体验。 *** ### 已解决的问题 [#resolved-issues-6] * 修复了 Firefox 浏览器中图标显示不正确的问题。 ## 2025 年 3 月 26 日 [#march-26-2025] ### 新功能 [#new-features-8] #### 使用 ChatGPT 进行 AI 翻译 [#ai-translations-with-chatgpt] 通过此版本,我们升级了与 ChatGPT 的集成,以便为用户启用 AI 翻译。请注意,此功能默认未启用,必须针对每个项目明确申请。使用 AI 进行翻译存在限制:对于每个使用 ChatGPT 集成的项目,都会提供每月额度,AI 翻译费用会自动从该分配余额中扣除。 除默认语言(通常为英语)外,所有项目语言均可使用 AI 翻译。此功能会将**默认翻译(EN)**翻译为您选择的语言,并将其添加到**翻译**字段中。有关详细信息,请参阅[使用 AI 翻译](user-guide/manage-translations/translate-with-ai)。 #### 新增 Customer 角色 [#new-customer-role] 新增了 **Customer** 用户角色。它类似于原先的 **Editor** 角色,但通过提供对 AI 驱动翻译的访问权限扩展了功能。 无论各自项目中是否启用了 AI 翻译功能,当前分配为 **Editor** 角色的所有用户都将无缝迁移至 **Customer** 角色。 *** ### 改进 [#improvements-11] * 为提升用户体验和导航效率,所有下拉菜单中均新增了**搜索字段**。这使用户能够快速在较长列表中找到特定项目,从而简化整体交互。 * 顶栏中新增了**用户头像**图标。将鼠标悬停其上,即可查看您的电子邮件和角色信息以及**退出登录**按钮。语言选择已从顶栏移除,但仍可在主菜单中使用。 *** ### 已解决的问题 [#resolved-issues-7] 此版本未报告任何面向客户的问题。 ## 2025 年 2 月 11 日 [#february-11-2025] ### 新功能 [#new-features-9] #### 增强安全性 [#enhanced-security] 通过此版本,双因素身份验证(2FA)已更新为要求使用身份验证器应用程序,其中 **Google Authenticator** 为主要选项,而 **Twilio Authy** 则为 Google Authenticator 在某些地区可能无法使用时的替代选项。 登录 B2TRANSLATE 时,您现在会收到提示,要求按照屏幕上的说明设置身份验证器应用程序以生成 2FA 验证码。出于安全原因,在提供凭据后,您每次登录时都需要输入应用程序中的验证码。 *** ### 已解决的问题 [#resolved-issues-8] 此版本未报告任何面向客户的问题。 *** ## 过往版本 [#past-releases] ### 2024 年 12 月 🎄 [#december-2024-] #### 新功能 [#new-features-10] ##### UI 增强 [#ui-enhancements] 最新版本为用户界面带来了多项增强,提供更直观、更流畅的体验。 * 在 **项目** 页面中,项目类型现已组织到标签页中,提供更紧凑、更结构化的视图。 * 主菜单现可折叠,使用更加方便。 * **翻译** 页面进行了以下更新: * 为便于编辑翻译,输入字段现支持自动完成和语法高亮。 * **发送翻译** 菜单已移至表格上方,以便快速访问。 * **筛选器** 按钮变得更加醒目。 * 分页始终位于页面底部。 * 在 **登录** 页面中,密码现在默认隐藏。此外,还为遇到登录问题的用户添加了支持链接。 #### 改进 [#improvements-12] * 通过重构某些端点进行了后端增强,迈出了提升性能和速度的第一步。 * 已实施设计系统组件,旨在提升代码可重用性、可维护性和可扩展性。 * 引入了用于收集指标的新服务,以支持更好的监控和分析。 #### 已解决的问题 [#resolved-issues-9] 此版本未报告任何面向客户的问题。 *** ### 2024 年 10 月 [#october-2024] #### 新功能 [#new-features-11] ##### WebUI 已翻译为 20 种语言 [#webui-translated-into-20-languages] 我们很高兴地宣布,B2TRANSLATE WebUI 现已提供 20 种语言版本。除英语外,您现在还可以使用法语、德语、意大利语、波兰语、葡萄牙语、俄语、西班牙语、乌克兰语、土耳其语、阿拉伯语、印尼语、印地语、乌尔都语、波斯语、日语、韩语、越南语和中文(繁体及简体)使用 B2TRANSLATE。此更新改善了全球社区的用户体验。我们已在主菜单中添加语言选择选项,使其易于使用且更加直观。 #### 改进 [#improvements-13] Yandex.Metrika 和 Webvisor 已集成至 B2TRANSLATE,以便我们更深入地分析数据并更好地识别可用性问题。 ### 2024 年 9 月(第 2 部分) [#september-2024-part-2] #### 新功能 [#new-features-12] ##### 集成 AI 以增强翻译 [#ai-integrated-for-enhanced-translation] 通过此版本,**DeepL** 和 **ChatGPT** 已作为翻译服务集成。 主要更新包括: * **AI 工作流**:为整个项目或单个语言分配特定的 AI 工作流。 * **译者权限**:为 AI 用户配置译者权限。 * **术语表功能**(仅适用于 DeepL):将术语添加到术语表中,以确保已定义术语的翻译保持一致。 * 以及更多功能。 这些 AI 服务集成将提升翻译效率、质量和交付速度。 *** ### 2024 年 9 月 [#september-2024] #### 新功能 [#new-features-13] ##### 用于更快修改翻译的语言选择器 [#language-selector-for-faster-translation-modifying] 继近期简化翻译管理的更新后,**翻译** 页面新增了语言选择器。此前,用户在修改多种语言的翻译时必须不断返回语言列表。现在,选择一个类别会直接进入键列表。您可以使用此页面上的新选择器切换语言,从而显著减少设置翻译所需的时间。 #### 改进 [#improvements-14] * 添加新项目时,现在加载速度更快,并会显示动态预加载器。 * 项目列表中的 **新键** 列已移除。此项更改通过减少 **项目** 页面的杂乱并通过键数据缓存提升性能来改善用户体验。 * 搜索引擎现在可在页面重新加载后保留搜索结果,从而提供一致的用户体验。 * 切换至搜索结果的下一页时,页面会自动滚动至顶部,提供更直观的体验。 *** ### 2024 年 6 月 [#june-2024] #### 改进 [#improvements-15] ##### 简化默认翻译管理 [#simplified-default-translations-management] **翻译** 页面新增了一列,用于显示所选语言的默认翻译,与英语翻译相区分。此前仅提供英语翻译,但现在用户可以轻松编辑全部 22 种支持语言的翻译。 ##### 新项目类型 [#new-project-types] 新增了两种项目类型:`pbsr-v2` 和 `pbsr-admin`。 *** ### 2024 年 4 月 [#april-2024] 我们非常高兴地宣布发布 **B2TRANSLATE 版本 2**,其中包含新功能和增强功能,可改善您的翻译工作流。以下是此版本的新内容: #### 新功能 [#new-features-14] ##### 来自 Template 项目的预翻译键 [#pre-translated-keys-from-the-template-project] 现有项目中,Template 项目键的预加载翻译现已适用于所有支持的语言。 对于新项目,用户现在可以灵活选择预加载全部语言,或仅选择所需的特定语言。 ##### 用户可编辑的翻译 [#user-editable-translations] 我们引入了让用户修改各自语言中预翻译键的功能。这种灵活性使用户能够根据其特定项目要求或偏好微调翻译。 ##### 反馈表单 [#feedback-form] 主菜单中现已提供全新的反馈表单。用户可以直接从 B2TRANSLATE 平台提供反馈,使 B2TRANSLATE 团队能够收集洞察、解决问题并持续改善用户体验。 :tada: **祝您翻译愉快!** To properly connect Binance to B2CONNECT Hub using an Ed25519 key, you need to: ### Get a list of trusted IP addresses from B2CONNECT [#get-a-list-of-trusted-ip-addresses-from-b2connect] Contact your Account Manager to obtain a list of B2CONNECT IP addresses. You'll need them later, to properly configure a list of trusted IPs. ### Create Ed25519 keys [#create-ed25519-keys] 1. Download and install the Asymmetric Keys Generator. 2. Generate private and public Ed25519 keys. Follow the **How to create an Ed25519 key pair?** section of the [Binance instruction](https://www.binance.com/en/support/faq/detail/6b9a63f1e3384cf48a2eedb82767a69a) for step-by-step guidance. ### Register your Ed25519 keys on Binance [#register-your-ed25519-keys-on-binance] Follow the **How to register my Ed25519 key on Binance?** section of the [Binance instruction](https://www.binance.com/en/support/faq/detail/6b9a63f1e3384cf48a2eedb82767a69a) for step-by-step guidance. ### Edit restrictions [#edit-restrictions] Add previously acquired B2CONNECT IP addresses as trusted IPs to the allowlist of newly registered API keys. ### Configure the connection on the B2CONNECT side [#configure-the-connection-on-the-b2connect-side] Contact your Account Manager for guidance on integrating the keys into the B2CONNECT settings. When creating API keys on the Kraken platform, on the **Add API key** page, set the **Nonce window** field to `10000000000` (one followed by ten zeros). To avoid typos when entering this value, you can copy it above and paste it into the form as follows: Generate Kraken API keys This is required for proper handling of time variables (nanoseconds in this case). The following table provides an overview of liquidity provider platforms that are supported by B2CONNECT and outlines the B2CONNECT adaptor connectivity capabilities when connecting to a corresponding platform. [^1]: 20 for WSS B2CONNECT supports connectivity to multiple FIX-enabled trading platforms across various asset classes. Access or distribute liquidity with the [B2CONNECT FIX API](../fix-api). The table below outlines the supported platforms and their integration capabilities. Orders with the `GTC` Time in force are currently supported as `IOC`. 1, 2 Supported under the External Maker Specification. This guide outlines the steps you need to follow to properly prepare your Android app for Google review, approval, and successful publication on Google Play. These instructions provide general guidance as of the date of publication. You are responsible for completing all required fields in your Google Play Console. Providing incorrect or incomplete information may result in warnings, restrictions, or suspension of your developer account by Google. ## Step 1. Compliance checkpoint [#step-1-compliance-checkpoint] Before creating and submitting your Android app for Google review, determine the countries where you want your app to be available and ensure you hold all required licenses and legal permissions for each country. This process may take time, so obtain the necessary licenses in advance to confirm that you are authorized to offer all configured trading instruments in your B2CORE instance and provide this information during the Google Play review. To learn more about Google Play policies for financial services and cryptocurrency, refer to their **Policy center** and specifically to the following: * [Blockchain-based content](https://support.google.com/googleplay/android-developer/answer/6112435?hl=en\&ref_topic=3450769\&sjid=9872213577143447449-NA) * [Understanding Google Play’s cryptocurrency exchanges and software wallets policy](https://support.google.com/googleplay/android-developer/answer/6112435?hl=en\&ref_topic=3450769\&sjid=9872213577143447449-NA) ## Step 2. Prepare required app information [#step-2-prepare-required-app-information] Prepare the following information that will be required when creating your app in the Google Play Console and submitting it for Google review. ### Support and legal information [#support-and-legal-information] Provide the following details: * **Privacy policy URL** — a link to a publicly accessible web page that explains how your app collects, uses, stores, and protects user data. For Android apps published on Google Play, the privacy policy is mandatory, even if your app collects minimal data. The page must: * Be publicly available. * Be hosted on your website or another reliable public domain. * Clearly describe what data is collected, how it is used, and how users can request account deletion or data removal. * **Demo account** — a demo account that Google can use during the review process (for details, refer to [Step 3. Create and configure a demo account in the B2CORE UI](#step-3-create-and-configure-a-demo-account-in-the-b2core-ui)). * **Contact email for Google** — an email address used for official communication from Google. This email will be linked to your developer account in Google Play Console. * **Public developer contact details** — contact information visible to users on Google Play, which must include: * Support email * Contact phone number * Website URL ### Store Listing information [#store-listing-information] Prepare the following store listing details for your app: * App name * Short description (up to 80 characters) * Full description (up to 4,000 characters) * Graphical assets (can be provided by the B2CORE team). To request them, contact [android-support@b2broker.com](mailto:android-support@b2broker.com) or your account manager. ## Step 3. Create and configure a demo account in the B2CORE UI [#step-3-create-and-configure-a-demo-account-in-the-b2core-ui] To be able to review all of your app functionality, the Google reviewers need access to a demo account. For this reason, you need to configure a demo account as follows: * Verify your demo account by going through all the steps of your configured KYC procedure. * In the Back Office, examine and enable all the B2CORE UI modules that will be featured in your mobile app. Each module must be properly configured to ensure that your mobile app will not be rejected by Google during review. * If your app enables its users to transfer or exchange assets, you also need to make sure that there are enough funds on your demo account, so that the Google reviewers are able to check the transfer and exchange functionality as well. ## Step 4. Register in the Google Play Console as an Organization [#step-4-register-in-the-google-play-console-as-an-organization] To publish your Android app, you need to register in the [Play Console](https://play.google.com/console/signup) as an organization and create a developer account. Further on, with each Android release, the B2CORE team will provide new app bundles (`.abb` files) for you and you will be responsible for managing the regular maintenance of the app. For more information, refer to [Get started with Play Console](https://support.google.com/googleplay/android-developer/answer/6112435?hl=en\&ref_topic=3450769\&sjid=9872213577143447449-NA). ## Step 5. Create a new app in the Play Console [#step-5-create-a-new-app-in-the-play-console] To create an app: Sign in to the [Google Play Console](https://play.google.com/console/). Select your developer account. To start a new app, click **Create app**. Fill in the app details: * In the **App name** field, enter the name for your app. This is how your app will appear on Google Play. * In the **Default language** dropdown, select **English**. * In the **App or game** section, select **App**. * In the **Free or paid** section, select **Free**. App details Add an email address that Google Play users can use to contact you about your app. In the **Declarations** section, accept app developer declarations and confirm policy compliance. Declarations Click **Create app**. After creating the app, you'll be redirected to the Dashboard to continue the app setup. If you’re not automatically redirected, you can access it anytime from the **Home** menu in the Play Console by clicking your app. ## Step 6. Set up your app on the Play Console Dashboard [#step-6-set-up-your-app-on-the-play-console-dashboard] At this step, provide all the information requested by Google Play about your app. To provide information about the app: In the Play Console, select your app. Click each link in the **Set up your app** section of the Dashboard and fill in the required details. Play Console Dashboard ### Set privacy policy [#set-privacy-policy] * In this section, enter a link to your privacy policy that explains how you handle sensitive user and device data. * Click **Save** to return to the Dashboard. ### App access [#app-access] * In this section, select the option **All or some functionality in my app is restricted**. App access ### Ads [#ads] * In this section, select the option **No, my app does not contain ads**. * Click **Save** to return to the Dashboard. ### Content ratings [#content-ratings] * In the **Category** section, fill in the following: * **Email address** — specify your contact email. * Select the option **All other app types**. * Enable the checkbox to **Agree with the Terms of Use**. Content ratings — Category * In the **Questionnaire** section, select **No** for all the following: * Downloaded app * User content sharing * Online content * Promotion or sale of age-restricted products or activities * Miscellaneous Content ratings — Questionnaire * In the **Summary** section, verify the displayed summary and click **Save**. ### Target audience and content [#target-audience-and-content] * In the **Target audience**, select the checkbox **18 and over**. Selecting this checkbox will redirect you to the **Summary** section. * You can fill in the previous sections, such as **App details**, **Ads**, and **Store presence** if necessary. Target audience and content * In the **Summary** section, verify the displayed summary and click **Save**. ### Data safety [#data-safety] * Read the **Overview** section. * In the **Data collection and security** section, select the options as shown below and provide a URL to the section in your B2CORE UI where an account can be deleted. The URL must follow this format: `https://{your-Front-Office-URL}/profile-info` Make sure to replace `{your-Front-Office-URL}` with the domain of your B2CORE UI. Ensure that your B2CORE instance supports account deletion. This is a Google Play requirement and may be checked at any time by Google Play or by users. Failure to comply may result in suspension of your developer account in Google Play Console or a permanent ban. Data collection and security * In the **Data types** section, fill in the following: * **Location**: B2CORE does not collect this type of data. * **Personal info**: Specify the data that clients are required to provide during registration in your B2CORE instance. This usually includes (but isn't limited to) "Name", "Email address", "Phone number", or other. * **Financial info**: B2CORE does not collect this type of data. * **Health and fitness**: B2CORE does not collect this type of data. * **Messages**: B2CORE does not collect this type of data. * **Photos and videos**: B2CORE does not collect this type of data. * **Audio files**: B2CORE does not collect this type of data. * **Files and docs**: B2CORE does not collect this type of data. * **Calendar**: B2CORE does not collect this type of data. * **Contacts**: B2CORE does not collect this type of data. * **App activity**: B2CORE collects "App interactions" data. * **Web browsing**: B2CORE does not collect this type of data. * **App info and performance**: B2CORE collects "Crash logs" and "Diagnostics" data. * **Device or other IDs**: B2CORE does not collect this type of data. * In the **Data usage and handling** section, you will see a set of questionnaires related to the data collected by the app. * Complete the questionnaires in the **Personal info** section as shown in the example below: Personal info * Complete the questionnaires in the **App info and performance** and **App activity** sections as shown in the example below: Cash logs * In the **Preview** section, verify the displayed summary and click **Save**. ### Government apps [#government-apps] * Select **No** for the displayed option. Government apps * Click **Save** to return to the Dashboard. ### Financial features [#financial-features] * Select the checkboxes for the features that your app provides. Make sure to select only the features that your app actually provides. These may differ from the example shown below. Financial features * Click **Save** to return to the Dashboard. ### Health apps [#health-apps] * Select the option **My app does not have any health features** and click **Next**. * The **Documentation** section doesn't require any additional actions. * Click **Save** to return to the Dashboard. ### Store settings [#store-settings] * In the **App category** section, fill in the following: * In the **App or Game** option, select **App**. * In the **Category**, select **Finance**. * In the **Store Listing contact details** section, enter the email address, phone number, and website that will be visible to users on Google Play. * (Optional) In the **External marketing** section, you can select the checkbox for **Advertise my app outside Google Play**. Store settings ### Set up your store listing [#set-up-your-store-listing] * In the **Listing assets** section, fill in the following: * **App name** * **Short description** * **Full description** Listing assets * In the **Graphics** section, attach graphic assets provided by the B2CORE team. Click **Add assets** and upload each graphic asset one by one, and select the appropriate category for each asset. * After you’ve added all provided assets, click **Save**. ### Send app information for review [#send-app-information-for-review] All the information that you've provided about your app must be sent for Google review. Click **Publishing overview** in the main menu and then click **Send X changes for review**. ## Step 7. Upload the app bundle (.aab) for a production release [#step-7-upload-the-app-bundle-aab-for-a-production-release] To upload your app bundle and configure a production release in the Google Play Console: In the Play Console, select your app. Navigate to **Test and release** > **Production**. Open to the **Countries/regions** tab and select the countries where you want your app to be available, according to the licenses that allow you to distribute the app and provide services. Click **Create new release** in the upper-right corner. Create new release Click **Change signing key**. Google Play uses app signing based on cryptographic keys to verify the authenticity and security of your app. Proper configuration of **Google Play App Signing** is critical to ensure a secure deployment and, where applicable, a smooth transition for existing `.apk` users to the Google Play version. Change signing key Download the encryption public key. * Select the option **Upload a new app signing key from Java keystore**. * Click **Download encryption public key** (Option 1). Download encryption public key Send the downloaded key in the `.pem` file format to the B2CORE team either by emailing [android-support@b2broker.com](mailto:android-support@b2broker.com) or through your account manager. The B2CORE team will generate an app signing key, encrypt it using the provided public encryption key, and return it to you together with your application in `.aab` format, signed with the same key. This process may take some time. After receiving the **signed app bundle** (`.aab`) and the **app signing key archive** (`.zip`), return to **Test and release** > **Production** > **Releases** > **Untitled release**. On the **Releases** page, click **Edit release**. Upload the received **app signing key** (`.zip`). * Select the option **Upload the app signing key (.zip)**. * Click **Upload generated ZIP** (Option 4). Upload app signing key Upload the received **app bundle** (`.aab`). * Drag and drop the provided `.aab` file. Don't modify it. * After uploading, make sure no errors are shown. You may see the following warning message. This is expected and can be safely ignored. **Warning** `This App Bundle contains native code, and you've not uploaded debug symbols. We recommend that you upload a symbol file to make your crashes and ANRs easier to analyze and debug.` Fill in the **Release details**. * The **Release name** field is filled in automatically after uploading the `.aab` file. * In the **Release notes** field, paste the release notes provided by the B2CORE team or leave the field empty. Release details Click **Next**. Review the release information and make sure there are no errors highlighted in red. You may see the following warning message. This is expected and can be safely ignored. **Warning** `This App Bundle contains native code, and you've not uploaded debug symbols. We recommend that you upload a symbol file to make your crashes and ANRs easier to analyze and debug.` Start the rollout. * Click **Save** to submit the app for Google review. * You will be redirected to **Publishing overview**, where you must click **Send X changes for review**. App review and rollout may take several days. The review will result either in successful publication on Google Play or in a rejection with the reason provided. If you experience issues resolving a rejection, contact the B2CORE team at [android-support@b2broker.com](mailto:android-support@b2broker.com). ## Step 8. After approval: app monitoring [#step-8-after-approval-app-monitoring] After your app is approved, regularly check its availability and policy compliance to avoid enforcement actions. Failure to perform these checks may result in policy violations, app removal, suspension, or permanent termination of your developer account in the Play Console, often without prior notice. ### Check app availability [#check-app-availability] Confirm that the app is visible on Google Play in all allowed countries and that installation and basic functionality work as expected. ### Check compliance [#check-compliance] Keep your app listing, privacy policy, and country distribution aligned with your current licenses and legal permissions. ### Monitor policy status [#monitor-policy-status] Periodically check if any actions required in **Monitor and improve** > **Policy and programmes** > **Policy status**. ### Review app content [#review-app-content] Periodically check if any actions required in **Monitor and improve** > **Policy and programmes** > **App content**. Ensure that all app information is up to date. ### Monitor Google Play communications [#monitor-google-play-communications] Regularly check the contact email linked to your Google Play Console and respond promptly to any notifications. Google Play policies and deployment processes change regularly. If you notice any missing or outdated information in this instruction, contact us at [android-support@b2broker.com](mailto:android-support@b2broker.com) for assistance or clarification. In addition to creating standalone desktop solutions, B2CORE offers you assistance with publishing branded mobile applications for iOS and Android. To publish your app on the App Store, you need to consider a variety of policy issues to ensure strict compliance with all of the guidelines and regulations, which may be a non-trivial task. In this document, you can find detailed instructions on how to properly prepare your iOS app to speed up its approval and successful publication on the App Store. All trademarks, logos, and brand names referenced in this document are the property of their respective owners. All company, product, and service names used in this document are for identification purposes only. The use of these names, trademarks, and brands does not imply endorsement. ## Step 1. Prepare the licenses for trading crypto [#step-1-prepare-the-licenses-for-trading-crypto] First of all, before proceeding with building and submitting your iOS app for review, you need to determine in which countries this app will be available and take special care to obtain all the licenses required to provide your services in these countries. This procedure might be time-consuming, and you must obtain all the required licenses in advance to make sure that you are allowed to trade all the instruments that are configured in your B2CORE solution, and then hand over these licenses to the App Store review team. App Store Connect — Country and Region Availability The license requirements are mandatory, and the permissions to servicing trading operations must be granted by Apple. To learn more about the licensing requirements which apply specifically to cryptocurrencies, refer to [App Store Review Guidelines - 3.1.5 Cryptocurrencies](https://developer.apple.com/app-store/review/guidelines/#cryptocurrencies). ## Step 2. Create and configure a demo account in the B2CORE UI [#step-2-create-and-configure-a-demo-account-in-the-b2core-ui] To be able to review all of your app’s functionality, the App Store review team needs access to a demo account. For this reason, you need to configure a demo account as follows: * Verify your demo account by going through all the steps of your KYC procedure. * In the Back Office, examine and enable all the B2CORE UI modules that will be featured in your mobile app. Each module must be properly configured to ensure that your mobile app will not be rejected by the App Store during review. * If your app enables its users to transfer or exchange assets, you also need to make sure that there are enough funds on your demo account, so that the App Store review team is able to check the transfer and exchange functionality as well. ## Step 3. Enroll in the Apple Developer Program as an Organization [#step-3-enroll-in-the-apple-developer-program-as-an-organization] To be able to open an Apple Developer account, you must provide the following information: * your D-U-N-S number * your Legal Entity Status * your Legal Binding Authority * your website address To publish your iOS app, you need to enroll in the Apple Developer Program as an organization, and then share access to your developer account with the B2CORE team by sending your access credentials to our company email: [ios-admin@b2broker.com](mailto:ios-admin@b2broker.com). Further on, with each iOS release, the B2CORE team will upload a new app build for you, and you will be responsible for managing the regular maintenance of the app (for details, refer to [Step 8. Update your app with new releases](deploying-your-ios-app#step-8.-update-your-app-with-new-releases)). For general information, refer to [Before You Enroll — Apple Developer Program](https://developer.apple.com/programs/enroll/). For step-by-step instructions, refer to [Enrolling in the Apple Developer Program as an organization](https://developer.apple.com/support/app-account/). ## Step 4. Grant access and admin permissions to the B2CORE team [#step-4-grant-access-and-admin-permissions-to-the-b2core-team] For the B2CORE team to be able to configure your app at App Store Connect, you need to grant the following admin permissions to our team. To do this, proceed as follows: 1. At App Store Connect, switch to **Users and Access**. 2. On the **People** tab, add a new person with the B2BROKER company email: [ios-admin@b2broker.com](mailto:ios-admin@b2broker.com). 3. In the **Roles** section, enable the **Admin** role. 4. In the **Additional Resources** section, make sure that all the permissions are enabled as follows: * **Access to Reports** * **Access to Certificates, Identifiers & Profiles**, which includes: * **Access to Cloud Managed Distribution Certificate** * **Access to Cloud Managed Developer ID Certificate** * **Create Apps** App Store Connect — Users and Access ## Step 5. Provide all necessary information to your account manager [#step-5-provide-all-necessary-information-to-your-account-manager] Contact your account manager at B2BROKER to inform the development team that they must prepare your app for publishing. You need to provide the following information to your account manager, which will be passed over to the development team: * The information about licenses, along with the credentials to your B2CORE Demo Account. * The URL of your B2CORE UI instance. * The legal name of your company, as well as your Apple Developer account name (typically, it coincides with the company name specified when creating a Developer Account as an Organization). Your Apple Developer account must be registered under your organization as an LLC; personal accounts aren't permitted. * The email of the Developer Account’s owner. In addition, you need to provide the following information: * The name of your iOS app (it must not exceed 16 characters). * The primary language of the app (English is set by default) and a list of supported languages for localization purposes. * Your preferences regarding the app icon (such as the required color scheme). * Your preferences regarding the app screenshots displayed on the product page on the App Store. After your account manager contacts the B2CORE development team, they prepare your app and upload the build to the App Store. The app then appears at the App Store Connect, with its version indicated and its status set to **Prepare for Submission**. App Store Connect — Prepare for Submission ## Step 6. Specify the pricing, availability and privacy options [#step-6-specify-the-pricing-availability-and-privacy-options] At App Store Connect, configure the following app settings: * **Pricing and Availability** In this section, you need to specify the following options: * We recommend that you offer your mobile app for free and set the **Price Schedule** field to `US$0.00 (Free)`. * Set the **Tax Category** field to `App Store software`. * In the **Availability** section, select the countries in which your app will be available, according to the licenses obtained by you. * For the other options in this section, you can leave the default settings. App Store Connect — Pricing and Availability * **App Privacy** In this section, specify the **Privacy Policy URL**, which must be the same one that you specified for your B2CORE UI instance. App Store Connect — App Privacy Next, click **Get Started** and complete the quiz to specify your app’s data collection policy: * **Contact Info** Your app will collect the user’s email address by default. Depending on your app’s configuration, it may also collect other data, such as the username, phone number, user address and other contact information. Please make sure that you indicate the collected data according to the options that are specified in your B2CORE Back Office. * **Identifiers** The **User ID** data is collected by default. The **Device ID** data is not collected. * **User Content** The user photos and videos are collected. * **Other User Content** On this page, select `App Functionality` and `Other Purposes`. The following example illustrates the data collection settings that must be specified by a client publishing a standard iOS app: * **Data Linked to You**: * **Contact Info** * **User Content** * **Identifiers** * **Data Not Linked to You**: * **Diagnostics** * **Contact Info**: * **Name** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Email Address** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` For the question **Do you or your third-party partners use email addresses for tracking purposes?**, select the answer `No, we do not use email addresses for tracking purposes.` * **Phone Number** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Physical Address** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Other User Contact info** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **User Content**: * **Photos or Videos** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Other User Content** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Identifiers**: * **User ID** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Diagnostics**: * **Crash Data** * `App Functionality` To learn more, refer to [App privacy details on the App Store](https://developer.apple.com/app-store/app-privacy-details/). ## Step 7. Specify a demo account from which the Apple Review team will log in [#step-7-specify-a-demo-account-from-which-the-apple-review-team-will-log-in] Once your app is uploaded to App Store Connect, you need to specify a demo account that you have created at [Step 2](deploying-your-ios-app#step-2.-create-and-configure-a-demo-account-in-the-b2core-ui). The App Store review team will use this account to log in and review your app. To specify a demo account, proceed as follows: 1. At App Store Connect, switch to **App Review** > **Prepare for Submission**. In the **App Review Information** section, enable the **Sign-in Required** checkbox, and then specify the login and password for your demo account. 2. In the **Contact Information** section, specify the contact information of a person responsible for configuring App Store Connect. The App Store review team will contact this person to inform them whether the app is accepted or rejected, or whether any additional information is needed. 3. In the **Notes** field, add the links to your licenses and attach their scans (if available). The licenses must be provided for each country that you selected in the **Availability** section at [Step 6](deploying-your-ios-app#step-6.-specify-the-pricing-availability-and-privacy-options). The links must be added below the information on how to locate the delete account button. 4. In the **Notes** field, add the following text: > The app doesn't rely on any third-party API, including any API that might put our users' data at risk. The app uses only a custom REST API to communicate with the backend with the purpose of providing financial services. This API is developed and owned by our company. Therefore, we guarantee correct functioning of the API. App Store Connect — App Review Information 5. Specify the following fields: * **Promotional Text** * **Description** * **What’s New in This Version** * **Keywords** * **Support URL** * **Marketing URL** * **Version** * **Copyright** App Store Connect — Additional Information To learn more about these fields, refer to [Platform version information](https://developer.apple.com/help/app-store-connect/reference/platform-version-information). 6. Click **Add for Review** to submit your app for review to the App Store team. When your app is reviewed and approved, its status will be changed to `Ready for Distribution`. ## Step 8. Update your app with new releases [#step-8-update-your-app-with-new-releases] With each iOS release, the B2CORE team will upload a new app build for you in App Store Connect. You need to create a new app version, add the new build to the version, and submit it for review to the App Store team. ### Create a new app version [#create-a-new-app-version] When the B2CORE team notifies you of a new iOS release, create a new app version in Apple Store Connect, add a new build to it, and submit it for review to the App Store team. You can create a new version only if the current app version has the `Ready for Distribution` status. If for some reason, your current app version wasn’t submitted for review and has an editable status, [update the current version with a new build](deploying-your-ios-app#update-the-current-app-version-with-a-new-build) instead of creating a new version. For a full list of possible statuses, refer to [App and submission statuses](https://developer.apple.com/help/app-store-connect/reference/app-and-submission-statuses). 1. From Apps, select your app. 2. On the **Distribution** tab, click the **add** button (+) displayed in the **iOS App** section of the sidebar. 3. In the **New Version** popup, the new version number (for example, `1.24.0`) and click **Create**. You can view a complete list of app versions and builds uploaded for them on the **TestFlight** tab. 4. Review the new version metadata. When you create a new version, the metadata from the current version is transferred to the new version automatically. For a description of the version properties, refer to [Platform version information](https://developer.apple.com/help/app-store-connect/reference/platform-version-information). 5. Click **Save** in the upper-right page corner. 6. Add the latest app build to the newly created version: * Scroll down to the **Build** section, and then click the **add** button (+) displayed next to the section. * In the **Add Build** popup, select the build with the *highest* version number and click **Done**. App Store Connect — Add a build App Store Connect — Select the latest build 7. Add the release notes to the **What’s new in this version** field. The RNs for each iOS release can be found [here](../release-notes/release-notes-mobile). The RNs may not be fully applicable to your app, so you may need to edit them to include only the updates relevant to your app’s functionality. For example, if the RNs mention updates for a trading platform that your app doesn’t support, omit that item from the **What’s new in this version** field. 8. Click **Save** in the upper-right page corner. 9. Click **Add for Review** to submit the new app version for review to the App Store team. When your new app version is reviewed and approved, its status will be changed to `Ready for Distribution`. ### Update the current app version with a new build [#update-the-current-app-version-with-a-new-build] If your current app version doesn’t have the `Ready for Distribution` status in App Store Connect, you can’t create a new app version when a new iOS release is available. Instead, select a new build for the current version and submit it for review to the App Store team. 1. From Apps, select your app. 2. In the sidebar, select the app version for which you want to upload a new build. You can do it only for the version that has one of the editable statuses. For a full list of possible statuses, refer to [App and submission statuses](https://developer.apple.com/help/app-store-connect/reference/app-and-submission-statuses). 3. Scroll down to the **Build** section. 4. To remove the previous build, hover over the build and click the **delete** button (-) that appears on the right side of the build row. App Store Connect — Remove a build 5. Add the latest build: * Click the **add** button (+) displayed next to the **Build** section. * In the **Add Build** popup, select the build with the *highest* version number and click **Done**. App Store Connect — Add a build 6. In the **Version** field, update the version number to match the new iOS release. For example, change `1.23.0` to `1.24.0`. 7. Add the release notes to the **What’s new in this version** field. The RNs for each iOS release can be found [here](../release-notes/release-notes-mobile). The RNs may not be fully applicable to your app, so you may need to edit them to include only the updates relevant to your app’s functionality. For example, if the RNs mention updates for a trading platform that your app doesn’t support, omit that item from the **What’s new in this version** field. 8. Click **Save** in the upper-right page corner. 9. Click **Add for Review** to submit the new app version for review to the App Store team. When your new app version is reviewed and approved, its status will be changed to `Ready for Distribution`. The **Dashboard** page provides a quick overview of key financial metrics over the selected period, helping you analyze the overall performance and financial activity. ## Access to the Dashboard [#access-to-the-dashboard] The **Dashboard** is available to users who are assigned the permission `Access to Finance Dashboard` under the **Statistics** category and opens after signing in to the Back Office. For other Back Office users, the **Dashboard** is hidden, and they are redirected to the **Clients** > **General** page after signing in. For more details about user groups and permissions, refer to [How to add a user group and grant permissions](../how-to-articles/manage-system-settings/how-to-add-a-user-group-and-grant-permissions). By default, the financial metrics are displayed for the current day. You can select one of the following periods: * Today * Yesterday * Last 7 days * Last 30 days * Last 90 days * This month * Last month * Custom range You can also filter the displayed metrics by using the following filters located above the metric blocks: * **Client Type** * **Jurisdiction** * **Country** * **Manager** * **Client Tags** To reset the selected filters and period, click the **Reset** button. Dashboard The following information is displayed on the Dashboard: ## Deposits [#deposits] * **Total deposit** — the total amount of deposits, in USD, for the selected period. The metric is calculated against the **Final amount (USD)** column in [Finance > Deposits](finance/deposits). Only the completed deposits in the final status are included. * **Average deposit** — the average deposit amount for the selected period, which is calculated as: `Total deposit / Number of deposits` ## Withdrawals [#withdrawals] * **Total withdrawal** — the total amount of withdrawal, in USD, over the selected period. The metric is calculated against the **Final amount (USD)** column in [Finance > Payouts](finance/payouts). Only the completed withdrawals in the final status are included. * **Average withdrawal** — the average deposit amount for the selected period, which is calculated as: `Total withdrawal / Number of withdrawals` ## Summary [#summary] * **Net deposit** — the net amount of deposits, in USD, for the selected period, calculated as: `Total deposit − Total withdrawal` B2CORE is a fully-featured CRM providing a complete set of customization and access control options. ## Authorization and permissions [#authorization-and-permissions] B2CORE provides a full set of personalization and access control options. User access is controlled by applying different user group permissions. After your B2CORE profile is activated, you can sign in to the Back Office using the credentials provided by your administrator. Upon encountering an error when trying to sign in, check the login and password, along with the input language and Caps Lock state. If everything appears to be correct, contact your administrator to clarify the status of your profile. ## General interface options [#general-interface-options] The Back Office user interface is uniform across all pages, ensuring consistent look and feel and featuring a common set of basic options. This document describes how to shape the data displayed on a page, how to filter and sort this data, and then export it to a file. ### The top bar options [#the-top-bar-options] At the top of a typical Back Office page, you can find a top bar with the following elements: * the **☰ main menu** button Click it to expand or collapse the main menu. * **Backend version** The currently deployed version of your Back Office. * **Server time** The fixed system time in GMT+0. It can't be changed and ensures accuracy and consistency across all transactions, logs, and activities within B2CORE. * the **Open personal area** link Click the link to access the **Sign In** page of the B2CORE UI associated with your Back Office. * the **Bell** icon Click it to see pending client requests. The number of new requests is displayed on a counter badge. * the **Warning** icon Click it to view platform connectivity alerts, such as notifications about trading platforms that are currently unreachable. The number of active alerts is displayed on a counter badge. * the panel displaying the email address from your user profile In the upper-right page corner, click the profile button displaying your email address to access the **Log out** button and **Enable 2FA** option (or **Disable 2FA**, if two-factor authentication is already enabled). Two-factor authentication (2FA) is obligatory and must be enabled for all user profiles in the Back Office. To enable 2FA through time-based one-time passwords (TOTP) for your user profile, click **Enable 2FA**, and then click **OK** in the popup. Next, follow the displayed instructions to set up 2FA with Google Authenticator. After enabling 2FA, sign in to the Back Office by entering your login and password, followed by a code from the Google Authenticator app. ### Common options [#common-options] The following buttons can be found on most Back Office pages. * Above a table: * create button — the **Create** button used to add a new entry * export button — the **Export** button used to export table data to a CSV file * the **Select** and **Select All** buttons used to select multiple table entries and perform bulk actions on them (where available) * In a table header: * search button — the **Search** button used to apply custom filters * reset button — the **Reset** button used to reset custom filters * In a table row: * edit button — the **Edit** button used to drill down the data and access details * delete button — the **Delete** button used to delete an entry Page elements may serve as hyperlinks that can be clicked to drill down to details. Access to this data is maintained based on the permissions assigned to a particular user group. ### Filtering and sorting [#filtering-and-sorting] Throughout the Back Office, the data is typically organized in tables. Table data can be sorted and filtered. The columns by which you can sort data are marked with up and down arrows displayed in column headers (no arrows are displayed when sorting isn't available). You can click these arrows to sort data in ascending or descending order, by a single column at a time Along with a sorting order, you can specify multiple criteria for filtering column data. When filtering is available, the appropriate input fields are displayed in column headers. The inputs vary depending on a data format, such as text, number, date, time, or list. To facilitate filtering by date, two fields for the start and end dates may be displayed so that you can define a time period. To enable or disable filters, click the **Search** and **Reset** buttons. ### Pagination [#pagination] You can display table data across multiple pages and specify how many records to display on a page (the total number of records found is displayed next to the page size selector). To navigate between pages, click **Prev** or **Next**, or click a specific page number. ### Visibility [#visibility] To choose the data fields to include in a table, click **Column Visibility** and mark or unmark the columns you want to display or hide. Once applied, the new visibility settings become effective for all Back Office users (visibility of specific fields depends on the access permissions granted to particular users). ### Data export [#data-export] The data on most of the Back Office pages can be exported to a CSV or XLSX file. To do this, click the **Export** button, choose a file format, and then select whether to download the data to your computer or deliver it to an email address from your profile. The data in a resulting file matches both the current visibility settings and the applied sorting and filtering criteria. Use this menu to access to the functionalities of the **Introducing brokers (IB)** product, designed to support referral programs that help expand your client base. Through these programs, you can encourage your existing clients to become partners and attract new traders to your brokerage. In return, partners earn a percentage of the revenue generated from the trading activity of their referrals, fostering a mutually beneficial partnership. If you don't have this menu in your Back Office, contact your account manager to learn more about obtaining and implementing the IB program. For more information about IB, refer to the [product documentation](https://docs.ib.b2core.b2broker.com/). On this page, you can view feedback left by clients after tickets that they reported to HelpDesk in the B2CORE UI are marked as resolved. The following information is provided about each ticket for which feedback is submitted: **Id** The identifier of a ticket that was reported by a client to HelpDesk. Click a ticket identifier to view ticket details in SupportPal or Zendesk. *** **Email** The client email address. *** **Comment** The feedback text. *** **Date** The data and time when feedback was submitted. *** **Status** The client satisfaction rating. Possible values: * Extra Positive * Positive * Neutral * Negative * Extra Negative *** **Subject** The subject of a ticket. If a ticket is reopened and then resolved again, a client can submit updated feedback that is added as a new record to the **Ticket feedback** page. The following is a list of communication platforms supported in B2CORE: **See also** [How to manage communication platforms](../how-to-articles/manage-communication-platforms) The following is a list of KYC providers integrated with B2CORE. When configuring [verification levels](../back-office-guide/verification/levels), you can use the built-in KYC provider or rely on the supported third-party KYC providers to verify the identity of your clients. Listed below are the names of document groups that can be verified by each KYC provider, along with details explaining how the verification procedure is conducted with each provider in the B2CORE UI. **See also** [How to manage verification options](../how-to-articles/manage-verification-options) ## CRM & automation systems [#crm--automation-systems] The following CRM platforms can be connected to B2CORE to streamline sales processes and automate client management workflows: ## Customer support platforms [#customer-support-platforms] The following are platforms integrated with B2CORE, offering solutions for managing client tickets and enhancing support interactions: ## Data analytics tools [#data-analytics-tools] The following are platforms integrated with B2CORE for collecting and analyzing client action data in the B2CORE UI and mobile apps, providing insights into user behavior, engagement, and business results: The following is a list of payment systems integrated in B2CORE. These systems can be used to configure [deposit](../back-office-guide/system/deposit-system#deposit-methods) and [withdrawal methods](../back-office-guide/system/payout-system#payout-methods) that will be available to your clients in the B2CORE UI. For each payment system, it is indicated whether it supports deposits, withdrawals, or both. Additionally, you can find icons that can be displayed as icons of deposit and withdrawal methods in the B2CORE UI. The icons are used to easily identify a method that uses a specific payment system among the other methods. ## Payment System Service (PSS) [#payment-system-service-pss] For each payment system, it's also specified whether it supports connection to B2CORE through the new **Payment System Service (PSS)**. This service enhances integration by offering a single connection to support a range of deposit and withdrawal options offered by the system. This is especially effective when the system operates as a cashier system, consolidating and processing payments from multiple sources into one unified system (for details, refer to [How to add deposit and withdrawal methods through PSS](../how-to-articles/manage-payment-methods/how-to-add-deposit-and-withdrawal-methods-through-pss)). If you intend to connect payment systems through PSS, please contact your account manager first to confirm the availability of PSS-supported connections on your B2CORE instance. ## Support for PSS methods in mobile apps [#support-for-pss-methods-in-mobile-apps] PSS payment methods, including both deposits and withdrawals, are now supported in the iOS and Android mobile apps starting from version 1.30.0 (iOS) and 2.8.0 (Android). **See also** [How to manage payment methods](../how-to-articles/manage-payment-methods) The following are the trading platforms and hubs supported in B2CORE, with details on their specific features and functionalities. ## Trading platforms [#trading-platforms] ## Trading hubs [#trading-hubs] ### December, 2025 [#december-2025] **v1.31 (iOS)** This version includes: * **Savings now available in the app** Clients can now access **Savings** directly in the app. They can view and subscribe to savings programs, create wallets in the required currencies, monitor active programs, add funds, track interest payments, and, if needed, withdraw funds before the plan's end date.
Savings hub Subscribe to a savings program Installments
* **Streamlined Total balance calculation** The total balance shown on the app **Dashboard** now reflects the combined balances of all wallets and trading accounts and fully matches the total displayed in the B2CORE UI. * **New Activity section** A new **Activity** section has been added to the app, providing a complete history of all transactions in one place. Clients can now easily track their deposits, withdrawals, transfers, and exchanges, as well as search for transactions in specific currencies. The **Activity** section is accessible from the tab bar, as well as from the **Home** and **Wallets** screens. Use **pull to refresh** to quickly update the section and view the most up-to-date information.
Activity Currency search
* **Support for copy trading, PAMM, and MAM** Copy trading, PAMM, and MAM functionality from **B2COPY** is now supported in the app via a web view. This enables clients to access these services directly from the app, through the **Services** section. * **Blockchain explorer link for withdrawal tracking** Clients can now track withdrawal transactions on the blockchain directly from the app. For crypto wallets, a link to `https://www.blockchain.com/explorer` is available for withdrawals in Bitcoin, Ethereum, and Bitcoin Cash, making transaction monitoring easier and improving transparency. * **Static payment details for deposits via B2BINPAY V3 and Coinsbuy V3** The app now supports **static payment details** for deposits via **B2BINPAY** and **Coinsbuy** when connected through **API V3**. With static payment details, clients can generate one or more blockchain-specific deposit addresses directly in the app. These addresses are saved for future use and can be reused for subsequent deposits. In addition, the crypto deposit flow via **B2BINPAY V3** and **Coinsbuy V3** has been improved with clear **fee breakdowns** and **indicative amount** displays, providing better transparency and a smoother deposit experience. * **Full B2TRANSLATE integration for payment forms** Payment forms in the app are now fully integrated with [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly Weblate). Labels for all components of dynamic forms for PSS-connected deposit and withdrawal methods, as well as validation error messages, can now be customized and translated into multiple languages via B2TRANSLATE. * Bug fixes and improvements to ensure a smoother and more efficient user experience. *** ### November, 2025 [#november-2025] **v1.30.2 (iOS)** * This version is a bug-fixing release that improves the app experience. *** ### September, 2025 [#september-2025] **v1.30.0 (iOS)** This version includes: * **Extended multi-lingual support** With [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly WEBLATE) integration, the app now supports localization in up to **35 languages**. The key benefits include: * Offering the same language options on the app as in the B2CORE UI. * Customizing translations for each of the 35 supported languages via B2TRANSLATE. * Maintain translations for both the app and the B2CORE UI using a single tool: B2TRANSLATE. * Improving scalability and client satisfaction by removing language barriers. The integration is already in place, but translations for the supported languages need to be added to B2TRANSLATE. Full localization will become available once this process is completed.
Ar Ch
* **PSS deposit & withdrawal methods now in the app** Withdrawal methods configured via the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) in the Back Office are now available in the app. This completes support for both **deposit methods**, which were previously integrated, and **withdrawal methods** connected through PSS. * **Bonuses now available in the app** Clients can now access and manage bonuses directly in the app, including deposit bonuses. Bonuses are supported on **MT4/5** and **cTrader**. Bonuses are added as **credit funds** to clients’ trading accounts, increasing trading capital and margin. Once the bonus requirements are met, the bonus amount is converted into real funds and becomes withdrawable; otherwise, it expires.
Bonus programs Subscribe to a bonus program Active bonus programs
* **Refreshed UI for trading accounts** The **Trading** section has been updated for a more intuitive and seamless experience, enabling clients to: * Open trading accounts effortlessly. * Top up accounts in fewer steps. * Navigate to trading smoothly.
Trading accounts Trading account details
* **Feedback form** Clients can now quickly rate their experience as positive or negative within the app, with the option to provide a more detailed comment. The feedback form appears automatically after several app launches or financial operations and can also be accessed anytime from the **Profile** menu. The feedback data can be tracked via analytics tools.
Feedback form Share feedback from Profile
* Fixes and improvements to ensure stable performance and reliability. *** ### July, 2025 [#july-2025] **v1.29.1 (iOS)** This version includes bug fixes and performance improvements for a better app experience. *** ### June, 2025 [#june-2025] **v1.29 (iOS)** This version includes: * **Deposits methods configured via PSS now supported in the app** Deposit methods configured in the Back Office through the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) are now accessible to users directly within the app. Please note, withdrawal methods via PSS aren’t yet supported in the app. * **Multi-language support** (Beta) The app now supports 16 new interface languages, including **Arabic**, **Polish**, **German**, **Russian**, **Persian**, **Chinese**, **French**, **Thai**, **Italian**, **Indonesian**, **Hindi**, **Vietnamese**, **Portuguese**, **Czech**, **Japanese**, and **Korean**. Languages can be switched directly in the app in **Profile** > **Languages**. All languages are currently in Beta, and translation improvements will continue in future updates.
Profile > Languages Language list
* **Redesigned Wallets** The **Wallets** interface has been updated with a cleaner, more modern design, featuring: * Refreshed wallet card design * Display of the portfolio’s **Estimated Total** * Quick access to depositing funds and other financial operations * Enhanced wallet details, including total and available balances, recent transactions, and clearly highlighted action buttons.
Wallet list Hide balances Wallet details
* **Enhanced deposit experience** A redesigned flow makes it easier and faster for users to complete deposits.
Enhanced deposits Deposit form
* **Support for favorite cTrader accounts** Users can now mark cTrader accounts as favorites. Once marked, these accounts appear in the **Favorite Trading Accounts** widget, providing quick and easy access to trading directly from the **Home** screen. Favorite cTrader accounts * **Support for custom tiles in Services** Custom tiles can now be added to the **Services** section to link users to third-party services or external resources that support your brokerage business. Configuration must be set in the **Back Office**, where the tile name and redirect URL must be specified. Once configured, custom tiles will appear in the app under **Services**. In the Back Office, the option to configure custom menu links will become available with the [June 2025 release](release-notes#june-2025). * **Streamlined account creation with the Go to Deposit option** The account creation process has been streamlined to clearly indicate when a minimum deposit is required. If funds are insufficient for opening a new trading account, users will see the required amount along with the **Go to Deposit** button, encouraging quick funding and faster trading. Go to Deposit * Optimized overall app performance to provide a faster, more stable, and responsive user experience. *** ### March, 2025 [#march-2025] **v1.28 (iOS)** This version includes: **Improved sign-up and onboarding experience** The sign-up and onboarding processes in the app for new clients have been improved: * **Quick app overview**: before accessing the **Sign Up** and **Sign In** forms, clients now see a brief app overview showcasing key features through several screens. This enhancement aims to increase registration conversion and attract more potential clients.
Make flexible deposits All wallets in one place All account operations Track every wallet easily
* **Revamped design**: the **Sign Up** and **Sign In** forms have been redesigned for a better user experience.
Sign In Sign Un
* **Enhanced security**: during sign-up, setting a passcode is now required. Once set, it can’t be disabled. Enabling Face ID remains optional. If a client hasn’t previously set up a passcode or enabled Face ID, these steps will now be included during sign-in.
Set a passcode Enable Face ID
* **Verification**: a prompt to complete verification has been added to the onboarding process, encouraging clients to verify their identity, make their first deposit, and start trading faster. Complete verification **One-click access to trading** Clients can now access the MT4, MT5, and cTrader trading terminals by tapping **Trade** from their accounts in the app, making trading more convenient. To enable this feature, specify the **Web Terminal URL** in the platform details upon navigating to **Products** > **Platforms** in the B2CORE Back Office (for details, refer to [How to enable one-click trading access from the B2CORE UI and mobile app](../how-to-articles/manage-platforms/how-to-enable-one-click-access-to-web-trading-terminals)). Trade button on account cards *** ### December, 2024 [#december-2024] **v1.27 (iOS)** This version includes: * **Enhanced security with passcodes** Setting a passcode is now available during sign-up or sign-in to ensure improved app security. * **Optional biometric authentication** Biometric options, such as Face ID or Touch ID, have been introduced as an additional layer of security for quick and secure access. * **Support for analytics in Amplitude** The Amplitude platform is now supported for the app, enabling you to get analytics about your clients’ actions within the app. Please contact your account manager for assistance in setting up and getting Amplitude analytics. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. *** ### v1.26 (iOS) [#v126-ios] * This version brings internal enhancements and behind-the-scenes fixes to boost app performance and improve the user experience. *** ### v1.25 (iOS) [#v125-ios] This version includes: * **Redesigned Deposit section** The **Deposit** section, accessible via **Services** > **Finance**, has been redesigned for a smoother deposit experience. You can now easily select a wallet and deposit currency, and then choose one of the supported payment methods. Once selected, you’ll receive the deposit address or have the option to enter bank details to finalize your transaction. Additionally, before making a deposit, you can check current rates and calculate estimated amounts based on those rates in the **Indicative amounts** section. * The app performance has been enhanced for a faster and more seamless experience. *** ### v1.24 (iOS) [#v124-ios] This version includes: * **App Services** We are pleased to introduce the new app services feature, making it easier for you to locate supported services, such as Trading, Finances, HelpDesk, IB, and others, and see what will be available soon. The feature enables you to: * access services directly from the Home screen * search for the service you need * tap a service tile to quickly navigate to the desired service. * **Integration with Zendesk** The Zendesk customer support platform has been integrated, offering ticketing, live chat, and AI tools. Tap the HelpDesk button to navigate to the Zendesk interface from the app, without any additional authorization. * **Enhanced IB Room** The enhancements to the IB Room include detailed information about clients and rewards, enabling you to: * view a list of Direct IB and Sub-IB clients registered using your referral links. For each client, you can view the details about their total traded volumes and reward amounts you received. * view a list of rewards paid to your wallet and navigate to reward details. * **Password validation** When setting new passwords, they are now validated to comply with security standards, ensuring they meet the required length and include the necessary character requirements. * Bug fixes and improvements for a more refined and user-friendly interaction. *** ### v1.23 (iOS) [#v123-ios] This version includes: * **Integration with B2TRADER Brokerage Platform** With this release, we are thrilled to announce integration with B2TRADER Brokerage Platform, offering you a comprehensive trading experience: * Single sign-on: sign in to the app and navigate to the BBP platform without additional authorization. * Account list with detailed balances: keep your funds under control with a comprehensive view of account balances. Create and rename accounts to keep your funds well organized. * Asset balances screen: view asset details, including the amounts of free and frozen funds, with the option to hide assets with zero balances. * Order book and Price chart: monitor trading data and make buy and sell decisions, with quick access to the order placing screen. * Candlestick and Line charts: switch between chart types and scroll through historical values. * Limit & Market orders: place Limit and Market orders using all the supported time in force settings (Market: IOC, FOK; Limit: IOC, FOK, GTC, GTD, Day). * Order lists: access open and historical order lists, providing easy navigation to order parameters and details, and options for quick canceling or repeating an order. * **Redesigned Dashboard** The redesigned Dashboard offers the following enhancements: * **New widgets**: use new widgets, such as Total Balance, Last Transactions, Favorite Trading Accounts (now displaying only MT4 and MT5 accounts added to favorites), and IB Program. * **Organize the Dashboard**: easily organize your Dashboard by dragging and dropping widgets according to your preferences. * **Support for banners**: banners can now be displayed on the Dashboard. * **Profile info**: you can now view your profile name and picture at the top of the Dashboard. * **Quick navigation to HelpDesk**: tap the button in the topbar for quick access to the HelpDesk, if supported. * **Apple store info**: you can now review what’s new in the latest app version before downloading it. * Bug fixes and improvements to offer a smoother and more streamlined user experience. *** ### v1.22 (iOS) [#v122-ios] This version includes: * **Integration with CentroID** Support for CentroID has been added, providing connectivity to various trading platforms and liquidity sources. Now you can add your CentroID margin accounts, and make transactions on the accounts. * **Introducing Brokers (IB)** The IB Room option has become available in the Profile menu. Use it to register as a partner in referral programs and create your unique referral links. Attract new traders, earn rewards based on the trading activities of your newly referred clients, and track program performance using the IB Room Dashboard. * Bug fixes and improvements to ensure a more seamless and efficient user experience.
### December, 2025 [#december-2025-1] **v2.9.0 (Android)** This version includes: * **Multi-lingual support for the app via B2TRANSLATE** The app now supports localization in **14 languages** via [B2TRANSLATE](https://docs.b2translate.b2broker.com/). The key benefits include: * Offering the same language options on the app as in the B2CORE UI. * Customizing translations for each of the supported languages via B2TRANSLATE. * Maintain translations for both the app and the B2CORE UI using a single tool: B2TRANSLATE. * Improving scalability and client satisfaction by removing language barriers. The integration is already in place, but translations for the supported languages need to be added to B2TRANSLATE. Full localization will become available once this process is completed. * **Streamlined Total balance calculation** The total balance shown on the app **Dashboard** now reflects the combined balances of all wallets and trading accounts and fully matches the total displayed in the B2CORE Web. * **Rejection reasons in transaction details** For transactions rejected by admins, the rejection reason is now clearly displayed in the transaction details. Rejection reason * **Support for copy trading, PAMM, and MAM** Copy trading, PAMM, and MAM functionality from **B2COPY** is now supported in the app via a web view. This enables clients to access these services directly from the app, through the **Services** section. * **Static payment details for deposits via B2BINPAY V3 and Coinsbuy V3** The app now supports **static payment details** for deposits via **B2BINPAY** and **Coinsbuy** when connected through **API V3**. With static payment details, clients can generate one or more blockchain-specific deposit addresses directly in the app. These addresses are saved for future use and can be reused for subsequent deposits. In addition, the crypto deposit flow via **B2BINPAY V3** and **Coinsbuy V3** has been improved with clear **fee breakdowns** and **indicative amount** displays, providing better transparency and a smoother deposit experience. * **Full B2TRANSLATE integration for payment forms** Payment forms in the app are now fully integrated with [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly Weblate). Labels for all components of dynamic forms for PSS-connected deposit and withdrawal methods, as well as validation error messages, can now be customized and translated into multiple languages via B2TRANSLATE. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ### September, 2025 [#september-2025-1] **v2.8.0 (Android)** This version includes: * **Google Play app deployment** It’s now possible to deploy and publish your app on **Google Play**, making it easy for clients to download, install, and receive future updates directly from the store. * **PSS deposit & withdrawal methods now in the app** Withdrawal methods configured via the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) in the Back Office are now available in the app. This completes support for both **deposit methods**, which were previously integrated, and **withdrawal methods** connected through PSS.
Ar Ch
* **Full Profile information** The **Profile** > **Profile** info section in the app now fully aligns with the B2CORE UI, with added fields for **Name**, **Email**, **Date of Birth**, **Country**, **Phone**, **Client ID**, and **Nickname**. Sensitive data is masked by default with reveal-on-click, while **Nickname** can be updated directly in the app. Profile Info * **Device management for enhanced security** In **Profile** > **Security**, a new **Device management** section has been added. It displays log data about devices, IP addresses, and locations used to sign in to their profiles, and allows clients to terminate their current active session directly from the app. This gives clients better control over sessions and helps protect against unauthorized access.
Device management Device details Terminate session
* **Streamlined 2FA setup with Google Authenticator** The process of enabling 2FA via the **Google Authenticator** app has been simplified, with fewer steps and a more intuitive flow. 2FA setup * Fixes and improvements to ensure stable performance and reliability. *** ### August, 2025 [#august-2025] **v2.7.0 (Android)** This version includes: * **Feedback form** Users can now share their experience directly in the app. The feedback form automatically appears after several app launches or whenever a financial operation is performed, allowing a quick positive or negative rating with an optional comment. Feedback can also be submitted anytime from the **Profile** menu.
Feedback form Feedback after a withdrawal
* **UI improvements** The app’s appearance has been enhanced for a visually cleaner and more polished experience, with refreshed sections and improved widget layouts: * More rounded design of UI elements * Refreshed **Total Balance** and **IB** sections * Improved layouts for **Last Transactions** and **Wallets** widgets. Dashboard * Improved performance and stability for a faster, more reliable experience. *** ### June, 2025 [#june-2025-1] **v2.6.0 (Android)** This version includes: * **Deposits methods configured via PSS now supported in the app** Deposit methods configured in the Back Office through the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) are now accessible to users directly within the app. Please note, withdrawal methods via PSS aren’t yet supported in the app. * **Bonuses now available in the app** Users can now view and subscribe to bonus programs on **MT4/5** and **cTrader** directly in the app. If a user doesn’t have a suitable trading account, the required account can be created during the subscription process. Once the program requirements are met, the bonus amount is credited to the user’s balance and becomes available for withdrawal.
Bonus programs Active bonus programs Subscribe to a bonus program
* **Services: All key features in one place** A new **Services** section has been added to the app, providing users with centralized access to all available services and features. Each service is represented as a tile that redirects to its respective menu. Tiles can be easily rearranged using drag and drop. Services * **Support for custom tiles in Services** Custom tiles can be added to the **Services** section to link users to third-party services or external resources that support your business. Configuration must be done in the **Back Office**, where the tile name and redirect URL must be specified. Once configured, custom tiles will appear in the app under **Services**. In the Back Office, the option to configure custom menu links will become available with the [June 2025 release](release-notes#june-2025). * **In-app verification via SumSub** The full verification process via **SumSub** is now supported directly within the app, no external redirections are required. This streamlined experience makes the KYC journey faster, and more intuitive during onboarding. * **Blockchain explorer link for withdrawal tracking** Users can now easily track **withdrawal transactions** on the blockchain directly from the app. Crypto wallets include a link to `https://www.blockchain.com/explorer`, available only for withdrawals in Bitcoin, Ethereum, and Bitcoin Cash. This simplifies transaction monitoring and enhances transparency. Blockchain explorer link * Optimized overall app performance to provide a faster, more stable, and responsive user experience. *** ### May, 2025 [#may-2025] **v2.5.0 (Android)** This version includes: Performance improvements and bug fixes to enhance the overall user experience. *** ### April, 2025 [#april-2025] **v2.4.0 (Android)** This version includes: **Revamped sign-up and onboarding process** * **App preview**: before going to the **Sign Up** or **Sign In** forms, clients are now presented with a brief walkthrough highlighting the app’s main features across several screens. It enhances the user journey from the start, encouraging quicker sign-ups.
Make flexible deposits All wallets in one place All account operations Track every wallet easily
* **Improved design**: the **Sign Up** and **Sign In** forms have been redesigned to offer a smoother and more intuitive user experience.
Sign In Sign Up
* **Enhanced security**: for quicker and more secure access to the app, clients are now prompted to enable biometric authentication using their fingerprint during onboarding. If a client hasn’t previously set up fingerprint authentication, this step will be included during sign-in. Once enabled, fingerprints can also be used to confirm payments within the app. Clients can manage this feature anytime in **Profile** > **Settings**.
Enable fingerprint authentication Use fingerprint to confirm payments
* **Verification**: an additional **verification step** is now included in the onboarding process, encouraging clients to complete KYC immediately after sign-up. This enhancement streamlines the process, enabling clients to access full functionality, make their first deposit, and start trading faster. Complete verification * The app has been optimized to deliver a faster, more stable, and responsive experience. *** ### March, 2025 [#march-2025-1] **v2.3.0 (Android)** This version includes: * **Internal transfers** The app now supports internal transfers, enabling clients to transfer funds to other clients within the same brokerage by specifying the **Client ID** and **Account ID** of the recipient. The funds are transferred instantly and without commission. Internal transfers in the app * **Enhanced security with withdrawal address whitelisting** Secure your withdrawals by enabling the **Withdraw Whitelist** option in the **Security** section and adding trusted withdrawal addresses. Once enabled, funds can only be withdrawn to the specified addresses, preventing unauthorized transactions. Withdrawal whitelists in the app * **One-click access to trading** Clients can now access the MT4, MT5, and cTrader trading terminals by tapping **Trade** from their accounts in the app, making trading more convenient. To enable this feature, specify the **Web Terminal URL** in the platform details upon navigating to **Products** > **Platforms** in the B2CORE Back Office (for details, refer to [How to enable one-click trading access from the B2CORE UI and mobile app](../how-to-articles/manage-platforms/how-to-enable-one-click-access-to-web-trading-terminals)). Trade button on account cards *** ### December, 2024 [#december-2024-1] **v2.2.0 (Android)** This version includes: * **Introducing Brokers (IB)** The IB functionality is now supported in the app, making it easier to manage your referral activities. With this update, you can: * **Explore and join IB programs**: view all available IB programs and join new ones using the **IB Program** widget on the **Home** screen. * **IB clients**: view a list of your referred clients, organized across different levels. * **Track IB rewards**: monitor your earned rewards and view payment details. Additionally, you can track your IB wallet balance and make withdrawals directly from the app. * **Customize IB referral links**: configure referral link parameters for each program in the **Advanced Link** section to optimize your referral strategy. * **Enhancements to trading accounts** More options for MT4/5 and cTrader accounts are now available in the app, including: * **Essential account parameters**: view such parameters as Balance, Equity, Free Funds, Credit, and Leverage directly in the account details. * **Equity chart**: analyze account performance with the Equity chart, now available for daily, weekly, and monthly periods. * **Expanded trading data**: access more detailed trading data with the **Pending orders**, **Open positions**, and **Trading history** tabs. * The ability to archive trading accounts. * The ability to rename accounts for better organization. * Bug fixes and interface improvements to deliver a more seamless and user-friendly experience. *** ### November, 2024 [#november-2024] **v2.1.0 (Android)** This version includes: * **Support for exchanges** Exchanges are now accessible in the **Finance** section, enabling you to convert between different currencies, including fiat to crypto, and vice versa. When making exchanges, you can view real-time rates and refresh them as needed to stay up-to-date with the latest rates for your transactions. * **Integration with Zendesk** With the integration of Zendesk customer support, you can now easily create, submit, and track your support tickets directly from the **Profile menu** in the app. To use Zendesk in the app, the Zendesk configuration must be set up in the Back Office. This includes establishing an external connection to Zendesk and following the steps to [switch from SupportPal](../how-to-articles/manage-system-settings/how-to-switch-from-supportpal-to-zendesk) if it was previously used. * **Favourite wallets** You can now add wallets to your favorites in the app, making it easier to organize and access them quickly. * **More options for trading accounts** The options to rename your trading accounts and archive them are now available in the account details, giving you more flexibility in managing your accounts. * Bug fixes and performance enhancements have been implemented to deliver a smoother and more responsive user experience. *** ### October, 2024 [#october-2024] **v2.0.0 (Android)** This version includes: * **Support for MT4/5 and cTrader accounts** You can now open demo and live MT4/5 and cTrader accounts in the app, deposit and withdraw funds to/from your accounts, and monitor account trading parameters, such as balance, equity, credit, and free margin in real time. * **Transaction History section added** View your full deposit, withdrawal, and transfer history, along with detailed information for each transaction, in the new Transaction History section. * **Password change for profile security** Providing a convenient way to keep your profile secure, the Security section now includes an option to change your profile password. * **Sign in to the B2CORE UI with QR codes** You can now use the app where you’re already signed in to scan QR codes on the B2CORE UI **Sign In** page, allowing access without the need to enter your credentials. *** ### September, 2024 [#september-2024] **v1.0.0 (Android)** We're excited to announce the release of the B2CORE app for Android, which you can launch as your own branded app. This allows you to offer your clients an additional platform to access the B2CORE functionality. **App download** Currently, Android apps are available for download and installation via APK files. To make the APK available for download from your B2CORE UI, refer to [How to configure settings for mobile app downloads](../how-to-articles/manage-system-settings/how-to-configure-settings-for-mobile-app-downloads). This version includes: * **Registration** Registration through the app is available by clicking the Sign Up option on the Start screen. * **Dashboard** The Dashboard appears after signing in to the app, displaying the Total Balance, Last Transactions, and Wallets widgets, with banners at the top. * **Profile menu** Accessible by tapping the top left corner of the screen, the Profile menu enables you to: * upload profile photos * view your current verification levels and complete KYC verification to reach higher levels * access security settings, such as 2FA via Google Authenticator or SMS, anti-phishing codes, and more * displays the app version and a list of custom links to additional resources. * **Wallets** Displays a list of your wallets, grouped into crypto and fiat categories. At the top, the estimated total across all wallets, converted to USD, is shown. From this section, you can deposit, withdraw, and transfer funds. By tapping a wallet, you can view detailed information, including the available balance, amount on hold, and transaction history. * **Finance** This section is intended for deposits, withdrawals, and transfers. Recent transactions are displayed under each transaction type, allowing you to quickly initiate new ones with pre-filled fields based on previous transactions. * **Trading** This section supports the B2TRADER Spot Brokerage Platform, providing access to its extensive trading features and functionalities.
## June 30, 2026 [#june-30-2026] ### New features [#new-features] #### Per-blockchain crypto deposit and withdrawal commissions [#per-blockchain-crypto-deposit-and-withdrawal-commissions] For **B2BINPAY** and **Coinsbuy**, brokers can now configure limits and commissions separately for each blockchain network (for example, ERC-20 vs. TRC-20 for USDT) instead of one flat rate per currency. Clients choose their network and see the exact fee and the expected credited or payout amount before confirming, giving brokers accurate pricing of network costs and clients full fee transparency up front. #### CPA programs for Introducing Brokers [#cpa-programs-for-introducing-brokers] B2CORE now supports **CPA (Cost-Per-Acquisition)** programs and payment plans for Introducing Brokers, letting brokers set up flexible, rules-based partner compensation instead of a one-size-fits-all model. A CPA program is now bound directly to a partner program, so partners are rewarded automatically the moment they join a program with CPA attached – removing manual per-referral-link setup and reducing configuration errors. New API endpoints power the CPA widget and reports for partners. #### B2TRADER web terminal access [#b2trader-web-terminal-access] Brokers can now configure a **web terminal URL** for the B2TRADER platform, just as they already can for other platforms, giving clients one-click access to the trading terminal directly from the client portal. #### IB Trades reconcile process [#ib-trades-reconcile-process] A lighter-weight **reconcile** option has been added to the trade-sync process. It re-sends only the trades that failed to deliver instead of resyncing everything, giving brokers a faster, safer way to close data gaps after an outage without the impact of a full resync. ### B2CORE UI updates [#b2core-ui-updates] * During sign-up, the **country** field is now pre-filled automatically based on the visitor's detected location, reducing manual entry for new clients. * The client portal now detects the interface **language from the browser**, so new visitors see the portal in a familiar language from the start. * The simplified registration form is now split into **multiple pages**, making longer sign-up flows easier to complete. * A **"Coming soon"** screen can now be shown for features that are not yet available in a broker's setup. ### Payment system updates [#payment-system-updates] * **Volet** is now available to all brokers by default. * For **B2BINPAY** and **Coinsbuy**, deposit address destinations are now supported and a custom **blockchain label** can be shown in the payment details, making crypto deposits clearer for clients. * For **Flutterwave**, brokers can now choose whether the settled amount or the charged amount is used for a transaction via a new configuration option. * A **test connection** action has been added for the CoinsBuy V3 rate provider, so brokers can verify the integration directly from the Back Office. ### Improvements [#improvements] * **IB restrictions** are now applied to deposit and payout methods, so partners and their clients only see the payment options available to them. * The **Back Office dashboard** now supports filtering, including by client type, jurisdiction, and country, making it easier to focus on a specific segment. * Navigation between methods and operations grids in the payment configuration has been improved for faster back-office work. * Payment system configuration now shows a **fingerprint and masked preview** of secret fields, so operators can confirm which credential is stored without exposing it. * A client's **jurisdiction** set manually is now locked from automatic country-based mapping, with a clear indicator and an easy way to release it. * The precision of **FIAT currencies** can no longer be edited, preventing accidental misconfiguration. * Changing a client's **email** now propagates the update to B2TRADER, keeping platform records in sync. * For **cTrader**, product currencies are now filtered by the cBroker's deposit assets, so only relevant currencies are offered. * New Back Office API endpoints let integrators write client **marketing data**, and a new `/api/v2/countries` endpoint returns the country list. * Performance has been improved across data exports, the deposits and payouts lists, the clients API, IB payment tables, and large CSV imports, making these operations faster and more reliable at scale. ### Deprecated functionality [#deprecated-functionality] * The legacy **Volet** and **BFT365** payment provider integrations have been removed. They are superseded by the new PSS-based connections. ### Resolved issues [#resolved-issues] * Saving a corporate client's profile no longer overwrites a manually set jurisdiction via automatic country mapping, preventing clients from being placed under the wrong regulatory entity. * Decimal commission values are now accepted on the transaction update endpoint. * For Introducing Brokers, B2TRADER transactions now fall back to the account currency when needed, and per-account trading volume and rewards are correctly scoped to the viewing partner. * IB report and account filters now accept alphanumeric IDs. * The IB payment export preview table is now horizontally scrollable, so wide exports are easier to review. ## May 31, 2026 [#may-31-2026] ### New features [#new-features-1] #### Built-in brand-new identity provider [#built-in-brand-new-identity-provider] B2CORE now ships with its own built-in identity provider. Brokers can let clients sign up and log in with **Apple**, **Google**, or any other **OIDC-compliant** provider, offering a faster, more familiar sign-in experience. **Passkeys** are now supported as well, giving clients a secure, passwordless way to sign in. B2CORE can also act as a trusted identity provider itself, so third-party and in-house apps can offer a "Log in with B2CORE" option and authenticate clients via OIDC without managing separate credentials. The migration to the new identity provider has already started and will be completed for all brokers by the end of June 2026. #### B2CONNECT integration [#b2connect-integration] B2CORE now integrates with **B2CONNECT**, B2Broker's multi-asset liquidity and trading connectivity hub. Brokers can connect B2CORE directly to B2CONNECT as a trading platform, letting their clients access B2CONNECT-powered instruments and liquidity from within B2CORE. ### B2CORE UI updates [#b2core-ui-updates-1] * Embedded custom pages (iframe menu entries) now follow the client's selected interface language, so third-party tools open in the same language as the rest of the portal. * The trading platform password is now shown to the client once after an account is created, making it easier to save credentials for platforms that require them. Available for MT4/MT5. * A new immediate verification flow can be enabled to prompt clients to complete KYC right after a call to action, helping move new sign-ups through verification faster. ### Payment system updates [#payment-system-updates-1] * A **system precheck** has been added to the payout approval flow. Withdrawals are now validated against the PSS payment layer before they are processed, reducing the risk of approving payouts that would later be rejected downstream in PSP. * For **B2BINPAY** and **Coinsbuy**, the reverse exchange rate is now calculated for conversions, and the redundant **Label** field has been removed from the withdrawal form. * For **PayRetailers**, deposit and withdrawal status changes are now received via webhook notifications, keeping transaction states up to date automatically. * For **BridgerPay** card withdrawals, the email field is now always mandatory and the first and last name are pre-filled, reducing failed payout attempts. * For **Volet** bank-card withdrawals, additional form validation and the cardholder address have been added. ### Improvements [#improvements-1] * **Idempotency keys** are now supported on the `makeDeposit` and `makeWithdrawal` API endpoints as well as the Back Office manual deposit and withdrawal forms. Retried requests safely return the original transaction instead of creating a duplicate, giving integrators reliable retry behavior. * Account **auto-creation rules** have been reworked into a dedicated section with explicit per-trigger options, giving brokers clearer, more granular control over when trading accounts are opened automatically for clients. * For crypto payouts via **PSS**, the destination wallet address is now verified through SumSub and validated against the client's whitelist, adding protection against withdrawals to unauthorized addresses. * On the create-exchange form, operators with the appropriate permission can now enter the exchange rate manually, giving full control over admin-initiated conversions. * For **TradeLocker**, hedging is now enabled for all products and currencies. * The **Transactions** table now includes source and destination account number columns, and account numbers are now shown in the transfer account selectors, making it easier to identify the accounts involved. * Manual deposit creation now supports **invoice** and **transaction ID** fields for better reconciliation. * Contact synchronization with **ActiveCampaign** and **SendGrid** is now scheduled automatically, keeping marketing audiences up to date. * For KYC via **iDenfy**, a verification started on desktop and continued on mobile is now finalized automatically via webhook, smoothing the mobile hand-off. * Phone numbers received from **SumSub** are now marked as confirmed, so clients don't have to re-verify a number that has already been validated during KYC. * The **Back Office** now shows a clear "Access denied" message when a user without the required permission tries to change a client's verification level or rights. * Via the API, platform credentials can now be supplied when creating an account, and `api/v2/accounts` now returns and can be sorted by `updateTime`. * The registration date-of-birth field now restricts entries to a reasonable date range, reducing invalid sign-up data. ### Deprecated functionality [#deprecated-functionality-1] * The **Clients** > **Services** feature has been removed from the Back Office. * The **System** > **Localizations** section has been removed, along with the legacy language management it relied on. Languages are now managed entirely through B2TRANSLATE. ### Resolved issues [#resolved-issues-1] * Admin-initiated exchanges are no longer silently saved at a rate of 1.0 when the rate provider is unavailable; the operation now uses the correct rate. * For **cTrader**, a local copy of the country list is now used, avoiding errors when the external list is unavailable. * The **Centroid** free-funds calculation has been corrected. * The audit journal widget now shows all changed fields for an action. * Deleted clients are now excluded from the phone-number uniqueness check, so a new client can reuse a number freed up by a removed account. * Several incorrect language and locale codes and names have been fixed. * The granularity of the equity graph across time periods has been corrected. ## April 30, 2026 [#april-30-2026] ### New features [#new-features-2] #### New PS integrations [#new-ps-integrations] Support for the following new payment systems has been added: * **Columis** – with support for deposits * **Volet** – with support for deposits and withdrawals #### Intercom helpdesk integration [#intercom-helpdesk-integration] B2CORE now integrates with **Intercom**, allowing brokers to offer in-app live chat and support to their clients across the web, iOS, and Android apps. The Intercom authentication is handled securely on the server side, so credentials are never exposed to the client. #### New email template system [#new-email-template-system] A redesigned email template system has been introduced. Brokers can now customize the default transactional emails – such as welcome messages and notifications – directly from the Back Office, making it faster to match emails to their brand without developer involvement. All the email templates will be migrated there soon. #### Embeddable custom pages in the client portal [#embeddable-custom-pages-in-the-client-portal] Brokers can now embed their own or third-party pages directly in the B2CORE client portal as custom menu entries, choosing whether each entry opens in the same tab, a new tab, or an embedded iframe. A new authentication endpoint lets those embedded services securely identify the signed-in client without requiring a separate login. For details, refer to [How to integrate your app as iframe in B2CORE](../how-to-articles/manage-system-settings/how-to-integrate-your-app-as-iframe-in-b2core). ### B2CORE UI updates [#b2core-ui-updates-2] * B2TRADER Trading accounts now expose a dedicated, human-readable **display number**, shown consistently across the client portal, the Back Office, and data exports. * A **login button** has been added to the sign-up page, making it easier for returning clients to switch to the login screen. ### Payment system updates [#payment-system-updates-2] * For **B2BINPAY** and **Coinsbuy**, the EUROC stablecoin is now recognized under its updated **EURC** ticker, ensuring the currency is displayed and processed correctly. * For **BridgerPay**, the last four digits of the card are now stored and shown in the withdrawal payment snapshot, making it easier to identify the card used for a payout. ### Improvements [#improvements-2] * **Hint support** has been added to form fields and payment system configuration fields, so brokers can show inline guidance to clients on deposit and withdrawal forms and reduce support requests. * A **jurisdiction** filter has been added to the **Finance** section, helping brokers that operate across multiple legal entities narrow down financial records by jurisdiction. * For KYC via **SumSub**, the questionnaire answers submitted by a client are now visible in the Back Office. * The permission to update a client's **verification level and rights** is now separate from the general client-info read permission, so brokers can grant or restrict this capability to back-office users independently. * **Active Campaign** connections can now be tested directly in the Back Office with a check-connection action. * An **Apple touch icon** can now be configured under visual customization, so the B2CORE UI shows a branded icon when clients add it to their home screen. ### Deprecated functionality [#deprecated-functionality-2] * Several legacy payment provider integrations that are no longer supported have been removed, having been superseded by PSS-based connections. These include **SticPay**, **Sqala**, **Help2Pay**, and **KoraPay**. ### Resolved issues [#resolved-issues-2] * For **MT4/MT5**, the client's country is now mapped using each platform's own country dictionary, ensuring the correct country is sent to the trading platform. * Login push notifications now display human-readable text instead of raw codes. * Newly created accounts now appear in the account list immediately after creation. * Currency icon spacing has been fixed in right-to-left (RTL) layouts. * Withdrawal amount validation has been corrected. * The **Transfers** export now correctly populates the internal client type and includes client tags. * In **Savings**, the "hide unavailable programs" filter now also hides programs the client doesn't have enough balance to join. ## March 31, 2026 [#march-31-2026] ### New features [#new-features-3] #### Simplified registration flow [#simplified-registration-flow] A new, streamlined registration flow is now available, designed to reduce friction during onboarding and help new clients sign up faster. Brokers can enable and configure the simplified flow through the corresponding settings in the Back Office. ### B2CORE UI updates [#b2core-ui-updates-3] #### Calculator for crypto deposits [#calculator-for-crypto-deposits] A calculator has been added to the static deposits flow in the B2CORE UI. Before completing a deposit, clients can now estimate the amount and review conversion details, making deposits via static payment methods clearer and more predictable. ### Payment system updates [#payment-system-updates-3] * For crypto deposits via **B2BINPAY** and **Coinsbuy**, the network protocol is now displayed alongside the blockchain name (for example, Ethereum (ERC-20), BSC (BEP-20), or TRON (TRC-20)). This helps clients select the correct network and reduces deposit errors. * For **KoraPay** bank account withdrawals, the destination country can now be configured, so the correct list of banks is shown per country. This enables local bank withdrawals across additional African markets such as Nigeria and South Africa. * For **BridgerPay**, a deposit method can now be configured to open the checkout directly to a single payment option – such as credit card, wire transfer, or crypto – giving brokers tighter control over the deposit experience. * For **Sqala**, a human-readable **Code to pay via PIX** field has been added to PIX deposits, making it easier for clients in Brazil to identify and copy the correct payment code. In addition, the platform-side minimum and maximum amount limits for BRL transactions via Sqala have been removed. ### Improvements [#improvements-3] * A new **color scheme generator** has been added to visual customization, making it easier to produce a consistent, branded set of theme colors for the B2CORE UI. * A new option has been added to external connections to control whether an integration's key is shared with the B2CORE UI for client-generated events. For analytics connections such as **RudderStack**, disabling it keeps the key out of the public system-info endpoint, preventing misuse. * The client **jurisdiction** is now included in key financial reports (such as the Client Finance, Transaction, and Balances reports) as well as in the **Deposits**, **Payouts**, **Transfers**, and **Exchanges** export files, helping brokers that operate across multiple legal entities identify each client and transaction at a glance. * In **Bonuses** > **Bonus distribution**, the bonus name filter has been replaced with a text search, allowing operators to quickly find specific bonus programs by name. * The temporary bonuses list can now be filtered to show only unclaimed programs, so clients always see the offers still available to them. * The **Transactions** export now includes all records rather than only the currently visible page, bringing it in line with the other **Finance** sections. * The KYC upload form now validates the minimum required number of files before submission, showing clients an immediate, localized message if they haven't uploaded enough documents. * Clients can no longer submit more than one account deletion request at a time; if a request is already pending, a new one can't be created. ### Deprecated functionality [#deprecated-functionality-3] * The **Mailing** > **Marketing** feature has been removed from the Back Office, following the deprecation notice introduced in the previous release. ### Resolved issues [#resolved-issues-3] * The default cryptocurrencies list now uses the correct precision values. * In **Savings**, the preset name is now validated when a preset is updated. * The language dropdown in the B2CORE UI now preserves the order defined on the server instead of re-sorting the languages alphabetically. ## February 28, 2026 [#february-28-2026] ### New features [#new-features-4] #### New PS integrations [#new-ps-integrations-1] Support for the following new payment system has been added via **PSS**: * **We Payment** – with support for deposits and withdrawals #### Acuity Trading integration [#acuity-trading-integration] B2CORE now integrates with **Acuity Trading**, a provider of market analysis tools and trading signals. Once configured, brokers can offer their clients access to Acuity Trading research and analytics directly within B2CORE, enriching the trading experience and expanding the product offering. #### Adjust analytics integration [#adjust-analytics-integration] B2CORE now supports integration with **Adjust**, a mobile measurement and marketing analytics platform. When configured, B2CORE sends attribution and event data from the B2CORE UI, iOS, and Android apps to Adjust, helping brokers track user acquisition and measure the performance of their marketing campaigns. #### Journal log in the Back Office [#journal-log-in-the-back-office] A new **Journal log** is now available in the Back Office, starting with the client details. It provides a full audit trail showing who created, updated, or deleted a record and what exactly was changed, along with the actor and timestamp for each event. The journal is available to Back Office users assigned the corresponding permission. #### Redesigned Restrictions management [#redesigned-restrictions-management] The interface for managing restrictions has been reworked. A dedicated **Restrictions** tab is now available on the product editing page in the Back Office, listing all active restrictions – such as allowed countries and required verification levels – so admins can quickly see who is eligible for a product without leaving the page. #### Access restrictions for savings presets [#access-restrictions-for-savings-presets] Savings presets can now be configured with access restrictions by **client type**, **jurisdiction**, **country**, and **verification level**, similar to the restrictions already available for products and bonuses. Clients who don't meet the criteria won't see the preset, helping brokers comply with regulatory requirements across different jurisdictions. ### B2CORE UI updates [#b2core-ui-updates-4] * The deposit and withdrawal flows in the B2CORE UI have been further streamlined for a smoother and more intuitive experience. * Clients can now select a **preferred currency** for demo accounts. * The display density of tables has been improved for better readability, and the adaptive layout of the **Profile info** section has been refined for smaller screens. ### Payment system updates [#payment-system-updates-4] * The blockchain **transaction ID (hash)** is now saved and displayed in the deposit and withdrawal details in the Back Office, and is also available via the Back-Office API. This makes it easy to look up crypto transactions directly on the blockchain. * New Back-Office API v2 endpoints allow payment assistance applications – for deposits, withdrawals, and static deposits – to be moved between the **In Progress**, **Success**, and **Failed** statuses programmatically, enabling more automated payment operations. ### Improvements [#improvements-4] * Back Office users with the appropriate permission can now **delete incorrectly uploaded client documents** directly from the **Clients** > **Documents** table, removing the need to contact the support team for document cleanup. * The **Documents** table now includes **Uploaded by** and **Uploaded at** columns, with sorting and filtering, so admins can easily see who submitted each document and when. * For KYC via **SumSub**, clients who receive a final rejection now retain the ability to attempt verification again. A new option, **Allow new verification tries on reject**, controls this behavior in the SumSub connection settings. * The **Mobile description** field for verification levels now accepts **HTML** content, allowing brokers to craft richer descriptions shown to clients in the mobile apps. * Client tags linked to a jurisdiction are now automatically assigned or updated when a client's country changes, when they complete KYC, or when an admin applies jurisdiction changes to all clients. Tags set manually and unrelated to jurisdictions are preserved. * Data exports have been made more reliable with improved error handling and logging, and large high-precision numbers are now correctly handled in deposit and payout exports. * The Back-Office API endpoint for clients (`/api/v2/clients`) now supports sorting by **update time** in addition to creation time, enabling better synchronization workflows. * Overall platform performance has been improved: backend applications have been moved to a new, modern application server for faster API responses, and rate caching for the account total-balance endpoint has been optimized. ### Deprecated functionality [#deprecated-functionality-4] * A number of legacy payment provider integrations that are no longer supported have been removed. These have been superseded by PSS-based connections and include: AlgoGateway, ExLink, ChipPay (payout), PayRetailers, BitWallet, Payelata, NicePay, ISmartPay, EeziePay, NinePay, Chillpay, Epay, POLiPay, PayTrust88, SolidPayments, RpnPay, Axcess, LionPay, and Ozow. * As part of the ongoing move away from SMS-based authentication, the phone confirmation step has been removed from the registration wizards. New clients are no longer asked to confirm their phone number via SMS during registration. * A deprecation notice has been added to the **Mailing** > **Marketing** section in the Back Office. ### Resolved issues [#resolved-issues-4] * Quiz and test details are now returned with the correct translations in all enabled languages. * The translations of SumSub KYC field names in the Back Office have been improved. * On the **Transfers** page, the swap option is now disabled for clients who don't have the corresponding permission. * Savings plans without a matching preset are now handled correctly. * Validation on the PSS withdrawal form has been fixed for cases involving different currencies. * For **PayRetailers**, the deposit status is now recognized correctly (CANCELED is treated as CANCELLED). ## January 31, 2026 [#january-31-2026] ### New features [#new-features-5] #### Rate providers management via the Back-Office API [#rate-providers-management-via-the-back-office-api] New Back-Office API v2 endpoints have been added to list rate providers and update custom rate values. This enables brokers to programmatically manage and override the exchange rates used in B2CORE, simplifying integration with external rate sources and automated workflows. #### Backend analytics events for RudderStack [#backend-analytics-events-for-rudderstack] When **RudderStack** is configured as an external connection, B2CORE now automatically sends key backend events – such as deposits, withdrawals, sign-ups, and verification decisions – to the platform. This complements the existing front-end analytics and provides a more complete view of client behavior for brokers relying on RudderStack. ### B2CORE UI updates [#b2core-ui-updates-5] #### Cookie consent [#cookie-consent] A cookie consent modal window has been added to the B2CORE UI, allowing clients to review and accept the use of cookies in line with privacy requirements. ### Payment system updates [#payment-system-updates-5] * Payment forms for PSS methods now automatically pre-fill known client data, such as name, email, and address, from the client profile. Clients no longer need to re-enter information they have already provided when making deposits or withdrawals. * For **KoraPay**, withdrawals to bank accounts have been improved for more reliable processing. * **PaymentAsia** now supports the **MXN** (Mexican peso) currency code. ### Improvements [#improvements-5] * Backend images, including logos for the **Sign In** page and the menu header, are now managed from the **System** > **Visual customization** menu in the Back Office instead of a separate section. Logos for the login background and the platform logo can now also be uploaded in **SVG** format. * Login security notifications have been improved to reduce spam. Clients are now alerted only when a sign-in occurs from a **new device** or **new IP address**, rather than on every login, making security alerts more meaningful. * Disabling a client's TOTP (authenticator app) two-factor authentication from the Back Office is now correctly synchronized, ensuring the change is reliably applied and the client is no longer prompted for 2FA. * When using **Zendesk** with the B2CORE mobile apps, support requests are now routed through the correct messaging channel, ensuring mobile clients reach the right support queue. * It's now possible to add comments to external connection form groups in **System** > **External connections**, making configurations easier to document and maintain. * The performance of filtering transactions by **client** and **type** on the **Finance** pages has been optimized, and retrieving ignored symbol groups for bonuses now works faster. * A clear error message is now displayed when an operation can't be completed because the account lacks deposit or withdrawal rights. ### Resolved issues [#resolved-issues-5] * Custom menu items for the B2CORE UI can now be edited correctly, and creating a child menu item no longer fails in **Promotion** > **Menu**. * Multi-select controls in **System** > **External connections** now work as expected. * Exporting data from the **Bonuses** section now completes successfully. * The position of banners in the B2CORE UI has been corrected. * Default values for the text and button text are now set when creating announcements. ## December 18, 2025 [#december-18-2025] ### New features [#new-features-6] #### New PS integrations [#new-ps-integrations-2] With this release, support for the following new payment systems has been added via **PSS**: * **LuqaPay** – with support for withdrawals only * **Visionpay (HILZI)** – with support for deposits and withdrawals * **Ozow** – with support for deposits only * **B2BINPAY** (via API v3) – with support for static deposits and withdrawals * **Coinsbuy** (via API v3) – with support for static deposits and withdrawals #### Salesforce integration [#salesforce-integration] B2CORE now supports **Salesforce** integration, enabling seamless syncing of client data from the B2CORE Back Office to Salesforce. This allows you to centralize client information and leverage Salesforce tools for your business processes. For details, refer to [How to integrate Salesforce](../how-to-articles/manage-system-settings/how-to-integarte-salesforce). #### Twilio SendGrid integration [#twilio-sendgrid-integration] B2CORE now integrates with **Twilio SendGrid**, enabling automatic syncing of client data from the B2CORE Back Office to SendGrid contacts. This integration allows you to manage email delivery, marketing campaigns, contact segmentation, and related communication tasks directly through SendGrid. For details, refer to [How to integrate Twilio SendGrid](../how-to-articles/manage-communication-platforms/how-to-integarte-sendgrid). #### Address updates via the Profile in the B2CORE UI [#address-updates-via-the-profile-in-the-b2core-ui] Address updating can now be enabled for `individual` clients in the **Profile** menu of the B2CORE UI. To allow clients to change their country and residential address, configure the new **Address updating** option in **System** > **Settings** in the Back Office. This option enables you to choose how address changes are processed: * **Admin approval required**: an admin must approve the change via a client request in the Back Office. This option applies only when your KYC procedure *doesn’t include* address verification. * **Repeated verification required**: the client’s verification level is reset, and they must complete KYC again with the new address. This option applies only when your KYC procedure *includes* address verification. For more details, refer to the [Client profile](../back-office-guide/system/settings#client-profile) section in the **System** > **Settings** documentation. #### New notifications in the bell icon in the B2CORE UI [#new-notifications-in-the-bell-icon-in-the-b2core-ui] The **bell** icon in the top bar of the B2CORE UI and mobile app now displays a counter of new notifications and opens the **Notifications** panel when clicked. With this release, the panel shows alerts about **new login attempts**, **new login devices**, and **changes to passwords** or **2FA methods**, all grouped under the **Security** category. From the panel, clients can open the **Notifications** page, where they can review all notifications, see full details, and quickly navigate to the **Security** section of their profiles. More notification types will be supported in future updates. Notifications in the bell icon ### B2CORE UI updates [#b2core-ui-updates-6] #### New All tab in Transaction History [#new-all-tab-in-transaction-history] In **Transaction History**, a new **All** tab has been added, allowing clients to view transactions of all types in one place and filter them by status. Transaction History #### Support for the Zendesk chatbot [#support-for-the-zendesk-chatbot] When using **Zendesk** as your HelpDesk system with B2CORE, you can now enable the Zendesk chatbot in the B2CORE UI. This enhancement offers a more streamlined HelpDesk experience, allowing clients to ask questions, quickly find the information that they need, and seamlessly switch to a live operator, all without requiring additional authorization. For details, refer to [How to add Zendesk chatbot](../how-to-articles/manage-system-settings/how-to-configure-a-connection-to-zendesk#how-to-configure-the-zendesk-chatbot). #### Enhanced static Dashboard [#enhanced-static-dashboard] The static **Dashboard** with fixed widgets introduced in the previous release has been further enhanced to improve usability and clarity. **Last Transactions** * The widget is now displayed on the **Dashboard** only if the related **Transaction History** menu is enabled. If the menu is hidden, the widget won’t appear on the **Dashboard**. * Fiat currencies in the widget always use a precision of two decimals. All other currencies follow the decimal settings configured for each currency in the Back Office. * If a client has no transaction history, the **All** button is hidden from the widget. It becomes visible once transactions appear, allowing clients to view their full history directly from the widget. Dashboard with Transaction History **Portfolio** The tabs displayed in the widget now depend on whether the related **Wallets** and **Platforms** menus are enabled: * If both menus are enabled, the widget shows the **Wallets**, **Trading Platforms**, and **All** tabs, allowing clients to view their total portfolio value across all wallets and trading accounts. * If either menu is disabled, the corresponding tab is hidden from the widget. **Trading Accounts** The widget is displayed on the **Dashboard** only if the related **Platforms** menu is enabled. If the menu is hidden, the widget won’t appear on the **Dashboard**. Dashboard with Wallets and Trading accounts * **Automatic submission of verification code forms** In forms where verification codes are required to confirm actions, for example, signing in, changing a password, or others, the form is now automatically submitted once the code is entered, removing the need for clients to click the **Continue** button and making the process more seamless. ### Payment system updates [#payment-system-updates-6] #### Payment input snapshots [#payment-input-snapshots] In the B2CORE Back Office, it’s now possible to view the information that clients enter on the deposit and withdrawal forms when using **PSS** methods. This data helps admins to make informed decisions when approving or rejecting withdrawal requests and speeds up the investigation of potential payment-related issues. The information is available in the new **Payment input snapshot** section, which is added to: * Deposit details in **Finance** > **Deposits**. * Withdrawal details in **Finance > Payouts**. * Client requests in **Clients** > **Requests**, including: **Payout** requests, **PS Deposit Assistance** requests, and **PS Withdrawal Assistance** requests. #### Streamlined handling of PS Deposit Assistance requests [#streamlined-handling-of-ps-deposit-assistance-requests] When a **PS Deposit Assistance** request is triggered due to reaching a sync deadline with the respective payment system, a separate request is no longer created in **Clients** > **Requests**. Instead, such cases now must be handled directly in the deposit details, reducing the number of unnecessary assistance requests. #### Full B2TRANSLATE integration for payment forms [#full-b2translate-integration-for-payment-forms] Payment forms in the B2CORE UI and mobile apps are now fully integrated with [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly WEBLATE). Labels for all components of dynamic forms for PSS-connected deposit and withdrawal methods, as well as validation error messages, can now be customized and translated into multiple languages via B2TRANSLATE. This ensures consistent localization across all financial workflows. ### Improvements [#improvements-6] * The balance of source accounts is now checked when approving client requests for **transfers** and **internal transfers** to ensure sufficient funds are available. If the balance is insufficient for a transfer, the request can’t be approved, and the error message is displayed: `Application approve failed. Insufficient funds on source account`. * In **Bonuses** > **Bonus distribution**, a new **Created by** column has been added, displaying the emails and IDs of the Back Office users who added bonuses to clients. Clicking an ID opens the profile of the respective Back Office user. * The loading speed of the **Finance** > **Exchange** page in the Back Office has been significantly improved, especially for large data volumes. Exporting exchange data from the same page has also been accelerated. * Visibility of items in the main menu of the B2CORE UI can now be restricted based on a client’s **jurisdiction** and **country**, allowing more granular control over which features clients can access. ## October 1, 2025 [#october-1-2025] ### New features [#new-features-7] #### New PS integrations [#new-ps-integrations-3] Support for the following new payment systems has been added via **PSS**: * **Payrock** – with support for deposits and withdrawals * **Proxpay** – with support for deposits and withdrawals * **KoraPay** – the option for withdrawals to bank accounts has been added. #### Introducing static payment details for deposits [#introducing-static-payment-details-for-deposits] Starting with this release, deposit methods via integrated payment systems will gradually support **static payment details**. Previously issued payment information, such as crypto addresses or bank details, is saved for clients, allowing them to reuse it for deposits of different amounts at any time. In this release, **B2BINPAY** and **Coinsbuy** methods feature static deposit details. Clients can generate deposit addresses in the B2CORE UI, which are saved for future use, or create new blockchain-specific addresses, all stored for subsequent deposits. #### The Dashboard with key financial metrics [#the-dashboard-with-key-financial-metrics] The **Dashboard** now opens after signing in to the Back Office for users who are assigned the permission `Access to Finance Dashboard` under the **Statistics** category. The **Dashboard** displays key financial metrics, including **total deposits**, **total withdrawals**, and **net deposits**, helping users quickly review financial results and activity over the selected period (refer to [Dashboard](../back-office-guide/dashboard)). ### B2CORE UI updates [#b2core-ui-updates-7] #### Redesigned static Dashboard [#redesigned-static-dashboard] The B2CORE UI **Dashboard** has been redesigned to provide a clear, intuitive overview of a client’s portfolio and financial state. The **Dashboard** is now a fixed, non-customizable page with the following widgets: * **Portfolio**: shows the total balance with the ability to view allocation across wallets and trading accounts. The prominent **Deposit** button allows clients to add funds quickly. In addition, access to other financial transactions such as **Transfers**, **Exchanges**, and **Withdrawals** is available from the widget. * **Last Transactions**: shows a list of recent financial transactions along with their statuses for quick review and provides access to the full **Transaction History**. * **Trading Accounts**: displays active accounts, marked as favorites or accounts with non-zero balances, for easy access, and provides options to create a new account or go to trading with a single click. #### Clear display of verification request statuses [#clear-display-of-verification-request-statuses] For clients, it’s now easier to track the status of their verification requests. A new banner on the **Dashboard** and **Verification** page displays the pending status after a request is submitted and provides a direct link to the **Document verification** section, where clients can monitor their document statuses. #### More accurate indicative amounts for deposits and withdrawals [#more-accurate-indicative-amounts-for-deposits-and-withdrawals] The calculation of indicative amounts displayed to clients when initiating deposits and withdrawals in the B2CORE UI has been reworked. These amounts now more accurately reflect the final results that clients will receive after execution, taking into account commissions and exchange rates. ### Improvements [#improvements-7] * For **DXtrade**, it's become possible to add the **Account number prefix** when configuring a product in the Back Office. The prefix is added to the beginning of DXtrade account numbers to help distinguish, for example, live and demo accounts or accounts belonging to different brands within a single DXtrade infrastructure (refer to [How to integrate DXtrade](../how-to-articles/manage-platforms/how-to-integrate-dxtrade)). * For **ShuftiPro**, the document type `any` is now supported for address verification. It allows clients to submit any document containing their name and address, rather than a specific document type, making the KYC process more flexible and convenient (refer to [How to use ShuftiPro](../how-to-articles/manage-verification-options/how-to-use-shuftipro)). * Jurisdictions are now assigned to clients based on the combination of their **country** and **client type** as defined in the jurisdiction settings (refer to [Jurisdictions](../back-office-guide/clients/jurisdictions)). * PSS payment methods, including both deposits and withdrawals, are now supported in the mobile apps starting from version 1.30.0 (iOS) and 2.8.0 (Android). * Table loading in the Back Office has been optimized. In particular, the **Clients** > **Accounts** list now loads much faster, even when handling a large number of accounts. * For **Twilio** calls to clients from the B2CORE Back Office, you can now choose which phone number to use if you have several active Twilio numbers in your account. This enables you to select the most suitable local number, increasing the chances of successful contact and enhancing client trust. Outgoing calls made from the B2CORE Back Office via Twilio can now be recorded, with the recordings saved in your Twilio account for later playback. * The **Export** option has been enhanced to provide more reliable data export from the pages where this option is available in the Back Office. * In **Bonuses** > **Bonus distribution**, the **Ignored symbol groups** field is now optional and can be left empty when manually crediting bonuses to clients. If left empty, all symbols from available groups traded by a client are counted toward their traded volume for meeting bonus requirements. * Banner targeting in the B2CORE UI and mobile apps has been improved. In addition to **country** and **verification level**, restrictions can now be applied by **client type** and **jurisdiction** for more precise control over visibility. * In saved withdrawal presets in the B2CORE UI, the payment method now matches the selected withdrawal method, and the currency is clearly displayed. Previously, the technical method name used in the Back Office appeared, causing inconsistencies. ## July 2, 2025 [#july-2-2025] ### New features [#new-features-8] #### New PS integrations [#new-ps-integrations-4] Support for the following new payment systems has been added via **PSS**, with both deposits and withdrawals available: * **FundPay** * **Jetapay** * **PayRetailers** * **TopChange Pay** In addition, withdrawals are now supported for **AlfredPay**. #### Integration with SumSub Fraud Prevention [#integration-with-sumsub-fraud-prevention] Transaction monitoring via **SumSub Fraud Prevention** is now supported for fiat and crypto **deposits** and **withdrawals**. When such transactions are initiated, they're automatically checked by **SumSub**, with results returned to B2CORE. The results are displayed in the **Transaction monitoring** section of deposit and withdrawal details, as well as in the respective client requests before they can be approved or rejected. Additionally, a new **KYT status** column in **Finance** > **Deposits/Payouts** displays the transaction monitoring results. This also improves **auto-withdrawals** in B2CORE, allowing faster processing without compromising compliance. To use this feature, you must have **SumSub Fraud Prevention** enabled and properly configured in your SumSub account and the enabled **SumSub** external connection in the B2CORE Back Office (refer to [How to configure a connection to SumSub](../how-to-articles/manage-verification-options/how-to-use-sumsubstance#how-to-configure-a-connection-to-sumsub)). #### Integration with ActiveCampaign [#integration-with-activecampaign] It’s now possible to run targeted email campaigns using client data from B2CORE, seamlessly synced with the **ActiveCampaign** platform. This integration enables more efficient, data-driven email marketing and notifications by: * Configuring an external connection to **ActiveCampaign** in the B2CORE Back Office. * Automatically syncing client data from B2CORE to **ActiveCampaign**. * Creating email lists to improve client retention and provide more personalized interactions via **ActiveCampaign**. For details, refer to [How to integrate ActiveCampaign](../how-to-articles/manage-communication-platforms/how-to-integrate-activecampaign). #### Support for custom menu items in the B2CORE web and mobile apps [#support-for-custom-menu-items-in-the-b2core-web-and-mobile-apps] It’s now possible to add custom items to the menu displayed in both the B2CORE UI and mobile apps. In mobile apps, this functionality is supported starting from **iOS** v1.29 and **Android** v2.6.0. Custom items can be configured in **Promotion** > **Menu** by specifying their names, URLs to which clients will be redirected, and icons. When clicked, clients are redirected to third-party external resources or web pages that support your business (refer to [How to add custom menu items](../how-to-articles/manage-advertising-options/how-to-add-custom-menu-items)). ### B2CORE UI updates [#b2core-ui-updates-8] #### Improved Total Balance widget [#improved-total-balance-widget] The widget has been improved to show balances from both wallets and trading accounts, as well as the overall portfolio value for a comprehensive financial overview. #### Enhancements related to B2TRADER accounts [#enhancements-related-to-b2trader-accounts] The following improvements to B2TRADER accounts handling have been introduced: * **New B2TRADER Accounts widget**: accounts created on the B2TRADER platform can now be conveniently viewed and accessed via a dedicated widget on the **Dashboard** in the B2CORE UI. With a single click, traders can sign in to the trading interface and start trading instantly. * **Support for Netting accounts**: in addition to **Hedging**, B2TRADER accounts with the **Netting** execution type are now supported. This allows traders to choose the appropriate type to plan and adjust their trading strategies. To enable Netting accounts, a separate product must be configured in the B2CORE Back Office under the **Products** menu. * **Support for demo accounts**: demo B2TRADER accounts with a predefined balance can now be created via the B2CORE UI, allowing traders to safely practice using the trading interface.To enable demo accounts, a separate product must be configured in the B2CORE Back Office under the **Products** menu. #### Revised Sign Up and Sign In pages [#revised-sign-up-and-sign-in-pages] The **Sign Up** and **Sign In** forms have been redesigned for a cleaner layout, improved visual appearance, and a better overall user experience, including: * Displaying the client’s email or phone during confirmation to clarify where a verification code was sent. * The **Back** button now returns clients to the previous step without resetting the form. ### Improvements [#improvements-8] * PSS payment methods are now partially supported in the mobile apps. *Deposit* methods are available in the **iOS** app starting from v1.29 and **Android** starting from v2.6.0. *Withdrawal* methods via PSS aren't yet supported. * The use of bonus presets and temporary bonuses can now be restricted for clients based on a client's **country**, **client type**, **verification level**, **jurisdiction**, or **introducing broker (IB)**. These restrictions can be applied individually or in combination, allowing for more granular access control. If the restrictions are applied to the bonus preset used for crediting automatic deposit bonuses, these bonuses will only be credited to clients who meet the specified criteria (refer to [Bonus presets](../back-office-guide/bonuses/bonus-presets#details) and [Temporary bonuses](../back-office-guide/bonuses/temporary-bonuses#details)). * On the **Bonus** > **Bonus distribution** page, a new **Expired at** column has been added to display the date and time when a credited bonus is scheduled to expire or has already expired. This improvement makes it easier to monitor bonus timelines on client accounts and encourage clients to meet the bonus requirements before expiration. * Jurisdiction handling has been enhanced. You can now manually assign or change a client's jurisdiction in the client details in the Back Office. The list of countries for a jurisdiction can be edited, with the option to apply changes to existing clients or only to those who register after the update (refer to [Jurisdictions](../back-office-guide/clients/jurisdictions)). * For KYC via **ShuftiPro**, the **Show OCR form** – where clients can review, confirm, or if necessary, edit the information extracted from their submitted documents – can now be enabled or disabled in the ShuftiPro connection settings in **System** > **External connections**. * Confirmed phone numbers can now be removed from the **Contacts** tab in client profiles in the Back Office. To do this, a Back Office user must be assigned the `Update clients` permission. Once removed, the phone number becomes available for registering a new client profile. * The **Clients** > **Requests** page has been improved to include a **Country** column with filter options, making it easier to identify requests by client location. Additionally, the **Processing date** column now shows when a request was approved or rejected, helping you assess its processing time. * In **System** > **Visual customization**, images uploaded as logos can now only be in `SVG` format. ### Resolved issues [#resolved-issues-6] * Resolved an internal server error that occurred when uploading supporting documents for deposits via the **WireDocument** provider. Deposit requests now proceed without errors. ## April 18, 2025 [#april-18-2025] ### New features [#new-features-9] #### New PS integrations [#new-ps-integrations-5] With this release, we’ve integrated a new payment system, **AlfredPay**. It supports deposits and is fully integrated via PSS connections. #### Ongoing migration of payment systems to PSS [#ongoing-migration-of-payment-systems-to-pss] More systems have been successfully migrated to the **Payment System Service (PSS)**. You can view the complete list of PSS-supported payment systems in [Integrations > Payment systems](../integrations/payment-systems). They are marked with Yes in the **PSS-supported** column. Payment methods previously configured via non-PSS connections remain available and fully functional — except for **PayPal**, which is now only supported through PSS. Payment methods connected through PSS aren’t yet supported on the **iOS** and **Android** apps, meaning they are currently available to clients only via the B2CORE UI. #### Visual customization for the B2CORE UI [#visual-customization-for-the-b2core-ui] You can now personalize the appearance and style of your B2CORE UI to better reflect your brand using the new **System** > **Visual customization** menu in the Back Office. The available options enable you to: * Upload custom logos for the light and dark themes of your B2CORE UI. * Adjust light and dark theme colors. * Set and update background images for the **Sign In** and **Sign Up** pages of the B2CORE UI. * Add custom scripts, for example, for chatbot integration or analytics tracking. For more details, refer to [Visual customization](../back-office-guide/system/visual-customization). ### B2CORE UI updates [#b2core-ui-updates-9] #### Enhanced deposits and withdrawals [#enhanced-deposits-and-withdrawals] The deposit and withdrawal workflows in the B2CORE UI have been streamlined, making the processes faster and more intuitive for clients. The key enhancements include: * **Easier payment method selection**: based on the selected wallet currency and the currency used for deposit or withdrawal, only the available payment methods are displayed to a client, helping to quickly select the most suitable option without confusion. * **Clear commissions**: once a payment method is selected and a deposit or withdrawal amount is entered, the commission formula applied to the method is displayed, and the fee is automatically calculated. This helps clients make informed decisions when choosing their preferred method. * **Real-time rate updates**: when deposits or withdrawals involve currency conversion, clients can now manually refresh the rates to view the most current value. The rate refresh is optional and is intended for clarity. The rate applied at the moment of transaction is always up to date, ensuring accurate conversions even without manual refresh. * **Transaction summary**: after selecting a payment method and entering a deposit or withdrawal amount, clients can now view a detailed transaction summary before proceeding. The summary includes the amount to be deposited or withdrawn, the amount to be received, the current conversion rate, and any applicable commissions. * **Transaction statuses and notifications**: clients now receive real-time updates on the status of their transactions, helping reduce uncertainty and minimize the need for support requests. * **Redesigned icons**: the refreshed icons for payment methods are now better aligned with the overall design. #### Simplified B2BINPAY deposit form [#simplified-b2binpay-deposit-form] In the B2CORE UI, the B2BINPAY deposit form no longer displays fields for the amount, indicative amount, or conversion rate, as the funds are deposited when the transaction is processed on the blockchain after submitting the request in the B2CORE UI and receiving the deposit address, making these fields unnecessary. #### Preview of key B2CORE UI features [#preview-of-key-b2core-ui-features] Clients can now see a brief preview of B2CORE UI features before they access the **Sign Up** and **Sign In** forms through a new gallery showcasing main UI pages. This enhancement is designed to boost registration conversions and engage potential clients by providing them with an informative preview of the UI. #### Automatic sign-in after registration [#automatic-sign-in-after-registration] After successfully completing registration, new clients are now instantly signed in to the B2CORE UI without needing to enter their credentials on the **Sign In** page. #### Verification in the onboarding process [#verification-in-the-onboarding-process] New clients are now prompted to complete identity verification immediately after registration, streamlining the onboarding process to encourage faster verification, first deposits, and a quicker start to trading. Clients can still choose to skip this step and complete it later. If skipped, a friendly banner encouraging to complete KYC will appear on the **Dashboard**. #### Interactive UI hints for new clients [#interactive-ui-hints-for-new-clients] New clients signing in to the B2CORE UI for the first time are now provided with guided hints on key elements across various pages, helping them quickly understand the basic functionality and get started with B2CORE efficiently. #### Personal info update [#personal-info-update] Clients can now update their personal information directly in the B2CORE UI via the **Profile Info** menu. Any changes to personal data will reset the client’s verification level, requiring them to complete the KYC process again. #### Streamlined fund management in the Savings menu [#streamlined-fund-management-in-the-savings-menu] Clients are now prompted to deposit funds into savings programs or top up their wallets directly from the **Savings** menu when subscribing to a program and lacking sufficient funds to join it. Additionally, if a client subscribes to a savings program without having the required wallet, they will be offered the option to create a new wallet in the required currency. #### Enhanced widget management in the Dashboard [#enhanced-widget-management-in-the-dashboard] The **Dashboard** has become even more intuitive with a set of new widget management options designed to improve layout clarity and usability: * When multiple widgets are added, they now automatically align for a cleaner and more organized view. * Widgets can no longer be resized below the minimum size, ensuring all content remains clear and readable. * Widgets now snap into place, making it easier to arrange and maintain a structured dashboard layout. #### Seamless authorization to Zendesk [#seamless-authorization-to-zendesk] When signing in to **Zendesk**, clients are redirected to the B2CORE UI **Sign In** page. After signing in, they are automatically taken back to the Zendesk page specified in the connection details under **System** > **External connections**, ensuring a faster and smoother support experience. ### Improvements [#improvements-9] * In **Bonuses** > **Bonus distribution**, you can now view the history of transactions related to crediting or deducting specific bonuses on client trading accounts. This information is available on the **Bonus transactions** tab in the bonus details. Additionally, Back Office users with the appropriate permission can retry failed bonus transactions (refer to [Bonus transactions](../back-office-guide/bonuses/bonus-distribution#bonus-transactions). * For savings programs, the **Cancellation penalty** can now be set as a percentage of the invested amount, offering greater flexibility in penalty calculations. The higher the amount invested by a client, the greater the penalty will be in the case of early withdrawal. The penalty percentage can be applied to programs of both the Fixed and Flexible strategies (refer to [How to create a savings program](../how-to-articles/manage-savings-programs/how-to-create-a-savings-program)). * By the end of May 2025, the leverage parameter will no longer be applied directly to accounts on the **TradeLocker** platform. Instead, leverage will be configured per instrument within the platform. As a result, the leverage parameter for TradeLocker accounts is no longer supported in B2CORE. * Verification levels can now be restricted by country and jurisdiction, enabling you to create distinct KYC flows for clients based on their location and client type (refer to [How to restrict the use of verification levels by jurisdiction or country](../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor#how-to-restrict-the-use-of-verification-levels-by-jurisdiction-or-country)). * Filtering options have been added to **Systems** > **External connections**. You can now quickly find the required connection by applying the filter for **ID**, **Caption**, **Name**, **Provider**, or **Status**. ### Deprecated functionality [#deprecated-functionality-5] Integration with **Google reCaptcha** has been deprecated and is no longer supported. The reCaptcha step has been removed from the **Registration** and **Authorization** wizards and will no longer appear on the **Sign Up** and **Sign In** pages in the B2CORE UI. *** ## Past releases [#past-releases] ### December, 2024 🎄 [#december-2024-] #### New features [#new-features-10] ##### Introducing the Payment System Service (PSS) [#introducing-the-payment-system-service-pss] We’re happy to announce the launch of the B2CORE **Payment System Service (PSS)**, a powerful feature designed to streamline connections to external payment providers and cashier systems that aggregate multiple payment solutions. By configuring a single connection to a payment provider through PSS, you can give your clients access to a variety of deposit and withdrawal options offered by the provider and fully leverage its benefits. Payment systems that can be connected to B2CORE through PSS are indicated in [Integrations > Payment systems](../integrations/payment-systems). Previous integration methods remain available for these systems, ensuring that existing connections can continue to be used. If you intend to connect payment systems through PSS, please contact your account manager first to confirm the availability of PSS-supported connections on your B2CORE instance. ##### New PS integrations [#new-ps-integrations-6] The following new payment systems have been integrated: * **Paymid** – with support for deposits * **PayRetailers** — with support for deposits * **Ozow** – with support for deposits and withdrawals * **iSmartPay** – with support for deposits and withdrawals in THB. ##### Enhanced DXtrade integration [#enhanced-dxtrade-integration] Integration with the DXtrade platform has been revamped and is now fully functional, providing the capability to open and manage client training accounts, along with deposits, withdrawals, and transfers via the Back Office and B2CORE UI (refer to [How to integrate DXtrade](../how-to-articles/manage-platforms/how-to-integrate-dxtrade)). ##### Client segmentation by jurisdiction\*\* [#client-segmentation-by-jurisdiction] Client segmentation by jurisdiction is now available. In the Back Office, you can assign countries to specific jurisdictions in **Clients** > **Jurisdictions**. Once configured, clients will automatically be assigned to the correct jurisdiction based on the country they select during registration. This feature enables you to effectively manage clients from different jurisdictions, assign managers to specific countries, and restrict their access to clients based on jurisdiction (refer to [Clients > Jurisdictions](../back-office-guide/clients/jurisdictions)). #### New B2CORE UI [#new-b2core-ui] The redesigned B2CORE UI, first introduced about a year ago, is now fully implemented, powered, and optimized for seamless use. With this release, it officially replaces the previous interface, which has been discontinued and is no longer available. #### Improvements [#improvements-10] * The **Import Data** module has been updated to offer a more user-friendly experience when importing client, account, and IB-related data into B2CORE. This feature enables you to quickly start using B2CORE with your existing client base, eliminating the need for complex migration processes (refer to [Import data](../back-office-guide/system/import-data)). * When manually crediting bonuses to clients on the **Bonuses** > **Bonus distribution** page in the Back Office, you can now assign captions to these bonuses. These captions will be displayed to clients in the B2CORE UI, enabling them to distinguish credited bonuses (refer to [How to manually credit bonuses to clients](../how-to-articles/manage-bonuses/how-to-manually-credit-bonuses-to-clients)). * A new setting, **Enabled Two-factor auth providers**, has been added to **System** > **Settings**, enabling you to control which 2FA methods are visible and available for clients in the B2CORE UI. You can select both Google Authenticator and SMS confirmation, or only one of them. * It’s now possible to show or hide the **Nickname** field in client profiles in the B2CORE UI by adjusting the corresponding setting in the **Information showing** section under **System** > **Settings** in the Back Office. * For platforms that support web trading terminals, such as **cTrader** and **DXtrade**, you can now enable one-click access to these terminals directly from the B2CORE UI. To set this up, specify the **Web Terminal URL** in the platform details upon navigating to **Products** > **Platforms**. When specified, the **Trade** button will appear on account cards in the B2CORE UI, enabling clients to open the web terminal with a single click (refer to [How to enable one-click trading access from the B2CORE UI](../how-to-articles/manage-platforms/how-to-enable-one-click-access-to-web-trading-terminals)). For **cTrader**, the terminal will directly open the account from which the **Trade** button was clicked in the B2CORE UI, eliminating the need for clients to search for the desired account. * For **cTrader**, when creating accounts in B2CORE, the client's first and last names are now automatically transferred to the corresponding **First name** and **Last name** fields on the cTrader platform. * For MetaTrader 4/5 accounts created via B2CORE, you can now control the **Send reports** option applied to accounts on those platforms for reporting purposes. A new setting, **Use reporting on the platform**, has been added to **Products** > **Platforms** in the Back Office. Enabled by default, it ensures accounts are created with the **Send reports** option active. * You can now add localizations for the captions of custom fields added to your **Constructor** method. When switching languages in the B2CORE UI, the field names will be displayed according to the selected language (refer to [How to add custom fields for the Constructor deposit or withdrawal method](../how-to-articles/manage-payment-methods/how-to-add-the-constructor-deposit-or-withdrawal-method#how-to-add-custom-fields-for-the-constructor-deposit-or-withdrawal-method)). * The list of permissions that can be assigned to Back Office user groups in **Users** > **Groups** has been expanded to include new read-only permissions. These permissions allow Back Office users to view details in specified sections without the ability to make updates: * `View banners` – allows to view banner configurations in **Promotion** > **Banners**. * `View menu` – allows to view the configuration of the menu for the B2CORE UI in **Promotion** > **Menu**. * `View client rights` – allows to view permissions assigned to each verification level in **System** > **Client rights**. * `View rates` – allows to view rates in **Currencies** > **Rates**. * `View groups` – allows to view permissions assigned to Back Office user groups in **Users** > **Groups**. * `View mailing` – allows to view configurations of email sending services and SMTP providers in **Mailing** > **Marketing** and **Mailing > System**. * The **Rates** field in transaction details, such as those in **Finance** > **Deposits** or **Finance** > **Payouts**, is now displayed as read-only. This ensures the rate used for converting deposit or payout amounts into the final currency can’t be modified. * Clients in the B2CORE UI can now archive demo accounts without requests that require admin approval in the Back Office. * The country and country flag displayed in the phone number field of the registration form in the B2CORE UI are now automatically identified based on the client’s IP address. This streamlines the registration process by eliminating the need for clients to manually search for their country in the dropdown. * The **Switch** option has been added to account details in the B2CORE UI, enabling clients to quickly switch between their trading accounts on the selected platform without the need to go back to the accounts list and search for the desired account. #### Deprecated functionality [#deprecated-functionality-6] * Integration with **Acrobat Adobe Sign** has been deprecated and is no longer supported. * The **Event calendar** has been discontinued and isn’t available anymore. *** ### October, 2024 [#october-2024] #### New features [#new-features-11] ##### New PS integrations [#new-ps-integrations-7] With this release, a new payment system, **paypay89**, has been integrated, with support for deposits and withdrawals. Supported currencies include THB, IDR, and VND, with settlements conducted in USDT. ##### Introducing bonuses on cTrader [#introducing-bonuses-on-ctrader] We’re excited to announce the support for bonuses on **cTrader**. With this update, you can now automatically credit bonuses to clients upon deposits, configure bonus presets, and create temporary bonus programs for **cTrader**, similar to the functionality available for **MT4/5**. ##### Integration of RudderStack to enhance analytics [#integration-of-rudderstack-to-enhance-analytics] A new integration with the **RudderStack** platform has been introduced to enhance analytics capabilities. You can configure the connection to **RudderStack** in the **External connections** section of the Back Office. The platform collects data on new client registrations and helps evaluate marketing companies aimed at client acquisition. The collected data can then be sent to one of the [data analysis tools](https://www.rudderstack.com/integration/?type=Destination) like Amplitude, Google Analytics, or others. ##### Mobile app download settings [#mobile-app-download-settings] In **System** > **Settings**, the **Mobile** section now includes options to configure buttons for downloading your branded mobile apps for both iOS and Android. These buttons will be displayed in the B2CORE UI along with the download instructions (for details, refer to [System > Settings](../back-office-guide/system/settings#mobile)). #### Improvements [#improvements-11] * For deposit and withdrawal methods that use **KoraPay** as a payment provider, a new configuration option, **Merchant bears costs**, has been added. This option can be set to **Yes** or **No** and determines whether the commissions charged by the provider are added to the deposit or withdrawal amount specified by the client, or deducted from it. * The process of assigning new clients to managers has been significantly updated. New clients are now assigned to the default manager first, considering country restrictions. If the default manager can’t be assigned due to these restrictions or if no default manager is set, clients will be distributed sequentially among existing managers, without relying on their priority indexes (for details, refer to [Clients > Managers](../back-office-guide/clients/managers)). * You can now easily open the B2CORE UI **Sign In** page from the Back Office. The **Open personal area** link has been added to the top bar, giving you fast access to the B2CORE UI linked to your Back Office. * It’s now prohibited to configure **cTrader** products for the creation of cent accounts, as cent accounts aren’t supported on the cTrader platform. If attempted, an error message will be displayed. * In **cTrader** products the **Mail** option is now always set to **Don’t send** and can’t be changed, indicating that credentials won’t be sent to clients when creating cTrader accounts through B2CORE. This is due to all cTrader accounts being tied to a single cTrader ID, with one password for that ID. * Banners are now customizable for display to clients in selected countries and with designated verification levels (for details, refer to [How to restrict banner display by country and verification level](../how-to-articles/manage-advertising-options/how-to-create-a-banner#how-to-restrict-banner-display-by-country-and-verification-level)). * In bonus presets, the **Ignored symbol groups** field can now be left empty if needed. * The bonus option previously named **Burn if balance \< 0** has been renamed to **Burn if Equity \< Credit** to more accurately reflect its functionality. * When creating **MetaTrader 5** accounts through B2CORE, clients' first and last names are now correctly saved in separate fields on the MT5 platform, rather than being combined into a single field. * In the Back Office, you can now open and reject pending client requests related to trading accounts that are no longer accessible due to being archived or deleted. * Verification levels created on the **Verification > Levels** page can no longer be removed if they are assigned to active clients. Attempting to remove these levels will trigger an error message. * Verification level descriptions, if specified in the Back Office, are now displayed in the new B2CORE UI, allowing users to easily understand the actions and benefits associated with each level. * The status of verification requests approved in **SumSub** is now accurately displayed in the Back Office. Previously, statuses were updated only after opening these requests. #### Deprecated functionality [#deprecated-functionality-7] * The **B2BINPAY** section where you could view client wallets and withdrawals has been deprecated in the Back Office. However, deposit and withdrawal methods via **B2BINPAY** can still be configured and used. *** ### July, 2024 [#july-2024] #### New features [#new-features-12] ##### New WEBAPI 2.0 connections for MT4 and MT5 platforms [#new-webapi-20-connections-for-mt4-and-mt5-platforms] Connections to MT4 and MT5 are now established using WEBAPI 2.0. When your existing connections are migrated to WEBAPI, platform connection settings for MT4 and MT5 will be found in the details of the respective platforms under **Products** > **Platforms**, instead of **System** > **External connections** (for details, refer to **MetaTrader 4/5** in [Platforms](../back-office-guide/products/platforms)). As before, live and demo accounts require separate platforms. Therefore, two distinct platforms (for each MT4 and MT5) must be configured for live and demo accounts in **Product** > **Platforms**. ##### Enhanced exchanges [#enhanced-exchanges] Exchanges in specific currency pairs initiated by clients in the B2CORE UI can now be configured to require admin approval. To enable requests of the **Exchange** type for specific pairs, navigate to **Currencies** > **Currency pairs** in the Back Office and set the **Exchange request creation** option to **Yes** for the relevant pairs. After the admin approval, such exchanges are executed using the rates specified in the approved requests. For details, refer to [How to enable requests for exchanges in specific currency pairs](../how-to-articles/manage-currencies/how-to-enable-requests-for-exchanges-in-specific-currency-pairs) and [How to update rates in exchange requests](../how-to-articles/manage-currencies/how-to-update-rates-in-exchange-requests). ##### PS integrations [#ps-integrations] After rebranding, the **Volet** payment provider, formerly known as **Advcash**, remains available for deposits and withdrawals in B2CORE. #### Improvements [#improvements-12] * For enhanced security when signing in to the Back Office, the only supported method for 2FA is through time-based one-time passwords (TOTP), such as those generated by Google Authenticator. 2FA using email codes has been discontinued. Enable TOTP 2FA by clicking your email address in the top bar and selecting the TOTP option. * For address verification through ShuftiPro, you can now use the **Standard Address** or **Enhanced Address** verification plan. Both ShuftiPro plans are now supported for comprehensive address verification. * When exporting data from the **Clients** > **General** page, you can now include the **Tags** and **Nickname** columns in the export if they are selected in the **Column visibility** option and displayed on the page. * When configuring a connection to **CentroID** on the **System** > **External connections** page, the connection is now checked for both connectivity and credentials upon clicking the **Test connection** button. * When creating cTrader accounts via B2CORE, the country specified in the client’s profile is now automatically added to the account settings on the cTrader platform. * For **Sticpay** payments, transaction IDs are now included in the **Invoice** column in **Finance** > **Deposits** and **Finance** > **Withdrawals**. This enhancement enables you to easily match Sticpay transactions listed in the Back Office with those on the payment provider’s side. * The icon for **Praxis** is now visible in the B2CORE UI, provided that the icon name is specified in the respective deposit method configuration in the Back Office. *** ### June, 2024 [#june-2024] #### New features [#new-features-13] ##### Support for a new trading platform [#support-for-a-new-trading-platform] With this release, the suite of integrated platforms in B2CORE has expanded to include **TradeLocker**. It’s now possible to open demo and live TradeLocker accounts via the Back Office and the B2CORE UI, make transfers, including transfers between accounts opened on other trading platforms, and view TradeLocker account statistics such as Balance, Equity, Credit, Leverage, and Free funds. ##### Zendesk integration [#zendesk-integration] The **Zendesk** customer support platform has been integrated with B2CORE, offering ticketing, live chat, and AI tools for better customer engagement. For submitting and managing tickets, clients will be redirected from the B2CORE UI to the Zendesk interface. ##### Standard address verification with ShuftiPro [#standard-address-verification-with-shuftipro] Address verification is now available via the **ShuftiPro** KYC provider. You can now request clients to verify their addresses and any other locations such as cities or countries using the following document types: `rent_agreement`, `bank_letter_receipt`, `employer_letter`, and `utility_bill`. ##### Enhanced Savings module [#enhanced-savings-module] The **Savings** module has been enhanced to support more settings in your savings programs, including the use of `Fixed` and `Flexible` strategies. Savings programs enable clients to invest their funds to earn interest, allowing them to passively grow their crypto assets, similar to traditional bank savings accounts. ##### Integration with Notabene [#integration-with-notabene] Integration with **Notabene**, a significant addition to the **B2BINPAY** payment provider, has been implemented. This integration empowers the provider with compliance capabilities for the crypto **Travel Rule**, ensuring enhanced security and regulatory adherence (refer to [How to integrate B2BINPAY](../how-to-articles/manage-payment-methods/how-to-integrate-b2binpay)). #### New B2CORE UI updates [#new-b2core-ui-updates] * The **Bonuses** page has become available in the new B2CORE UI. Clients can now view all bonus programs on the same page and filter them to display only the programs in which they can participate. The cards showing bonus program details have been redesigned to clearly indicate the conditions that must be met to receive bonuses, such as the required volume of traded lots or the number of days until the end of each program. * Enhanced trading account details now offer clients more comprehensive information and statistics. For example, clients can now scale the **Equity** chart by different time periods and view the overall account equity for all time. Additionally, on the **Deals History** tab, clients can switch between pending orders and open positions, and filter them by date and side. * A new widget, **Favourite trading accounts**, has become available. This widget displays MT4 and MT5 trading accounts marked as favorites by clients, enabling quick switching between platforms and account types (live and demo) to view the necessary accounts and their balances. * The deposit and withdrawal processes have been streamlined to offer a more intuitive experience. Among the enhancements are auto-suggestions in dropdowns for selecting options, elimination of unnecessary grouping, and improved display of QR codes. * It has become possible to display banners on any page of the B2CORE UI, such as Dashboard, Wallets, Deposit, Withdrawals, or others by configuring banner settings on the **Promotion** > **Banners** page in the Back Office. #### Improvements [#improvements-13] * It has become possible to select the **Margin calculation type** such as **Net**, **Sum**, or **Max** for cTrader accounts. This option has been added to the settings of cTrader products on the **Products** > **Products** page. * It has become possible to set the default manager on the **Clients** > **Managers** page. When meeting the country restrictions, the default manager is automatically assigned to all new clients, eliminating the need for manual assignments. * The **Administrators** group on the **System** > **Users** > **Groups** page can no longer be removed and its permissions can’t be modified. Users included in this group are now granted full permissions. If you need to restrict permissions for specific Back Office users, create a separate user group and assign to it only necessary permissions. * On the **System** > **Users** > **Users** page, it’s now possible to view the date and time when a Back Office user was added and who added the user in the new **Created At** and **Creator** columns. * Two-factor authentication is now obligatory for all Back Office sign-ins. If 2FA isn’t enabled for your user profile yet, you’ll be requested to activate it before proceeding. Click your email address in the top bar, click **Enable 2FA** in the dropdown, and then select the method for delivering 2FA codes. * English is now set as the default fallback language for all the languages enabled on the **System** > **Localizations** page. This ensures a seamless user experience across different languages by using the English version when no translation or template in a specific language is available. * On the **Finance** > **Deposits** and **Finance** > **Payouts** pages, it has become possible to filter transactions by the **Account type** column. * The transactions listed on the **Finance** > **Transactions** page can now be filtered by custom periods. To apply filtering, specify the start and end dates in the filter fields under the **Date** column. * Updates to the integration of the **ChipPay** payment provider: * The **Name** field has been added. This field is pre-filled with the client’s first and last names for making deposits and withdrawals in the B2CORE UI. * The format of area codes has been updated to meet the payment provider requirements. * It has become possible to set up exchange rate adjustments in the deposit method settings for the **ChipPay** payment provider. * It has become possible to select a bank code in the deposit method settings for the **Help2Pay** payment provider. If selected, the code is used for deposits by default. If no bank code is selected, clients can choose one when making deposits in the B2CORE UI. #### Resolved issues [#resolved-issues-7] * The email notification sent to Back Office users now includes complete information without any missing details regarding the **Internal transfer request** event. * The bulk action to zero out balances has been fixed to reset the balances to zero for all wallets in a specific currency belonging to the same client. * The **Update Balances** option on the **Clients** > **Accounts** page has been fixed to accurately update balances, regardless of the upper or lower case used in client email addresses included in CSV files (for details, refer to [How to update balances](../how-to-articles/manage-finances/how-to-update-balances)). * Filtering by the **Status** column on the **Verification** > **Documents** page now functions correctly, showing only documents of the selected status. * Clicking the client ID link on the **Security** > **Blocked clients** page now accurately redirects you to the details page of the clocked client associated with that ID. *** ### March, 2024 [#march-2024] #### New features [#new-features-14] ##### New PS integrations [#new-ps-integrations-8] A new payment system, **Sqala**, has been integrated, with support for deposits and withdrawals in Brazilian reals (BRL). ##### Savings programs [#savings-programs] It has become possible to create savings programs. Your clients can subscribe to such programs and invest their idle funds to earn interest for holding the funds during a period set for each program. In this release, fixed interest rates are supported (for details, refer to [Savings](../back-office-guide/savings/)). #### Improvements [#improvements-14] * For the **BridgerPay** payment provider, the deposit process via B2CORE UI has been streamlined. Now, the required fields for depositing funds are filled in automatically with client-related data. * The configuration of the **Praxis** payment provider has been enhanced to ensure secure transaction processing. Additionally, in order to meet the diverse regulatory standards, you can now enable clients from various countries to submit different sets of required documents for making deposits via this provider in the B2CORE UI. * It’s now possible to configure the **Constructor** payment method so that clients can attach necessary documents when making deposits or withdrawals using this method in the B2CORE UI (for details, refer to [How to add the Constructor deposit or withdrawal method](../how-to-articles/manage-payment-methods/how-to-add-the-constructor-deposit-or-withdrawal-method)). * The following payment providers have been restored and can now be used: * **WireCustom** — for deposits and withdrawals * **1-2-Pay** — for deposits and withdrawals * It’s now forbidden to remove connections to email service providers on the **Mailing** > **Marketing** > **Configurations** page if these connections are used in email templates created on the **Mailing** > **Marketing** > **Email templates** page. * For convenient filtering, all possible [transaction statuses](../back-office-guide/references/transaction-statuses) have been added to the **Status** dropdown on the pages within the **Finance** menu in the Back Office. #### New B2CORE UI updates [#new-b2core-ui-updates-1] * In the new B2CORE UI, the **Summary** section has been added for withdrawals. This section provides detailed information about a withdrawal, including the amount of applied commissions, exchange rates, and the final amount that will be withdrawn from the system. * If in the Back Office, a product is configured with the **Minimum deposit** option, the option is no longer ignored when creating accounts based on that product in the new B2CORE UI. * On the **Deposit**, **Withdraw**, and **Transfer** pages in the new B2CORE UI, when selecting accounts in dropdowns, the available accounts are now grouped based on their types, such as Fiat, Coins, MT4, MT5, and others. * The **Last updated** fields in the new B2CORE UI now use the full date format: `YYYY.MM.DD HH:MM`. #### Resolved issues [#resolved-issues-8] * The **Update balances** option on the **Clients** > **Accounts** page has been fixed to process a large number of email addresses listed in a CSV file used for updating client balances. * The issue causing slow loading of popup forms for creating deposits and bonuses in the Back Office has been resolved, and they now load faster. * On the **Deposit** page in the old and new B2CORE UIs, the indicative deposit amount is now correctly calculated in the case when the amount was initially entered in the **Payment amount** field. * The ability to attach TXT files to HelpDesk tickets has been restored. #### Deprecated functionality [#deprecated-functionality-8] * Integration with **Google Analytics** has been deprecated in B2CORE. * The **Back Office API** has been deprecated. For any inquiries or assistance, please contact your account manager. ### December, 2023 [#december-2023] #### New features [#new-features-15] ##### New B2CORE UI [#new-b2core-ui-1] We are happy to introduce a new redesigned look of B2CORE UI. It has been created to streamline complex user scenarios, as well as keep the UI relevant and up-to-date with modern design trends. Onboarding instructions are displayed on the new UI pages to help you get familiar with the main changes and enhanced scenarios. #### Switch to the new UI [#switch-to-the-new-ui] You can switch to the new UI on the **Sign In** page or after you have signed in to the B2CORE UI by clicking **Go to New Interface**. To switch to the previous user interface version, click your profile icon in the top right and select **Switch to Previous Version** in the profile menu. #### Main UI changes [#main-ui-changes] **User profile** You can now navigate to your user profile by clicking your profile icon in the top right. In the expanded profile menu, select options to view and update your personal information, verification level, the security status of your profile, and saved withdrawal presets. **Dashboard** Widgets that you can add to your **Dashboard** are now listed in a new left bar that is opened after clicking the **Add Widget** button. Click widgets to immediately add them to the **Dashboard**. You can add several widgets at once. **Wallets** Wallet details are now displayed in a new right bar that is opened after clicking a selected wallet. From the bar, you can make balance operations, view the recent wallet transactions, or navigate to your full transaction history. **Deposits and withdrawals** The procedures for making deposits and withdrawals have been streamlined, enabling you to select a wallet, then select if you want to make a deposit or withdrawal in a crypto- or fiat currency, and finally select one of the payment methods supported for a selected currency. After that, you get a deposit or withdrawal address or fill in the required fields to complete your transaction. **Internal withdrawals** On the **Funds** > **Withdraw** page, you can now select the **Internal User** option to withdraw funds from your wallet to the wallet of another user registered in the same B2CORE system. **Withdrawal presets** When making withdrawals on the **Funds** > **Withdraw** page, you can save withdrawal details as presets. A list of saved presets is now available upon clicking your profile icon and selecting **Withdrawal Presets** in the profile menu. Use saved presets to make quick withdrawals and eliminate the need to fill in the same information every time. **Transaction history** View the history of all your transactions on the same page by switching between the **Deposits**, **Withdrawals**, **Exchanges**, **Transfers**, and **Internal Withdraw** tabs. Details of a specific transaction can now be viewed by expanding the transaction row. **Platforms** The cards showing the essential information about your accounts opened on various platforms have a new look and provide all the familiar functionality. The enhanced form for adding new accounts makes it convenient to switch between demo and live options, select the account currency, and apply other settings. **HelpDesk** The **HelpDesk** interface has been updated. It has become more convenient to use the support chart, as well as work with tickets and track their statuses. Working hours of support teams in specific languages are now displayed in a popup. **Mobile app download** If the mobile app is supported, it can now be downloaded to your mobile device by clicking the **Download app** button in the top bar and scanning the displayed QR code. #### Improvements [#improvements-15] * A new **Temporary bonus name** column has been added to the **Bonus distribution** page in the Back Office, enabling you to indicate temporary bonus programs that are the most popular among clients. * Kyrgyz language is now supported for localization. If needed, the language can be enabled on the **System** > **Localizations** page in the Back Office. #### Resolved issues [#resolved-issues-9] * Information displayed on the **Advanced** tab in client details is now prevented from being accidentally reset to the same values for all registered clients. * The list of banks supported by **PaymentAsia** has been updated so that withdrawals made via the provider are processed correctly. *** ### November, 2023 [#november-2023] #### New features [#new-features-16] ##### Centroid integration [#centroid-integration] The **Centroid** platform providing connectivity to various trading platforms and liquidity sources has been integrated. With this release, it has become possible to create accounts in B2CORE by adding the accounts that have already been opened on Centroid, view information about the added accounts in the Back Office and B2CORE UI, and make balance operations, such as deposits, withdrawals, and transfers. ##### New document types for Shufti Pro [#new-document-types-for-shufti-pro] Along with `passport` and `selfie`, the `id_card` and `driving_license` document types supported by **ShuftiPro** can now be used for configuring KYC procedures in the Back Office. #### Improvements [#improvements-16] * When making deposits and withdrawals using **ChipPay** in the B2CORE UI, the **Phone Number**, **Name**, and **Region Country** fields are now automatically filled in with information from a client profile. * The possibility to initiate several identical deposit transactions in a row in the B2CORE UI has been eliminated. * It has become possible to archive trading accounts with non-zero balances in the Back Office, eliminating the need to transfer funds from the accounts before archiving them. In this case, the existing balance is kept on an archived account. If the account is unarchived, its balance will become available again to the account owner. * Back Office user groups displayed on the **System** > **Users** > **Groups** page can now be removed only if no users are included in those groups. * It’s no longer possible to disable the default localization option on the **System** > **Localizations** page in the Back Office. * The client type identifier is now sent in requests to deposit funds using **Praxis** to ensure that such transactions are properly processed by the payment provider. #### Deprecated functionality [#deprecated-functionality-9] * The option to **Allow users to share the same accounts** has been deprecated from a list of platform settings that can be configured on the **Products** > **Platforms** page. * Support for the KYC provider **Sapuma** has been deprecated in B2CORE. #### Resolved issues [#resolved-issues-10] * When enabling 2FA for Back Office users, the **Enable 2FA** popup can no longer be closed by an accidental click outside the popup. * The **Max Demo Trading Accounts** and **Max Live Trading Accounts** options are no longer set to 0 (zeros) after updating a list of rights for newly registered clients on the **Settings** tab in the Back Office. * Clients can now complete their deposits via **PayPal** by confirming deposit information on the payment provider page instead of receiving an error message and being redirected back to the B2CORE UI. * When making withdrawals in MYR using **PaymentAsi** in the B2CORE UI, instead of the empty **Bank Name** dropdown, a list of available bank names for making withdrawals is now displayed. * The issue due to which the “Receiver Repeat Bank Account” error occurred when approving client requests to withdraw funds using **ChillPay** has been eliminated. * Withdrawals made in the Back Office using the **manual** provider are no longer stuck in the **Pending** status. *** ### October, 2023 [#october-2023] #### New features [#new-features-17] ##### 2FA for Back Office users [#2fa-for-back-office-users] For Back Office users, it has become possible to enable 2FA by using time-based one-time passwords (TOTP) from 2FA apps, such as Google Authenticator, or by using verification codes sent to their email addresses. ##### HTML templates are now rendered before saving [#html-templates-are-now-rendered-before-saving] HTML email templates marked as enabled can now be saved in the Back Office only after they are successfully rendered and displayed in the preview. #### Improvements [#improvements-17] * The **Platform Group** field located in the details of MetaTrader products can no longer be edited after client accounts have already been created based on those products. * If the only email service provider is configured for sending marketing emails (**Mailing** > **Marketing** > **Configuration**) or system emails (**Mailing** > **System** > **Providers**), the provider can’t be disabled or removed. * It has been shorten the period during which a new withdrawal or transfer request can’t be created by a client in the B2CORE UI if the previous one is still pending. * The email template for sending codes required to confirm withdrawals made via B2BINPAY has been added to the Back Office, enabling users to receive confirmation codes for withdrawal transactions created on the **B2BINPAY** > **Withdrawals** page. * It’s now possible to attach large files when adding comments to the **Events log** in the Back Office. * In the list of sent marketing emails, **Instant** is now displayed in the **Sent At** column for emails that were immediately sent after they were set up and saved in the Back Office. #### Deprecated functionality [#deprecated-functionality-10] * The **B2BInPay v1** rates provider and **Anfitraud** module have been deprecated. #### Resolved issues [#resolved-issues-11] * The correct bank codes are now passed when clients make deposits in the B2CORE UI using **ChillPay**. In addition, all transaction statuses returned by **ChillPay** are now processed, ensuring that appropriate deposit statuses are displayed in the Back Office. * When making deposits in the B2CORE UI using **Mercuryo**, clients are now redirected to the correct payment provider page to complete their deposits. * The correct list of banks that can be selected to deposit funds in IDR using the **Help2Pay QR Payment** method is now displayed to clients in the B2CORE UI. * Successful deposits made using **NicePay** and **Perfect Money** are now correctly processed and no longer remain in the **Pending** status in the Back Office. * The invalid signature error that occurred after clients were redirected from the B2CORE UI to the **EeziePay** payment page has been fixed, enabling clients to complete their deposits. * Deposits in VND and CNY that were previously unavailable using **ChipPay** are now supported. * Transaction IDs (TxID ) generated for withdrawals made using B2BINPAY that were previously missing in withdrawal details in the Back Office are now displayed there. * Verification via **Shufti Pro** is now properly processed and causes no errors in the Back Office. * The **Create from TR denied** permission now works properly when enabled for eWallets and B2TRADER products in the Back Office. The permission forbids clients to add currencies and open B2TRADER accounts in the B2CORE UI. * The enabled reCapture no longer prevents clients from proceeding with the registration procedure in the B2CORE UI. * **MatchTrader** demo accounts are now opened with the start balance specified in the corresponding product configured in the Back Office. * The issue that made it impossible to load data on the **MT Accounts** tab in the client details has been eliminated. * The load of data on client accounts and balances in the Back Office has been accelerated. * The bulk action to make deposits to client accounts in the Back Office has been fixed to accept a product and a specific product currency in which deposits must be made. * Email notifications sent when the **TransferSuccessfulOperation** event occurs now include transfer details instead of displaying empty data. * The countries specified by clients during registration in the B2CORE UI are no longer removed from client profiles in the Back Office after any other profile data is edited by admins. * The clients are no longer prohibited from passing a verification procedure in the B2CORE UI if their current verification levels enable them to do this. * The free margin previously missed in the details of PrimeXM accounts in the Back Office is now displayed there. * In the Back Office, it’s now prohibited to disable product groups if they are connected to any product in order to forbid creating accounts without groups. * The **Country restrictions** option displayed in the dropdown upon clicking the **Actions** button on the **Edit product** page is no longer duplicated. * The **Export** option now exports data about all products created on the **Products** > **Products** page instead of exporting only the data about products listed on the current page. * The comments added to operations of allocating bonuses to client MetaTrader accounts in the Back Office are now added to MetaTrader as well. * If more than 50 currencies are added to a product, the list of added currencies isn’t now truncated when viewing product details and displays all the added currencies. *** ### August 9, 2023 [#august-9-2023] #### New features [#new-features-18] ##### PS integrations [#ps-integrations-1] * It has become possible to make withdrawals using the **FairPay** payment provider. Deposits with **FairPay** are available only in USD. * It has become possible to make withdrawals in THB using the **ChillPay** payment provider. * When making deposits using **ChillPay**, it has become possible to select one of the supported deposit methods: **Internet banking**, **Credit card**, **QR payment**, or **Bill payment**. ##### Validation of payment provider connections [#validation-of-payment-provider-connections] For the following methods, it has become possible to check payment provider settings by clicking the **Check connection** button added to the **Deposit method** and **Payout method** pages: * the **BridgerPay** deposit method * the **CHIP** deposit method * the **B2BINPAY** deposit and payout methods #### Improvements [#improvements-18] * It is now prohibited to make a withdrawal, transfer, internal transfer, or exchange operation if there is another such operation that hasn’t been completed yet. * When users change passwords for signing in to the Back Office, new passwords are now validated to meet the specified complexity requirements. * When changing the date of birth in client profiles in the B2CORE UI, the birth date for clients under the age of 18 can’t be entered. #### Resolved issues [#resolved-issues-12] * For the **Praxis** payment provider, redirection from the B2CORE UI to the payment page and back now works properly when making deposits. * The error that made it impossible to approve client requests to withdraw funds using the **Help2Pay** payment provider has been eliminated. * Enabling the **Skrill** payout method in the Back Office no longer causes errors on the **Funds** > **Withdraw** page of the B2CORE UI. * If the auto-withdrawal option is enabled in the Back Office, a withdrawal request created by a client in the B2CORE UI is now approved automatically after the requested amount is put on hold and the withdrawal request status is changed from **New** to **Pending**. *** ### May 29, 2023 [#may-29-2023] #### New features [#new-features-19] ##### Cashback rewards [#cashback-rewards] It has become possible to set up cashback reward programs for clients who trade on MT4 and MT5 upon navigating to **Cashback** > **MetaTrader Volume** in the Back Office. For each traded lot, clients can earn cashback rewards that are calculated based on the settings configured for each platform. #### Improvements [#improvements-19] * It is now possible to make deposits in GBP using **BridgerPay**. #### Resolved issues [#resolved-issues-13] * The HTML template used to notify Back Office users by email about successful deposits now includes all the essential information that was previously missing. * MT account balances can no longer become negative in the case when clients attempt to make repeated transfers from their accounts while the platform connection is being restored after it was lost. * Alphanumeric values are now supported for the **Zip code** field that must be specified when making deposits using **BridgerPay**. * In the B2CORE UI, the withdrawal amounts that are automatically calculated after clicking the **25%**, **50%**, **75%**, or **100%** button are now displayed with decimal separators properly placed. The decimal separators were missing if the Russian language was selected in the B2CORE UI. *** ### April 18, 2023 [#april-18-2023] #### Resolved issues [#resolved-issues-14] * Fixed an issue due to which event notifications failed to be delivered through Slack and email if the recipients list included the Back Office users whose profiles were removed. * Fixed an issue due to which the Back Office could hang when attempting to view the **Events Log** details. * Fixed an issue that prevented loading of the data on the **Finance** > **Payout** page. * Fixed issues due to which the successful deposits made using the **PerfectMoney** and **FairPay** payment providers could be assigned the **Pending** status in the Back Office. * Fixed an issue due to which the credentials of the payment provider assigned to the **WireDocument** method were displayed to clients when making deposits in the B2CORE UI. ### April 4, 2023 [#april-4-2023] #### New features [#new-features-20] ##### Detailed cTrader data available [#detailed-ctrader-data-available] The balance and equity values are now displayed for clients’ cTrader accounts in the Back Office and B2CORE UI, as well as the data about deals, orders and open positions. ##### Bulk deposits to client accounts [#bulk-deposits-to-client-accounts] It has become possible to update account balances for multiple clients at once by using the **Update balances** button on the **Client** > **Accounts** page. After clicking the button, upload a CSV file containing a list of client emails, account IDs and amounts that you want to deposit to each account. #### Improvements [#improvements-20] * The **email**, **password** and **password\_confirm** fields are now displayed on the **Custom fields** tab when configuring the Registration wizard in the Back Office. You can change the order in which they are displayed in the registration form in the B2CORE UI. * To eliminate B2TRADER connection issues caused by the incorrectly specified value in the **Callback URL** field, this field has been removed from the configuration settings of the B2TRADER platform. The URL for sending callback messages is now set during B2CORE setups. * Tooltips are now displayed when positioning a cursor over the **Process**, **Cancel** and **Change status** buttons that can be used to manually process the transactions with the **Partial** status on the **Finance** > **Transactions** page. #### Resolved issues [#resolved-issues-15] * Fixed an issue due to which, after editing the data on the Back Office user details page, an email notification based on the **AdminUserCreated** template was sent. * Fixed an issue due to which newly registered clients couldn’t pass a verification procedure after clicking the **Next step** button on the **Verification** page in the B2CORE UI. * Fixed an issue due to which an error occurred when uploading the documents required for verification in the B2CORE UI. * Fixed an issue due to which the status of a closed help desk ticket could be updated in the B2CORE UI only after reloading the page. *** ### March 21, 2023 [#march-21-2023] #### Improvements [#improvements-21] * The **OTC 365** payment provider has changed its name to **ChipPay**; B2CORE continues to support deposits and withdrawals made with the provider. * The options for managing event notifications have been updated as follows: * The list of events about which Back Office users can be notified has been expanded by adding new [event types](../back-office-guide/references/event-types-for-triggering-event-notifications-for-back-office-users). To set up event notifications, navigate to **System** > **Event notifications**. * It has become possible to send event notifications to multiple Back Office users. * The available channels for sending event notifications now include Slack, Telegram, email and SMS. For Slack and Telegram, it has become possible to choose whether to send notifications to public channels and groups or as personal messages. * For each Back Office user, it has become possible to specify the identifiers of their personal Slack and Telegram chats for receiving event notifications. The identifiers are specified on the user details page upon navigating to **System** > **Users**. * On the **System** > **Logs** page, you can now track actions made by Back Office users. * The **Internal comment** column has been added to the **Finance** > **Deposits** and **Finance** > **Payout** pages. #### Resolved issues [#resolved-issues-16] * Fixed an issue due to which country restrictions didn’t apply to the document types defined for a verification procedure. * Fixed an issue due to which no data could be displayed in the **TradingView** widget after switching between workspaces in the Trading UI. * Fixed an issue due to which the **Resolved** status assigned to a ticket in an external help desk system appeared as **Duplicate** in the B2CORE UI. * Fixed an issue due to which the error “Signature is invalid” occurred when depositing funds using the **Mercuryo** payment provider. *** ### February 28, 2023 [#february-28-2023] #### New features [#new-features-21] ##### New PS integrations [#new-ps-integrations-9] A new payment system, **Nicepay**, has been integrated, with support for deposit operations. #### Improvements [#improvements-22] * It has become possible to configure separate verification flows for different types of clients. * It has become possible to configure the settings of the **Simple Exchange** widget by navigating to **Promotion** > **Dashboard** in the Back Office. * The following fields for configuring mobile banners are now optional: **Title**, **Subtitle**, **Button Title** and **Preview Text**. * The invalid data contained in a CSV or TSV file is now ignored when importing client-related data on the **System** > **Import data** page. Such import operations are assigned the **Success with errors** status. * Fixed table headers and filter fields are now used for tables displayed on various pages of the Back Office. * The internal Back Office library has been updated and now includes updated form fields, pagination components and others. #### Resolved issues [#resolved-issues-17] * Fixed an issue due to which it was impossible to automatically upload predefined options for custom fields added for the **Constructor** method by retrieving them from a specified API resource if the API response was not linear. * Fixed an issue due to which temporary bonuses didn’t expire after reaching the specified lifetime value. * Fixed an issue due to which it could have been impossible to close the documents opened for preview in the **Verified documents** section in the B2CORE UI. *** ### February 14, 2023 [#february-14-2023] #### Improvements [#improvements-23] * When adding custom fields for deposit and withdrawal methods using the **Constructor** payment provider, it has become possible to upload a list of field options by connecting to a client’s API and retrieving the required values instead of specifying them manually. * It has become possible to make internal transfers from the wallets of the **partner** type to the wallets of the **personal** type and trading accounts. * When creating client accreditation tests, it has become possible to specify test descriptions in the **Details** field. The test descriptions are displayed under test titles in the B2CORE UI. * It has become possible to filter client requests by the **Dealing approved** and **Compliance approved** columns on the **Clients** > **Requests** page in the Back Office. * On the **Services** > **Clients** page, it has become possible to filter data by the dynamic columns. * For exchange transactions made by the admin user in the Back Office, the Exchanged By column now displays the name or email address of the admin who made a transaction. #### Resolved issues [#resolved-issues-18] * Fixed an issue due to which the **Hold Amount** column wasn’t exported to an XLSX or CSV file from the **Clients** > **Accounts** page of the Back Office. *** ### January 31, 2023 [#january-31-2023] #### New features [#new-features-22] ##### Export and import options for Back Office user groups [#export-and-import-options-for-back-office-user-groups] It has become possible to export and import the data about Back Office user groups on the **System** > **Users** > **Groups** page. #### Improvements [#improvements-24] * The total deposit, total net deposit and total withdrawal amounts in USD are now displayed for each client on the **Accounts** tab in client details. Additionally, the total deposits and total withdrawals by all clients are displayed on the **Finance** > **Deposits** and **Finance** > **Payouts** pages. * The **Select**, **Select All** and **Edit selected clients** buttons have been added to the **Clients** > **General** page. Use them to collectively assign client tags and change client profile statuses. * When assigning tags to clients, it has become possible to replace the existing tags with the new ones by enabling the **Overwrite current values** option. * The email template used for notifications about new comments in the Event Log now includes the name of an admin user who has been tagged in a comment along with the admin email address. * When configuring deposit and withdrawal methods in the Back Office, a list of available currencies is now sorted alphabetically. #### Resolved issues [#resolved-issues-19] * Fixed an issue due to which an incorrect localization option could have been applied to emails notifying clients about newly created trading accounts. *** ### January 19, 2023 [#january-19-2023] #### New features [#new-features-23] ##### New PS integrations [#new-ps-integrations-10] * The **FairPay** payment provider has been integrated, with support for deposit operations. * The option to make withdrawals in fiat currencies using the **Mercuryo** payment provider has become available. ##### Match-Trader integration [#match-trader-integration] A new all-in-one FX trading platform **Match-Trader** has been integrated, providing the capability for managing client trading accounts and finances via the Back Office and B2CORE UI. ##### cTrader integration with IB [#ctrader-integration-with-ib] cTrader has been integrated with Introducing Brokers (IB), allowing you to configure and enable IB programs on this platform. ##### Feedback for HelpDesk services [#feedback-for-helpdesk-services] The system for collecting feedback has been integrated, enabling your clients to assess the quality of your HelpDesk service and leave their comments about resolved tickets. #### Improvements [#improvements-25] * It has become possible to import data related to IB programs (such as IB Email, Client Email and IB Type ID) by using a new import option named `import-ibs`, available upon navigating to **System** > **Import Data** in the Back Office. * When configuring verification levels in the Back Office, it has become possible to specify level descriptions separately for the B2CORE UI (in the HTML format) and for the mobile app (in the JSON format). * Specifying banner titles for desktop and mobile app versions has become optional. * When manually processing transactions with the **Partial** status, listed on the **Finance** > **Transactions** page, the modal windows containing explanations of further user actions are now displayed after clicking the **Push**, **Cancel** or **Change status** buttons. * To allow various departments to add specific parameters for configuring paid services, it has become possible to set up access to service parameters for different groups of Back Office users by navigating to a new **Services** > **Categories** page. * For temporary bonus programs, the **Traded lots** field is now displayed in the B2CORE UI, showing the volume traded by a client and matching the requirements of a bonus program. * It has become possible to set up delivery of email notifications to clients each time they sign in to the B2CORE UI. Such notifications contain the following sign-in details: date and time, IP address, device type, browser and location. #### Resolved issues [#resolved-issues-20] * Fixed an issue due to which it was impossible to upload a profile picture via the B2CORE UI if the uploaded image needed to be cropped to match the required size of 200x200 pixels. * Fixed an issue due to which admins who were permitted to view only the clients with certain tags couldn’t view the data on the **Bonuses** > **Bonus Distribution** page and create bonuses. * Fixed an issue due to which an error occurred after passing a client accreditation test if it included a close-ended question for which no correct answer options were specified. ### December 20, 2022 [#december-20-2022] #### Improvements [#improvements-26] * It has become possible to limit session time for Back Office users by specifying the session duration using the **User-admin Session** option added to the **System** > **Settings** page. After reaching a specified time limit, users are automatically signed out of the Back Office. * The **Device Management** section available on the **Profile** > **Security** page has been updated to log data about devices, IP addresses and locations from which clients sign in the B2CORE UI. * A new **IB** > **Reports** > **Trades** page has been added to IB programs in the B2CORE UI. #### Resolved issues [#resolved-issues-21] * Fixed an issue due to which it was sometimes impossible to import to the Back Office the data about client dates of birth. * Fixed an issue due to which an error occurred when uploading client profile pictures via the Back Office. *** ### December 6, 2022 [#december-6-2022] #### Improvements [#improvements-27] * The option to specify ranges of MT account numbers that can be assigned to newly created client accounts is now available to MT platforms switched to the Frontman v4 connection. * To help you identify MT groups, the name and identifier of a product to which a selected MT group belongs are now displayed when moving MT accounts between the groups. * To prevent incorrect interpretation of decimal amounts, it is no longer possible to change a character specified as a decimal separator on the **System** > **Localizations** page. *** ### November 24, 2022 [#november-24-2022] #### New features [#new-features-24] ##### Data import to the Back Office [#data-import-to-the-back-office] It has become possible to import data about clients and their accounts that was previously exported from other third-party systems to a CSV or TSV file. For this purpose, a new **System** > **Import Data** menu item has been added to the Back Office. #### Improvements [#improvements-28] * On the **Clients** > **General** page, it has become possible to assign tags to multiple clients or change their profile statuses at once. * **Profile pictures for Back Office users**: it has become possible to upload avatars to Back Office user profiles. Avatars can help you quickly identify users that add comments to the Event log. * It has become possible to confirm withdrawals that clients make in the B2CORE UI by entering 2FA codes from the **Google Authenticator** app. * A new **Exchanged By** column has been added to the **Finance** > **Exchange** page and the **Transactions** tab in the client details. The column indicates if an exchange operation was made by a client in the B2CORE UI or by an admin in the Back Office. * On the **Finance** > **Deposit wallets** page, it has become possible to select filtering values for the **Method** and **Currencies** columns. * The template used for Slack notifications about withdrawal requests has been updated to include the following fields and links to the corresponding Back Office pages: **Project**, **Client name**, **Client email** and **Task** (containing a link to a withdrawal request that must be approved or rejected). * A new set of permissions for managing parameter presets (which can be configured on the **Clients** > **Services** > **Saved presets** page) has been added to the **Client’s services** permission category: * View presets * Create presets * Update presets * Delete presets * For deposit and payout methods using the payment provider titled **Constructor**, it has become possible to select a field type (**text** or **Select with autocomplete**) when adding custom fields to a method. Depending on a selected field type, the added fields are displayed in the B2CORE UI as simple text fields or text fields with suggested values. ### November 8, 2022 [#november-8-2022] #### New features [#new-features-25] ##### Commission Cashback [#commission-cashback] A new **Commission Cashback** menu item has been added to the Back Office, making it possible to distribute rewards between the users who have contributed to the promotion of a specified token. The rewards are distributed as portions of commissions earned from trading the token on an exchange for a given period. #### Improvements [#improvements-29] * When configuring banners on the **Promotion** > **Banners** page, it has become possible to select an appropriate banner type: **Desktop** or **Mobile**. * On the **Event log** page, when attaching an image to a message, a user can now expand this image without opening it on a new tab. * For client requests of the **Transfer** type, the **From free funds** field has been added, displaying the amount of available funds on a client’s account. * For balance change operations, the **Operation type** names have been changed as follows: * from **Credit** to **Deposit** * from **Debit** to **Withdraw** * For the **Advanced** step of the **Registration** wizard, it has become possible to apply the `unique_id_card_number` rule to ensure that clients specify unique ID card numbers during registration. * It has become possible to check whether transactions with the **Partial** status have been executed on the MetaTrader platform by clicking the magnifying glass icon: * If a transaction was executed on a trading platform, its status in the Back Office changes to **Done**. * If a transaction is not found on a trading platform or the platform doesn’t support transaction check, you can process this transaction in the Back Office by clicking the **push**, **cancel** or **confirm** button. * The **cancel** button can now be used to cancel a transaction in the Back Office and attempt to cancel it on a trading platform if this transaction is found there. * The order in which deposit and withdrawal methods are displayed to clients in the B2CORE UI is now determined by the priority assigned to these methods in the Back Office. * When configuring menu options on the **Promotion** > **Menu** page, it has become possible to select the types of clients for which a particular menu option is available in the B2CORE UI. * The **Export** button has been added to the **Security** > **Search by IP** page, providing the capability to export filtered data to a CSV or XLSX file. * The data displayed on the **Services** tab in the client details can now be filtered by all columns. #### Resolved issues [#resolved-issues-22] * Fixed an issue due to which some clients couldn’t receive Slack notifications related to the Event log and withdrawal operations. * Fixed an issue that caused incorrect calculation of bonuses for trading accounts having the **Factory** value set to 100. *** ### October 25, 2022 [#october-25-2022] #### Improvements [#improvements-30] * It has become possible to allocate temporary bonuses only to trading accounts included in the selected MT platform groups. * It has become possible to upload 7-Zip and RAR archives to client folders using the **Upload multiple files** option on the **Files** tab in the client details. * After changing a client’s email address, the email used for the HelpDesk service now changes automatically. This enables clients to view the history of reported tickets, their statuses and message threads. * When entering a value in the **Withdrawal amount** field in the B2CORE UI, the **Source amount** field is now filled in automatically and displays a withdrawal amount in conversion to a required currency. * The answers to open-ended questions used in client tests are now saved after clicking the **Next** button and are not discarded if a client goes back to previous questions. * The banners configured for the **Referral Programs** section of the B2CORE UI are now displayed on a dashboard instead of being placed on top of the page. *** ### October 11, 2022 [#october-11-2022] #### New features [#new-features-26] ##### BitWallet supports withdrawal operations [#bitwallet-supports-withdrawal-operations] In addition to deposit operations, the **BitWallet** payment provider now supports withdrawal operations. ##### A White Label solution for cTrader [#a-white-label-solution-for-ctrader] It has become possible to configure a connection to the cTrader platform as a White Label solution by specifying the required company name in the **White label** field. #### Improvements [#improvements-31] * It has become possible to specify a lifetime for announcements to be displayed to clients in the B2CORE UI. The announcements expire on the **Due Date** specified in the announcement details and are no longer displayed to clients. * When exporting data from the Back Office to a file, it has become possible to choose the file format: XLSX or CSV. * The **Burn if balance \< 0** option has been revised to burn bonuses once equity on an MT account becomes less than the account credit (Equity \< Credit). *** ### September 27, 2022 [#september-27-2022] #### New features [#new-features-27] ##### New PS integrations [#new-ps-integrations-11] A new payment provider, **Advanced Payment Systems (APS)**, has been integrated, with support for deposit operations. ##### Password reset for master and investment accounts [#password-reset-for-master-and-investment-accounts] When clients reset passwords for their MetaTrader 4/5 accounts in the B2CORE UI, they are now required to select whether they want to reset a password for their master or investment account. #### Improvements [#improvements-32] * In order to control which images clients upload as their profile pictures in the B2CORE UI, a new request type named `Avatar` has been added. * The maximum allowed amount for internal transfer operations per day can now be set in the **Daily internal transfer** field in the verification level details. If a client wants to make an internal transfer after reaching a specified limit, a request for the internal transfer must be approved by an admin. * The **Total Balance** widget now supports conversion of the total balance on all client’s wallets to any of the currencies available in your B2CORE system. * The buttons to process, confirm or cancel transactions with the **Partial** status have been added to the **Finance** > **Transactions** page. * For demo-type products, it is now required to fill in the **Starting Amount** field. This field indicates the initial amount that is credited to demo accounts created for this product. #### Resolved issues [#resolved-issues-23] * Fixed an issue due to which it was impossible to directly navigate to a comment added on the **Even log** tab in the client details after clicking a notification displayed in the top bar. * Fixed an issue due to which the client name wasn’t displayed in the email sent after successful registration. *** ### September 13, 2022 [#september-13-2022] #### New features [#new-features-28] ##### Support for hedged and netted account types for cTrader [#support-for-hedged-and-netted-account-types-for-ctrader] A new option to specify a hedged or netted account type is now available when creating products for the cTrader platform. Based on the product settings, clients can select an account type when creating cTrader accounts in the B2CORE UI. ##### A new event type to trigger event notifications [#a-new-event-type-to-trigger-event-notifications] It has become possible to receive event notifications via Slack and email about accreditation tests passed by clients. ##### The capability to select a fixed percentage to transfer or withdraw [#the-capability-to-select-a-fixed-percentage-to-transfer-or-withdraw] In the B2CORE UI, clients can now select a fixed percentage of their account balance that they want to transfer or withdraw (the available options: 25%, 50%, 75% and 100%). #### Improvements [#improvements-33] * The process of configuring a workflow for the Registration wizard has been enhanced to allow you to quickly add the Basic Information fields and specify their settings on the **Custom fields** tab. * For close-ended questions included in client accreditation tests, it is now possible to choose if you want to add a single or multiple correct answers. * The **Internal transfer** type has been separated from the rest of the transfer operations. You can filter a list of transfer operations by the **Type** column. * On the **Finance** > **Deposit Wallets** page, the **Method** column now displays a link to the details of a deposit method used to generate a wallet address. * The **Test connection** option for the B2TRADER platform now validates the credentials specified in the **Front Office Client ID** and **Front Office Client Secret** fields in addition to the other connection settings. * The tabs displayed on the client details page have been reorganized for easier navigation. * It has become possible to select specific folders and files that you want to download from the **Files** tab displayed on the client details page. * A client phone number is now displayed in the **Personal information** section of a client profile in the B2CORE UI. * The language specified in the **Communication Language** field in a client profile is now automatically applied to the **Language Department** field when creating a ticket on the **HelpDesk** page in the B2CORE UI. * It has become possible to search submitted tickets by their **Ticket ID** on the **HelpDesk** page in the B2CORE UI. #### Resolved issues [#resolved-issues-24] * Fixed an issue due to which the description of the first selected deposit method was displayed for the other deposit methods available to a client in the B2CORE UI. * Fixed an issue due to which the default B2TRADER workspace wasn’t restored after clicking the **Reset** button if the workspace had previously been closed. *** ### August 30, 2022 [#august-30-2022] ##### Exchange and transfer operations between various platforms [#exchange-and-transfer-operations-between-various-platforms] It has become possible to exchange and transfer funds between wallets and accounts created on the B2TRADER, cTrader and MetaTrade platforms. ##### Support for Google Pay [#support-for-google-pay] You can enable Google Pay for specific payment systems to add one more option for your clients to deposit funds. ##### A new bonus expiration mechanism [#a-new-bonus-expiration-mechanism] It has become possible to configure partial bonus expiration for clients upon withdrawing funds. The new options have been added to the **Bonuses** section, which is available in **System** > **Settings** in the Back Office. #### Improvements [#improvements-34] * A new **Client Tags** menu item has been added to the **System** > **Users** section. Use this option to view a list of existing client tags and create new ones. * The following improvements related to the **Event log** have been introduced: * The **Events log** > **List** page now shows a list of comments added in the Back Office that you can view based on the assigned client tags. * It has become possible to add descriptions to the Event log categories in order to indicate the purpose of each category. * Slack notifications about new comments added on the **Event log** tab now contain the text of these comments. * In the top bar, the red counter badges are now only displayed when the number of unread notifications is not zero. * The links to download cTrader for supported operating systems have been added to the **cTrader** page in the B2CORE UI. * The **Equity** charts displayed on MT account cards and in the account details in the B2CORE UI have been synchronized to show the same data. * The **Next step** button is no longer displayed on the **Verification** page in the B2CORE UI if no KYC wizard is specified for a verification level in the Back Office. * On the **Exchange** page in the B2CORE UI, more accurate exchange results are now displayed in the **Amount To** field. #### Resolved issues [#resolved-issues-25] * Fixed an issue due to which the country allocation rules were ignored when allocating newly registered clients among managers. * Fixed an issue due to which it was impossible to withdraw funds using the manual and constructor methods unless a PS currency (in which funds are debited) was specified, which is not a requirement for these methods. * Fixed an issue due to which it was impossible to search through a list of tickets reported by a client on the **HelpDesk** page in the B2CORE UI. *** ### August 16, 2022 [#august-16-2022] #### New features [#new-features-29] ##### New KYC provider integrations [#new-kyc-provider-integrations] A new KYC provider, **Sapuma**, has been integrated, adding one more option for running an automatic KYC verification process. When using **Sapuma**, in addition to required fields, you can define a list of custom fields (such as NIK, Place of Birth, Email, First Name, Date of Birth, Phone Number, Address, City, State, Country and ZIP Code) that your clients must fill in to get verified unless these fields have been already specified in a client profile. ##### Deposit method constructor [#deposit-method-constructor] It has become possible to configure a new deposit method using the payment provider titled **Constructor**, which allows you to create a custom deposit form by adding to it a required number of text fields that your clients must fill in when creating requests for deposit operations. #### Improvements [#improvements-35] * For bank transfer operations made using the **Midtrans** payment provider, clients now should specify only a transfer amount and select a bank. The other required fields are filled in with the data specified in a client profile. * The Backend images menu item has been added to the System section, allowing users to change logos and other images related to the Back Office. * It has become possible to add questions of three types to client accreditation tests: * open — indicates an open-ended question that can be answered by clients in free form. * close — indicates a close-ended question that can be answered by clients by choosing only one correct answer from a given list of options. * questionnaire — indicates a multiple choice question that can be answered by clients by choosing one or more answers from a given list of options. * A new status **Test results pending** has been added to specify that a client passed an accreditation test and the admin should check test results and either approve or reject them. * When MT4 and MT5 accounts are added to another account group, the account details (such as **Product ID**, **Caption** and **Currency**) are now updated automatically according to the group configuration. If the previous group was associated with a product that supports multiple currencies, the **Product ID** doesn’t change. * The **Events log** has been enhanced as follows: * The buttons **View comments** and **Reply** have been added to the **Events log** tab, enabling you to expand comment threads and add new comments to them. * Slack notifications about new comments for which you are marked as a recipient now contain links to particular comments added in the Back Office. * The currencies enabled for the **B2TRADER** product in the Back Office are now automatically added as assets to the exchange. * The bulk action to zero out client B2TRADER accounts has been enhanced to support the following options: * Enable or disable email distribution informing clients about an executed bulk action. * Execute a bulk action for all enabled currencies. * Specify the identifier of a withdrawal operation in the System log. * Support additional statuses identifying whether a bulk action was completed. * The date and time displayed for *transfer*, *deposit* and *withdrawal* transactions on the **Transactions** page of the B2CORE UI now indicate when transactions were processed. #### Resolved issues [#resolved-issues-26] * Fixed an issue due to which on the **System** > **Countries** page, the name of a national currency was displayed in the **Citizenship** column instead of the **Currency** column. *** ### August 2, 2022 [#august-2-2022] #### New features [#new-features-30] ##### A new mechanism for configuring automatic withdrawals [#a-new-mechanism-for-configuring-automatic-withdrawals] The options for enabling automatic withdrawals have been detached from verification levels and become associated with the **payout** operation type (available upon navigating to **System** > **Operation types**). The following new settings have been added to the **payout** operation type details: * **Auto withdrawal** — this setting enables or disables the auto-withdrawal feature. * **Auto processing rules** — this setting specifies for which payout groups the auto withdrawal feature is enabled. All payout methods included in the specified payout groups will support auto-withdrawals. For each verification level, the maximum amounts allowed for automatic withdrawals can be set in the **Auto withdraw** field located in the verification level details. ##### Client accreditation tests associated with verification levels [#client-accreditation-tests-associated-with-verification-levels] When configuring a verification level, it is now possible to use a new **Passed Tests Needed** option and select a required accreditation test that your clients must pass before submitting documents for obtaining this verification level. #### Improvements [#improvements-36] * In order to preserve settings of the configured platforms, it is no longer possible to remove an existing external connection if it is associated with the platform set up to use this connection. * The columns that were previously available in the currency details for displaying detailed information about currencies (such as **Markup: Sell**, **Markup: Buy**, **Precision** and **Block explorer**) have been moved to the **Currencies** > **Currencies** section. Here, you can now view the complete data related to a currency as well as filter and sort this data by the available columns. * The maximum number of digits used to represent amounts in a currency in the B2CORE UI has been increased to 18. * The account cards shown to your clients in the B2CORE UI now display the time when an account balance was last updated and stay active even if the data about account balance is expired, still allowing your clients to operate their accounts. #### Resolved issues [#resolved-issues-27] * Fixed an issue that made it impossible to add the **email** option to the list of channels for the existing event notification. * Fixed an issue due to which the **Quick Links** widget didn’t display the link to the **IB** section in the case when this section was available in the B2CORE UI. *** ### July 19, 2022 [#july-19-2022] #### New features [#new-features-31] ##### Event Notifications [#event-notifications] With this release, it has become possible to set up notifications about particular events and send them via Slack and email. To configure notifications, navigate to a new **System** > **Event Notifications** section of the Back Office. The following events may trigger notifications: * **Tagging users in the Event log** — notifications about the notes and comments added on the **Event log** tab in the client details, for which users are marked as recipients. * **Payout requests** — notifications about payout requests created by clients. ##### Slack bot integration [#slack-bot-integration] A Slack bot has been integrated, adding one more channel for sending event notifications. #### Improvements [#improvements-37] * The **Mailing Log** tab has been added to the client details, allowing you to view a list of emails sent to a specific client. On this tab, you can export the email list to a CSV file. * The **Hide balances** option has been added to the **Wallets** section of the B2CORE UI, allowing clients to hide balances on their wallets for security purposes. * The **Use redirect location only** option has been added to the **PAMM** > **Links** section of the Back Office. With this option, you can redirect your clients to your own PAMM platform (using the URL specified in the **Redirect location** field) without attempting to authenticate them and create payment accounts. #### Resolved issues [#resolved-issues-28] * Fixed an issue due to which it was impossible to display the available options in the **Document groups** field in the verification level details. * Fixed an issue due to which clients were redirected to the **Sign In** page instead of the **Sign Up** page upon clicking the **Not a member? Sign up now** option in the case when they had previously signed out from the B2CORE UI. * Fixed an issue due to which it was impossible to save color settings applied to the **TradingView** widget after reloading the page. *** ### July 5, 2022 [#july-5-2022] #### New features [#new-features-32] ##### Enhanced security permissions for user groups [#enhanced-security-permissions-for-user-groups] With this release, you can restrict user access to entire sections of the B2CORE UI by disabling specific “view” options in the **System** > **Groups** section. #### Improvements [#improvements-38] * A new engine for the payment system RAMP has been implemented, following the recent major update to B2BINPAY, an integrated payment provider. * When creating a new verification level, you can now choose from among the available KYC providers that are listed in the Wizard drop-down menu displayed in the **Verification** > **Levels** section. * The Wallets Overview widget now displays the aggregate balance on all user wallets opened in the same currency. * It has become possible to introduce custom steps to the Registration Wizard pages displayed for the Advanced workflow type. #### Resolved issues [#resolved-issues-29] * Fixed an issue due to which duplicate transaction details were displayed upon rejecting a transfer request. * Fixed an issue due to which an incorrect commission currency was displayed in the Market/Limit widget. * Fixed an issue due to which different currencies were highlighted with the same color in the Wallets Overview widget. *** ### June 21, 2022 [#june-21-2022] #### New features [#new-features-33] ##### New PS integrations [#new-ps-integrations-12] A new payment provider, **PaymentAsia**, has been integrated, with support for both deposit and withdrawal operations. ##### Event log categories [#event-log-categories] It has become possible to define categories to organize notes and comments that are added on the **Event log** tab in the client details. For this purpose, a new **Clients** > **Events log** section has been added to the Back Office. ##### Enhanced multiselect fields for service parameters [#enhanced-multiselect-fields-for-service-parameters] The multiselect fields available for configuring service parameters (in the **Clients** > **Services** > **Parameters section**) have been modified to allow you to quickly move predefined options between two columns to enable or disable them. #### Improvements [#improvements-39] * The process of creating eWallet and B2TRADER products has been streamlined: it is now possible to select and enable multiple currencies when creating your products. * The following B2TRADER widgets can be added to the default Dashboard layout: **Assets**, **Watch List**, **Open Orders**, **Filled Orders** and **Order Book**. * It has become possible to hide QR codes displayed for signing in to the B2CORE UI from the **Sign In** page by leaving the Lifetime parameter (which is available in the **System** > **Settings** section of the Back Office) empty. * The size of QR codes displayed on the B2CORE **Sign In** page has been increased, making it possible to scan them using mobile devices with iOS 13 and 15. * The option for toggling password visibility by clicking the **Eye** icon has become available on the B2CORE **Sign In** page. * The password reset process for MT accounts has been streamlined: the window for selecting a password reset option (by either generating a random password or specifying a custom password) is no longer displayed if the Change Account Password (MetaTrader) wizard is disabled. * A request form on the HelpDesk has been extended to include a specific set of fields depending on the selected request option. #### Resolved issues [#resolved-issues-30] * Fixed an issue that made it impossible to sign in to the B2CORE UI when Google reCAPTCHA v2 was enabled. * Fixed an issue that prevented QR codes from being displayed on the B2CORE Sing In page when the light theme was enabled. * Fixed an issue due to which the Settings section of the B2CORE UI was unavailable in the case when a client wasn’t signed in to B2TRADER. *** ### June 7, 2022 [#june-7-2022] #### New features [#new-features-34] ##### Support for a new trading platform [#support-for-a-new-trading-platform-1] With this release, **cTrader** has been integrated, allowing your clients to create cTrader trading accounts via the B2CORE UI. ##### Signing in to the B2CORE UI with QR codes [#signing-in-to-the-b2core-ui-with-qr-codes] It has become possible to sign in to the B2CORE UI by scanning QR codes displayed on the **Sign In** page from the B2BROKER app to which you are already signed in. ##### Custom passwords for MT accounts [#custom-passwords-for-mt-accounts] The option to set up custom passwords for MT accounts has become available in B2CORE. Now clients can choose to set up custom passwords or generate random passwords for their MT accounts. #### Improvements [#improvements-40] * The B2CORE signup process has been improved for the cases when an expired invitation link is used to complete registration: the corresponding message is now displayed to users, and after that they are redirected to the **Sign Up** page of the B2CORE UI. * The option to select widgets that you want to shown on the default **Dashboard** via the B2CORE UI has been added. For this purpose, enable the **Show by default** switch for the required widgets in the **Promotion** > **Dashboard** section of the Back Office. * It has become possible to upload profile photos and specify nicknames for clients via the Back Office and B2CORE UI. #### Resolved issues [#resolved-issues-31] * Fixed an issue that made it impossible to open the details of MT demo accounts and display analytics data on them via the B2CORE UI. * For deposit methods for which transaction and payment currencies are set, fixed an issue due to which the minimum and maximum deposit values specified for a payment currency were applied to a transaction currency instead, which resulted in showing incorrect validation messages for the amounts that clients specified in the **Deposit amount** field via the B2CORE UI. * Fixed an issue that caused the data to be displayed beyond the column borders in the **Quotes Widget MT** in the case of a small widget size. * Fixed an issue that caused display of a list of available B2TRADER widgets instead of the **Quick Limit Order** and **Quick Market Order** widgets after their adding to a space. * Fixed the following issues related to the B2TRADER widget tooltips: * Fixed an issue that caused a B2TRADER space to become inactive after the last widget tooltip was displayed. * Fixed an issue due to which widgets located in the upper part of a B2TRADER space were not fully shown during the display of their tooltips. * Fixed an issue that resulted in showing the tooltip for an inactive **TradingView** widget. *** ### May 24, 2022 [#may-24-2022] #### New features [#new-features-35] ##### Support for new platforms [#support-for-new-platforms] With this release, **OneZero** and **PrimeXM** have been supported. The section for managing OneZero and PrimeMX accounts is now available under the **Platforms** menu item in the B2CORE UI. To display these accounts, enable the **OZ/PXM** option (**Promotion** > **Menu**) in the Back Office. ##### New KYC provider integration [#new-kyc-provider-integration] A new KYC provider, **ShuftiPro**, has been integrated, allowing you to verify client identity and documents. ##### A new Custom Commissions widget [#a-new-custom-commissions-widget] A new widget, containing data on commissions that have been customized for clients trading on particular markets, is now available upon navigating to **Profile** > **Settings** via the B2CORE UI. This widget is only displayed to the clients who have been added to the **Commissions** / **Custom** group. #### Improvements [#improvements-41] * It has become possible for clients to set up the default configuration for the **Dashboard** via the B2CORE UI by selecting the required widgets and customizing their parameters, such as the size and location on the dashboard. The default configuration set by a client is restored after resetting the **Dashboard** or signing out of the B2CORE UI. * The **I Agree to** checkbox, allowing you to get consent to custom agreements and terms from your clients, has been added to the cards for creating MT4/MT5 accounts. A link to the document to which clients should agree is specified in the **Agreement Link** field when configuring products via the Back Office. #### Resolved issues [#resolved-issues-32] * Fixed an issue that prevented loading of the **Trades History** widget when clicking the **B2TRADER** menu item in the B2CORE UI. * Fixed an issue with the **TradingView** widget that Firefox users might encounter: the widget displayed no data after switching between menu items in the B2CORE UI in the case when the widget had been previously changed to display specific data. * Fixed an issue that caused display of an incorrect flag on the **Sign up** screen when registering to the B2CORE UI with a phone number starting with +7. *** ### April 26, 2022 [#april-26-2022] #### Improvements [#improvements-42] * A new **Reaction Date** field has been added to the announcement details (**Promotion** > **Announcements**) in the Back Office. The new field shows the date and time when a client interacted with an announcement via the B2CORE UI. * When downloading client files from the Back Office, the filenames displayed in the **Caption** column on the **Files** tab in the client details are now used as filenames for the downloaded files. * The **Compliance approved** field has been added to client requests for withdrawals as well as to the list of withdrawal operations displayed upon clicking **Finance** > **Payouts**. This field identifies whether a compliance check for a withdrawal operation has been passed. The status of this field can be changed only by admin users who have been assigned the corresponding **Compliance approved** permission. #### Resolved issues [#resolved-issues-33] * Fixed an issue related to MT accounts that caused displaying MT4 accounts in the MT5 menu option and MT5 accounts in the MT4 menu option via the B2CORE UI. * Fixed an issue that caused the **Quick Link** widget to display no data in case the PAMM option has been enabled for the B2CORE UI. * Fixed an issue due to which the correct email and phone confirmation codes would not be accepted during the validation process under certain circumstances. *** ### April 12, 2022 [#april-12-2022] #### Improvements [#improvements-43] * Support for withdrawal operations has been added for the **Midtrans** payment provider. * The capability to customize the priority of exchange rate providers for each currency pair has become available via the Back Office. For this purpose, the **Rates Custom Priority** field has been added, allowing you to set the existing exchange rate providers in a desired order (for details, refer to [How to set priorities for exchange rate providers](../how-to-articles/manage-currencies/how-to-set-priorities-for-exchange-rate-providers)). * The option for auto withdrawal has become applicable to all payment providers integrated into B2CORE. Clients do not need a B2CORE admin’s approval to withdraw amounts that do not exceed those specified in the **Auto withdraw** field for each verification level. * It has become possible to change the text color when adding notes on the **Event log** tab. * The **Wallets Overview** widget has been renamed to **Total Balance** and now displays the total balance on all client’s wallets in conversion to a selected currency (the widget supports the following currencies: USD, EUR, INR, CAD and GBP). A list of currencies that will be available to clients while displaying the total balance can be configured upon navigating to **Promotion** > **Dashboard** in the Back Office. A maximum of three currencies can be selected for the widget. * The **Walkthrough** widget visibility via the B2CORE UI is now configured upon navigating to **Promotion** > **Dashboard** in the Back Office. #### Resolved issues [#resolved-issues-34] * Fixed an issue that prevented widget data from being loaded in the mobile version of B2CORE UI when a device was rotated to a landscape orientation. * Fixed an issue that prevented the **Filled orders** and **Inactive orders** widgets from being fully loaded via the B2CORE UI. *** ### March 29, 2022 [#march-29-2022] #### Improvements [#improvements-44] * The mechanism for obtaining currency rates from B2BINPAY has been enhanced to provide more exchange rate data for each currency pair and deliver it faster. * Email notifications sent to admin users upon creating new records on the **Event log** tab of the Back Office have been altered: the **Client ID** field is now clickable and contains a URL that points to the corresponding record logged via the Back Office; the fields that display short and full company names have been added. * The **Export** button has been added to the **Deposit**, **Payout**, **Transfer**, **Exchange** and **Withdrawal Wallet List** pages that are available in the client details via the Back Office, enabling export of the data that is contained on these pages to CSV files. #### Resolved issues [#resolved-issues-35] * Fixed an issue due to which selection of deposit or withdrawal methods has been available to the clients who have not completed KYC verification via the B2CORE UI. * Fixed an issue that resulted in displaying data on all client’s accounts on the **Analytics** page of the B2CORE UI instead of displaying only the data on selected accounts. * Fixed an issue due to which it was impossible to display the **Total Balance** chart in the **Wallets Overview** widget if the total balance was equal to zero. * Fixed the following issues related to the **Trading View** widget: * Fixed an issue that prevented the **Volume** chart from being displayed in the **Trading View** widget after adding the corresponding indicator. * Fixed an issue that prevented the **Trading View** widget from displaying data after switching between tabs and then returning to the tab containing the widget. * Fixed an issue that made it impossible to display data in the **Trading View** widget using a mobile version of the B2CORE UI. * Fixed an issue that caused the **Reset** button to only reset the default B2TRADER workspace to its default configuration instead of resetting all workspaces in the case when there have been more than one workspace created. * Fixed an issue due to which it was impossible to restore the default B2TRADER workspaces by clicking the **Reset** button if these workspaces have been previously closed. * Fixed an issue that caused the **SimpleExchange** widget to be missing from the list of available widgets in the B2CORE UI. *** ### March 15, 2022 [#march-15-2022] #### New features [#new-features-36] ##### New PS integrations [#new-ps-integrations-13] A new payment provider, **POLi**, has been integrated, with support for deposits. #### Improvements [#improvements-45] * Case-insensitive comparison of currency alpha codes has been implemented to correctly display available wallets sorted by currency code in the **Wallets Overview** widget regardless of the case of the currency alpha code specified in a client’s account. * The Dutch language has been added to the B2CORE UI. #### Resolved issues [#resolved-issues-36] * Fixed an issue due to which it was impossible to download the **Withdraw** page via the B2CORE UI. * Fixed an issue that caused an error upon clicking **Profile** > **API Key Management** in the B2CORE UI. * Fixed an issue that caused certain widgets in the B2CORE UI to display data only after reloading a page. * Fixed an issue due to which an error message was displayed after changing a language on the B2CORE UI **Sign In** page before switching to a selected localization. * Fixed an issue due to which the **Files** subgroup and the corresponding **Upload Files** permission were not available under the Right section located in **System** > **Groups** of the B2CORE Back Office. *** ### March 1, 2022 [#march-1-2022] #### New features [#new-features-37] ##### Transaction check [#transaction-check] A new button, **Check transaction**, has been added to the details of **Deposits** and **Payouts** in crypto. Upon successful verification, a corresponding transaction record is created in **Security** > **Transaction Monitoring**. This option is only available for clients with SumSub KYT configured. #### Improvements [#improvements-46] * When an SMTP connection test in the **Mailing** section fails, detailed error messages are now displayed, including information on validation and data input errors for each field. * **B2BINPAY** connectivity has been improved: * Asynchronous requests for wallets have been added to speed up the edit page loading for deposit and payout methods. * The **Destination tag** and **Destination tag type** fields have been added to **Provider settings**. #### Resolved issues [#resolved-issues-37] * Fixed an issue which caused the B2TRADER authorization error for clients that don’t provide exchange functionality. *** ### February 15, 2022 [#february-15-2022] #### Improvements [#improvements-47] * Integration with **BerryPay** has been improved. The format of asynchronous responses and the algorithm for generating a digital signature of transmitted data have changed. * Integration with **B2BINPAY** has been improved. When adding a new deposit method, the Local URL field in the provider settings is filled in automatically. * **PAX** currency has been renamed to **USDP**. The alpha code and caption have been updated. * For the **Registration** wizard, a new rule, `english_chars`, has been added. When enabled, the registration form in the B2CORE UI only accepts Latin characters for the **First name** and **Last name** fields. * The **Index** and **Next level** fields in **Verification** > **Levels** have become editable, which significantly simplifies creation and display customization of verification levels in the B2CORE UI. Previously, it was necessary to create levels in the reverse order — from the last to the first. In case of an error, it was impossible to edit the sequence of fields in the B2CORE UI. * A new **Enabled for admin** option has been added to the currency pair details. The **Enabled** option has been renamed to **Enabled for client**. This allows you to differentiate access rights to exchange operations via the B2CORE UI and B2CORE Back Office. * New fields have been added to the **Currencies** > **Currency pairs** table: * **Max amount** * **Step** * **Hedging enabled** * **Enabled for admin** * **Enabled for client** * Changing numbering of MT accounts in the B2CORE UI and B2CORE Back Office has been disabled until further improvements. #### Resolved issues [#resolved-issues-38] * Fixed an issue due to which the Profile > Settings > Tier and Profile > Security > WhiteList sections were not displayed in the B2CORE UI. * Fixed an issue due to which in the B2CORE UI, the Withdraw amount field retained the value of the previous input. * Fixed an issue that caused instant loading of the Trading UI. *** ### February 1, 2022 [#february-1-2022] #### New features [#new-features-38] ##### B2CORE UI menu management [#b2core-ui-menu-management] A new section, **Menu**, has been added to **Promotion**. Here, you can manage B2CORE UI menu items, such as changing their visibility depending on the client’s verification level. ##### Client folders tree [#client-folders-tree] A new section, **Client folders**, has been added to **System**. Now, you can create a folder tree with any nesting depth. Features: * You can create predefined system folders in the **System** > **Client folders** section. These folders will be automatically added to all clients. * You can additionally create custom folders for a specific client, on the **Files** tab in the client’s details. Note that you cannot delete system folders here. * If a system folder is created with the same name as that of a custom folder of some client, it is not a problem: a `_Custom` postfix will be added to the name of the custom folder, and a system folder with the same name will be created next to it. * When renaming a folder in **System** > **Client folders**, it will be automatically renamed on the **Files** tab in the client’s details. * You can assign access permissions to a folder, to specify which groups of users can view and edit it in the **Files** tab. * By default, nested folders inherit the access permissions from the parent folder. Their access permissions cannot be broader than that of the parent folder. * When access permissions assigned to a parent folder are revoked from a user group, access to all nested folders is automatically restricted for these users. * When granting access permissions to a parent folder for a user group, it will NOT be automatically granted access to nested folders. ##### Successful registration event [#successful-registration-event] A new event type, **SuccessfulRegistration**, has been added to **System** > **Events**. When a client registers via the B2CORE UI or an admin creates a new client profile via the B2CORE Back Office, a notification is sent to the admin email specified in the event. A new template, `SuccessfulRegistration (to admin)`, has also been added to **System** > **Templates**. ##### New rate provider [#new-rate-provider] A new rate provider, **WazirX**, has been integrated. #### Improvements [#improvements-48] * When uploading multiple files, the drag-and-drop function is now available. * When configuring commissions for deposits/payouts methods, you can select multiple currencies at once. * When creating a new product, the currencies list is now sorted in an alphabetical order. A quick search field has also been implemented. * When creating a bulk action for zero balance, alpha codes instead of captions are now displayed in the currencies list. * A new provider, **TransakV2**, has been integrated into B2BINPAY. * In the transaction details, the **Client** field has become a link to a client’s profile. * The **From account amount** and **From account equity** fields have been added to the details of a Transfer-type request. If the account does not have these parameters, `0` is displayed. The current balance is obtained from the platform. * The process of receiving rates on the exchange page has been optimized so that only rates for currency pairs corresponding to client wallets are loaded. #### Resolved issues [#resolved-issues-39] * Fixed an issue due to which it was impossible to log in to B2CORE UI without previously refreshing the page. *** ### January 18, 2022 [#january-18-2022] This release was aimed at technical debt and improved stability. #### Improvements [#improvements-49] * It has become possible to select an account type for cashback — trade or personal. For the personal account type, cashback is deposited to the wallet upon comparing the currency of the wallet with the currency of the trading account(s). In case the cashback has been calculated for more than one trading account, it is credited to the wallet in separate deposits. #### Resolved issues [#resolved-issues-40] * Fixed an issue due to which it was impossible to unarchive an MT account if `Max accounts = -1` was specified in the product settings. ### December 21, 2021 [#december-21-2021] #### New features [#new-features-39] ##### Clients accreditation [#clients-accreditation] A new feature has been implemented allowing you to manage and configure client accreditation. A new **Client Tests** section has been added to the **Verification** page. In this section, you can specify questions that the client should answer to be granted a higher verification level in the B2CORE UI. In addition, a new Test results tab has been added to the client’s details. ##### Saving withdrawal details [#saving-withdrawal-details] Upon making a withdrawal request via the B2CORE UI, clients can now choose to save withdrawal details to avoid specifying the same information once again for each subsequent withdrawal. A new **Finance** section has been added to the client’s profile, where all saved withdrawal data is available. This data can be also accessed by administrators via the B2CORE Back Office by switching to the newly added **Saved withdrawals** tab in the client’s details. ##### Wallet Details [#wallet-details] In the B2CORE UI, it has become possible to view a transaction history for a specified wallet. ##### Service presets [#service-presets] You can now create a pre-configured preset and quickly apply it when adding a new client service or customizing an existing one. Presets associated with specific services can be accessed in the **Clients** > **Services** > **Saved presets** section. #### Improvements [#improvements-50] * The data in the **Security** > **Transaction monitoring** section is now filtered in descending order by the **Transaction ID** field by default. * A new button, **Upload multiple files**, has been added to the **Files** tab of the client’s details. * Information about service parameters has been added to the **Clients** > **Services** section. Service parameters are listed in separate table columns; the parameter values specified for various clients are indicated in corresponding rows. * In the B2CORE UI, the **Delete account** option has been removed until further improvements. #### Resolved issues [#resolved-issues-41] * Fixed an issue due to which precision settings were ignored when displaying amount values of the Transaction history in the B2CORE UI. * Fixed a validation rule for the deposit amount field. It is now based on precision settings set for the asset selected in the Deposit amount field. * Fixed an issue due to which problems occurred upon adding a withdrawal whitelist. * Fixed an issue causing incorrect resetting of a timer after re-sending a 2FA code. *** ### December 7, 2021 [#december-7-2021] #### New features [#new-features-40] ##### Multi-currency accounts [#multi-currency-accounts] Starting with this release, B2CORE can process multi-currency accounts. A new tab **Currencies** has been added to the product details. After creating a product (base currency still has to be selected at this step), you can add an unlimited number of currencies to it. Settings of the added currency can overwrite product settings. In addition, creating products for the B2TRADER platform (which provides multi-currency accounts) has become easier. Previously, you had to create a platform product, and then create wallets for each currency with Wallet Wrapper. Now it all can be done at once, by creating a platform product and adding all required currencies to it. ##### B2BINPAY: Merchant clients and multiple address types [#b2binpay-merchant-clients-and-multiple-address-types] For B2BINPAY v2, processing of Merchant clients transactions has been implemented. Also, support for multiple address types has been added. In the settings of B2BINPAY methods, the Address Type field is displayed for currencies with multiple types of addresses. #### Improvements [#improvements-51] * Editing the values ​​of the **Dealing approved** (for payouts) and **Fin verified** (for deposits) fields has become available only to admin users with the appropriate access rights. The corresponding settings have been added to **System** > **Groups**. * For service parameters with type text, text wrapping has been enabled. * Several improvements have been implemented to **Security** > **Transaction monitoring**: * **Transaction ID** now displays the identifier of the operation itself. * Four columns that support filtering have been added: **Created date**, **Email**, **Source amount**, **Source currency**. * The **Export** button has been added. * To **System** > **Users** the following columns have been added: **2FA status**, **IP whitelist**, **Groups**. * For Trading UI, skeletons have been implemented to display the loading state of widgets. * Integration with CoinMarketCap has been improved to receive rates for “rare” currency pairs: additional rates resource is accessed if there are no rates provided. * Integration with SendGrid has been improved to bypass the maximum limit of 1000 email recipients. * When signing up to the B2CORE UI, a pre-selection of a phone code has been added based on the chosen country. #### Resolved issues [#resolved-issues-42] * Fixed an issue that caused infinite loading of the Verification page in the B2CORE UI. * For MT4 and MT5 accounts, fixed an issue that caused infinite loading of Pending orders in Deals history. * Fixed an issue with the up and down sorting arrows that incorrectly sorted MT accounts and wallets by balance or name. The up arrow now correctly sorts in the ascending order and the down arrow sorts in the descending order. * Fixed an issue due to which the Reset button did not work for the TradingView widget. * For MT5 accounts, fixed an issue due to which the Profit parameter values in Deals history were displayed in exponential notation instead of decimal. *** ### November 24, 2021 [#november-24-2021] #### New features [#new-features-41] ##### Hiding recipients emails [#hiding-recipients-emails] When receiving emails sent via SendGrid, your recipients now only see their own addresses in the mailing list and do not see the emails of other recipients. ##### SMS daily limit [#sms-daily-limit] A new setting **SMS limit for each recipient** has been added to **System** > **Settings** > **Other**. Use it to limit the number of SMS that can be sent to each client per day and avoid uncontrolled spending of the balance. The setting will be applied to SMS sent during registration and 2FA confirmation. If the limit has been exceeded (for example, the client has already received the allowed number of SMS but could not enter the correct 2FA code), SMS are blocked for this client for a year. ##### Verification requests via Back Office [#verification-requests-via-back-office] In the client details, a **Verification request** button has been added to the **Documents** tab. Use this button to upload files and create a request for the next verification level directly from the B2CORE Back Office. Important: you cannot create a request if an open request of the Verification type has already been created for this client. ##### New PS integrations [#new-ps-integrations-14] A new payment system, **Help2Pay**, has been integrated, with support for deposit and payout operations. The following currencies are available: * `MYR` — Ringgit Malaysia * `THB` — Thai Baht * `VND` — Vietnamese Dong * `IDR` — Indonesian Rupiah * `PHP` — Philippine Peso #### Improvements [#improvements-52] * In the client details, the **Files** tab has changed location and is now located between the **Services** and **Advanced** tabs for quicker access. * It is now possible to reject **Verification** requests related to already deleted clients. * Cashback calculation mechanism has been improved: * **Cashback percent** has been renamed to **Cashback value**, which means it is no longer a percentage value. The calculation formula remains the same: `cashback = lots amount × cashback value`. * If two trading platforms are active and connected to the same database, cashback is credited only once. * Cashback is no longer credited for trading with demo accounts. * It is no longer possible to disable all languages in **System** > **Localizations**. At least one language must be enabled, otherwise it is impossible to save changes. * For B2BINPAY transfers, the **Created** value is now considered a date and time of receiving a final confirmation and not the date and time of creating a transfer as before. The aim behind this change is to prevent inconsistencies. For other payment systems, this value still indicates the date and time of invoice creation. * List view is now available for wallets in the B2CORE UI. * Migration to the New WebSDK SumSub has been completed. For more information, check the [SumSub documentation](https://developers.sumsub.com/migrations/sdk.html#advantages-of-the-new-sdk). #### Resolved issues [#resolved-issues-43] * For Google Chrome and Safari, fixed an issue which caused a logging out instead of refreshing the token after the access token expiry. * Fixed an issue due to which the email message was sent only to the first email from the uploaded CSV file and the other addresses were not processed. *** ### November 9, 2021 [#november-9-2021] #### New features [#new-features-42] ##### Immediate password reset [#immediate-password-reset] In the Back Office, the option to request a password reset from a specific client or all clients at once is added. When trying to log in, the client will receive a notification that the password is no longer valid and must be changed. Email verification is required before the password reset (with a verification code). #### Improvements [#improvements-53] * Improved internal storage of system settings: added groups with unique names. * MT4/MT5 demo accounts can be archived without transfer of the remaining funds. Archiving is available in the client UI and Back Office. * For B2BINPAY v2 callbacks, added an additional check by currency alias to avoid errors in case of the name mismatch. * After deleting personal data (the Delete Account button), all active requests of this client are automatically rejected. #### Resolved issues [#resolved-issues-44] * Fixed an issue which caused a redirect to the dashboard when attempting to open the trading UI. * Fixed an issue due to which the TradingView graph was not displayed after several minutes of inactivity. *** ### October 26, 2021 [#october-26-2021] #### New features [#new-features-43] ##### Cashback for traded lots [#cashback-for-traded-lots] Brokers can now set a cashback ratio to reward traders. The cashback is set as a fixed amount per each traded lot and is paid in the currency of the wallet. ##### Testing mailing connection [#testing-mailing-connection] A new Test Connection button is added to the Mailing > System > Providers section and allows to test the status of existing connections. The automatic timeout increases after each unsuccessful email from 0 to 5, then 25, 125 seconds and so on, but will not exceed 52 minutes, after which the timeout loop will restart at 0. ##### New PS integrations [#new-ps-integrations-15] A new payment system, **Gibilling**, has been integrated, with support for payout operations. #### Improvements [#improvements-54] * The Watchlist widget is completely redesigned, has a new sleek interface and provides better user experience. * The Whitelist and Device management widgets in the Security section of the B2CORE UI switched their places for the convenience of users. * Sumsub connection settings are improved so that during the SyncData, the system retrieves client information from the Personal info section of the Sumsub, instead of the Provided Personal Info section as it was before. #### Resolved issues [#resolved-issues-45] * Fixed a currency exchange issue where the Exchange button was inactive if the balance of wallet in the quote currency was zero. * Fixed an issue with incorrect rates being displayed for exchange operations involving Cryptocompare and BTC-Alpha rates providers. *** ### October 12, 2021 [#october-12-2021] #### New features [#new-features-44] ##### Auto bonus minimum [#auto-bonus-minimum] Admin users can now set a minimum deposit amount that will trigger an automatic bonus creation. The minimum deposit amount applies to each funds transfer made to an MT account. To explore the new feature navigate to System > Settings > Bonuses. ##### Auto bonus limit [#auto-bonus-limit] Admin users can limit an overall amount of auto created bonuses paid to a client. When the overall amount of auto created bonuses to a client reaches the specified limit, new auto created bonuses will not be generated. Applies only to funds transfer to an MT account. To explore the new feature navigate to System > Settings > Bonuses. ##### Bonus burn on withdrawal [#bonus-burn-on-withdrawal] A new switch option Burn on withdrawal is added to the System > Settings > Bonuses section. If Enabled and a client makes a withdrawal — all bonuses calculated for a particular account will be burnt and marked as Expired; if Disabled and a client makes a withdrawal — all bonuses will remain active. ##### Table type for service parameters [#table-type-for-service-parameters] Service parameters now have a new option Table type, which can be used to specify the number of columns and rows for that particular service. To explore the new feature navigate to Clients > Services > Parameters and edit a selected parameter. ##### Register as workflow feature [#register-as-workflow-feature] User registration wizard has a new workflow option Register As, which allows admin users to select the client type which will automatically be assigned to all new users registered via this wizard. ##### New filters for user settings [#new-filters-for-user-settings] Admin users can now geographically limit the list of clients available to a particular user with the help of Include and Exclude options added to the Country field in the System > Users > Edit tab. If the Exclude option is active and a certain country is specified — the user with these settings will see a list of clients from all countries except a selected country. If the Include option is active and a certain country is selected — the user with these settings will see a list of clients from a selected country only. ##### Product view restriction by partner ID [#product-view-restriction-by-partner-id] Brokers can now restrict product access to a particular IB and consequently to such IB’s clients. The settings are made in Back Office and are reflected in the B2CORE UI. #### Improvements [#improvements-55] * Urdu, Greek, Ukrainian, Finnish, Swedish & Norwegian languages are added to the API. * Error messages of MT4/MT5 Wrapper v3 are now displayed in a descriptive and easy to understand format. #### Resolved issues [#resolved-issues-46] * Fixed a bug where the TradingView widget would not automatically switch its data to match the market selected by the trader. * Fixed an issue where the Wallet widget was unnecessarily rounding up the Total balance sum. * Fixed an error occurring during an internal transfer in case there are two accounts with an identical ID. * Fixed an issue where transactions with a Partial status were listed in a list of deposits with a status Successful. * Fixed an error resulting in new MT Demo accounts to be created with zero balance without the consideration of prior Start amount settings. * Fixed a bug that hidden several field labels in user creation form in the admin panel. * Fixed an issue with an empty Amount field in a new deposit message sent to a client. * Fixed an issue with an incorrect operation of Countries field filter in User settings of the admin panel. * Fixed unsynced statuses display between the list of all transfers and details of each transfer. * Fixed an issue with the Mailing section not being hidden while the View mailing option was unchecked. *** ### September 28, 2021 [#september-28-2021] #### New features [#new-features-45] ##### Data masking [#data-masking] Administrators with full access privileges can now apply data masking options to another admin or admin group, by enabling the *Mask Data* and *Update Masking Data* checkboxes, respectively. When enabled, data masking prevents selected users from seeing the following client data: Client Name, Email and a Phone number. This applies to data displayed in the system as well as exported documents. To explore the new feature navigate to System > Users/Groups > Edit. ##### Client data protection tool in compliance with GDPR [#client-data-protection-tool-in-compliance-with-gdpr] A new feature that allows brokers to delete all personal client data of deleted client profiles is added. The following personal data will be removed from the system: First Name, Middle Name, Last Name, Email, Country, Address, Phone, Documents, Historical Data, Devices. ##### B2BINPAY transactions check [#b2binpay-transactions-check] A new Check option is added to the B2BINPAY > Wallets section, and allows users to audit all B2BINPAY deposits or withdrawals for the selected time period. ##### New workflow type [#new-workflow-type] New SendNotificationFlow workflow is added to System > Events > SuccessfulOperationHandler > Event handler workflow. The new workflow sends the details of all successful transactions to the email. ##### Wallet display currency [#wallet-display-currency] Users can now choose which currency their Wallet data will be displayed in. For now the available currencies are USD and EUR, with more new currencies being added in the nearest releases. #### Improvements [#improvements-56] * Admin messages accessible from the message icon in the top bar of the home page are now always saved, regardless of whether they have been read or not. The list of tagged admins is displayed at the top of the message. Messages to the current admin, for easier navigation, have a different color indicator than the rest of the messages. * A Password field now cannot be removed from the System > Wizards > Edit element > Workflow, without the prior enabling of the Password Auto Generation option. * Users can now dynamically edit the following transaction details: *Transaction hash*, *Status*, *Rate (USD)*. The Final amount of the transaction will be automatically recalculated. * All accounts/wallets, transactions, products and platforms related to B2Margin are removed from the B2CORE databases. * B2TRADER Adv UI Workspace widget structure is improved so, when a user moves or adds a new widget, the existing widgets stay in place instead of moving, and a layering principle applies until all widgets are set. #### Resolved issues [#resolved-issues-47] * Fixed a bug that was blocking the automatic generation of monthly financial reports. * Fixed a Withdrawal filter in transaction monitoring that caused zero entries to be displayed when the filter was applied. * Fixed *In Progress* status error in Finance > Payouts that prevented the payout processing. * Fixed an error with missing *Payment Name* and *Name fields* in exported data in the Finance section. * Fixed a bug that was blocking reports building in Security > Transaction Monitoring. * Fixed a bug where deposits with the transfer status callback *unconfirmed* were considered as *confirmed*. *** ### September 14, 2021 [#september-14-2021] #### New features [#new-features-46] ##### Files migration tool [#files-migration-tool] A new Files Migration Tool is added, and allows you to move client files between directories simply by choosing the required directory in the Directory field of the Edit File tab. Files can only be moved to another directory of the same client. ##### B2BINPAY v2 rate provider integration [#b2binpay-v2-rate-provider-integration] A new rates provider is integrated — B2BINPAY v2. ##### Root folders restrictions [#root-folders-restrictions] A new section is added to System > Settings that lets an admin limit or grant selected users an access to root folders. #### Improvements [#improvements-57] * New event log message feature was added to Clients > Details > Event Log, that sends an event log message to admins tagged in a message. #### Resolved issues [#resolved-issues-48] * Fixed a GBPay callback issue where the B2CORE did not recognize the callback sent by the payment system. * Fixed a GBPay integration issue where the generated Reference number, consisting of numbers, upper, and lowercase letters was not accepted by the payment system that only takes numbers and uppercase letters. * Fixed an incorrect displaying of empty values in Total Amount in Payments > Deposits. * Fixed an issue in Accounts table settings where unticking Hide zero balance option was not refreshing the table back to the full list. * Fixed an issue that was causing 2FA settings to be displayed as Disabled, for users that had 2FA option enabled. *** ### August 31, 2021 [#august-31-2021] #### New features [#new-features-47] ##### Transaction receival event [#transaction-receival-event] Added a new event type — SuccessfulOperation, which sends POST requests to a provided external URL upon receiving a new successful transaction: deposit, withdrawal, transfer, or exchange. ##### Balance receival event [#balance-receival-event] Added another new event type — AccountBalanceReceived, which checks balances of SMS providers every 12 hours and sends email notification if the balance is low. Also, the corresponding email template was added — BalanceSmall. ##### Client data synchronization [#client-data-synchronization] To the SumSub settings added a new action — Sync Data, which starts the synchronization of documents and personal data (First Name, Last Name, etc.) about the client for clients with a verification level higher than 0. The execution can be checked in logs. Action triggering is allowed once an hour. #### Improvements [#improvements-58] * Added a separate group of access rights for the Event Log tab of the client’s details. * For B2Margin and B2Margin Cash platforms, when you change the email in the B2CORE UI, the email on the platform changes. * B2TRADER platform settings are migrated to External connections. * Added the templates of email notifications on new deposits and rejected deposits. By default, the template of email notifications on new deposits is disabled. * Removed the following fields from the Services tab of the client’s details: Service Setup Fee, Service Monthly Fee, Service Sign Date. * To the parameter constructor in Services added the following types: text, numeric, date, select, multiselect, checkbox. * When archiving demo accounts, funds checking is now skipped and the account can be archived straight away. * The Nexmo provider was adapted to a new brand — Vonage. * Adjusted the Toshimart integration so that First Name, Last Name and Email are now taken from the client automatically. * Adjusted KYT integration with SumSub so that now exactly wallets that were used in the transaction are sent for the check. * Adjusted the BPay integration for external deposits with adding a new provider — BPayExternal. #### Resolved issues [#resolved-issues-49] * Fixed an issue which caused markups to be ignored in the calculation of the final deposit amount in deposits with conversion. * Fixed an issue due to which disabled countries were still available for selection at registration. * Fixed an issue which caused session expiration at the login page due to the slow connection. * For Windows 10, fixed an issue which caused widgets refresh after switching to another tab in Google Chrome. * Fixed infinite redirect when switching to the Exchange page after login. * Fixed incorrect display of percentages on progress bars of bonus widgets. * Fixed an issue due to which any indicator added to TradingView disappeared after switching to another page. * Fixed an issue due to which the auth request was sent after each click. * Fixed an issue due to which anti-phishing code didn’t accept values ​​written in Cyrillic. * Fixed incorrect margin level calculation for OneZero accounts. New correct formula is: `Margin Level = Margin Used [Equity — Free Margin] / Equity * 100% = (1 — Free Margin/Equity) * 100%`. * Fixed an issue due to which in the email notification about withdrawal request, the codes of custom fields were displayed instead of their names. *** ### August 3, 2021 [#august-3-2021] #### New features [#new-features-48] ##### Tagging and notifying an Admin [#tagging-and-notifying-an-admin] The dropdown list was added to the Event Log tab of the client’s details when creating a new comment. Use the dropdown list to tag an admin. The admin will be notified via the new icon, which was added to the upper toolbar. By clicking the icon, and then clicking a message, the admin will be redirected to the client’s details Event Log tab. ##### Directories [#directories] The functionality of using directories (folders) was implemented for the Files tab of the client’s details. ##### AdvCash withdrawal channels [#advcash-withdrawal-channels] Added AdvCash withdrawal channels inside the provider, now you can configure the channel on System > Payout system > Payout methods page in the admin panel. #### Improvements [#improvements-59] * External system id field was added to Services > List, as well as to the service creation form. * Improvements to Services > Clients: * New fields: Client internal type, Client type, Company short, Company long, Tags, and Manager. * ID is clickable and leads to the client’s details. * The Service name is clickable and leads to service details. * Email is clickable and is copied to the clipboard. * Simple Exchange in Adv UI now supports switching between buy and sell operations. For example, you can switch BTC/USDT market to USDT/BTC. * We merged B2Margin & B2Margin Cash into a single platform. The configuration was partly moved to External Accounts for ease of use. * We have enhanced BPay integration, making it possible to receive callbacks from external systems and crediting end-user by checking user ID in the details. * Now you can view the service details on the Services tab of client’s details even if you lack the permissions to edit it. * B2TRADER authorization is now using tokens instead of cookies. * The export functionality of Finance > Exchange and Finance > Transfers pages was improved by optimizing requests to the database. #### Resolved issues [#resolved-issues-50] * Fixed value rounding for **Amount** and **Final amount** fields, when exporting **Finance** > **Deposits**. * Fixed an issue, which allowed the withdrawal of an unpermitted asset using `account_id`. * For B2TRADER Adv UI, fixed an issue, which caused spontaneous page refreshing. * Fixed an issue due to which page horizontal scrolling failed to return to default value after pulling widgets outside the border on the Dashboard page. * Fixed an issue that caused TwilioPhone to not appear in the external connection list. * Fixed an issue that caused the CoinGecko rates provider not to display rates. * Fixed an issue, which caused a logout error of an authorized user, when changing user status to Inactive. * Fixed an issue, which prevented you from seeing the Anti-Phishing Code in emails. * Fixed an issue, which could cause an infinite redirect while opening the Exchange page. * Fixed an issue, which caused the added Anti-Phishing Code not to display if SMS 2FA is enabled. *** ### July 20, 2021 [#july-20-2021] #### New features [#new-features-49] ##### Twilio Voice integration [#twilio-voice-integration] The new Twilio Phone provider was added to External Connections. Set it up to be able to dial a client from the personal info page. ##### CoinGecko Integration [#coingecko-integration] CoinGecko API integration. The open-source rates provider. ##### Profile > Security [#profile--security] Several blocks were moved to, and new blocks added to the **Profile** > **Security** page: * **Address Management** moved from **Settings**. * **Two-factor authentication** moved from **Settings**. * Added **Anti-Phishing Code** block (4—20 non-special characters). Becomes available after enabling **Google Authenticator**. * Added **Device Management** block which displays the list of trusted devices. #### Improvements [#improvements-60] * The SMTP server settings were added to the admin panel in the Mailing section. It is possible to configure the email storage period, the resend, and the deletion of an unsent email. * Added a monitoring feature to prevent the abusive activity with Adv UI. If more than 20 widgets were added or more than 20 resizes/movements were performed within a minute, the user will be prompted to reset the Workspace and stop the abusive activity. * Optimized export of payouts lists. Download speed increased up to 4 times, email sending speed increased up to 3.5 times. #### Resolved issues [#resolved-issues-51] * For BetaTransfer PSP, fixed an issue that caused the return of the incorrect currency list during the creation of funds withdrawal method in admin panel. * Fixed the TradingView widget, which could display incorrect data after socket reconnection. * Fixed an issue due to which the TradingView widget refused to resize the chart. * Fixed an issue due to which during the deposit/withdrawal method changing, the rate of the previous method was displayed. * Fixed an issue due to which always the first currency was deposited in case multiple PS Currencies are used. * Fixed an issue that caused the dropdown lists to stick to the screen while scrolling the page. *** ### July 6, 2021 [#july-6-2021] #### New features [#new-features-50] ##### Payout method constructor [#payout-method-constructor] The Constructor payout provider has been added. General settings are identical to other providers, but with an additional Custom Fields block, which has an Add Field option. Fields names can be edited. Fields values can be set when creating a payout and also will be available in the corresponding client’s request. #### Improvements [#improvements-61] * Optimized export of clients, accounts and payments lists. Download speed increased up to 4 times, email sending speed increased up to 3.5 times. * Payeer settings were migrated to External Connections. Now B2CORE owners can configure the exact channel of Payeer payout in the method settings in order to configure separate commissions/naming etc. for different channels. * For B2Margin Cash, added the possibility to authorize to the trading UI with a token. * For PrimeXM, added request settings for transfers. * To the Deposits and Payouts tables, added the Final Currency field — currency in which funds were credited/debited. For more convenience, this field is also displayed in the tables on the Finance tab in client’s details, along with the Rate currency and Rate (USD) fields. * When searching by IP in Security, the Hide IP duplicates option is now available. Enable it to group entries by unique email + IP pairs. * 4-hour candle timeframe added to the TradingView widget. #### Resolved issues [#resolved-issues-52] * Fixed an issue due to which, in the Trade history widget, lots values were set to 0 for all instruments. * Fixed display name for internal client type “agent”. * Fixed an issue due to which, during payouts with conversion when only one PS currency is available, the incorrect destination currency was displayed in the Back Office. * Fixed an issue due to which the link to a specific currency pair did not work on the Public exchange and all widgets displayed the default currency pair. * Fixed an issue due to which the New Deposit Amount option affected the deposit amount in destination currency (TR Currency) instead of source currency (PS Currency). * Fixed an issue due to which the Fee Product value on the Trades tab in the client’s details were not displayed. *** ### June 22, 2021 [#june-22-2021] #### New features [#new-features-51] ##### PrimeXM integration [#primexm-integration] Now it is possible to configure connection to the PrimeXM platform and retrieve clients accounts. In the Back Office detailed information on balance, equity, margin, PnL, transfers from/to the account will be displayed. In the B2CORE UI, PrimeXM accounts will be displayed on the Wallets page. ##### Simple exchange for B2TRADER [#simple-exchange-for-b2trader] A new widget has been added to the advanced UI. Simple Exchange provides the ability to exchange currencies via FOK orders if both wallets are on the B2TRADER platform. #### Improvements [#improvements-62] * Now all custom fields of the rate provider are checked for validity. Also, if the provider is just created and has a password field, it will be created disabled; when trying to enable the provider with an empty password field, an error message will appear. * Bonus details for the client now display the fields that were set when the bonus was created. * B2Margin Cash logins are now stored in the B2CORE UI. * After reaching max inactivity, the accounts are no longer archived, only the trading option is disabled. * For Banners and Announcements, the Button URL field has been added. If the value is specified, by clicking on the button, the client will be redirected to the specified URL. * When creating MetaTrader accounts, it is now available to select the Investor Only template which contains no Password, only Investor Password. * A new type of client request has been added to quickly filter requests related to Introducing brokers. #### Resolved issues [#resolved-issues-53] * Fixed an issue which caused an error when trying to view exchange details. * Fixed an issue due to which the Internal Transfer item was not displayed in the menu for some clients despite the access rights. * Fixed an issue due to which empty wallets list was displayed when loading the Wallet page. * Fixed an issue due to which accounts which require approval were created without requests. * For Introducing brokers, fixed sorting and filters by country, latitude, longitude and position lifetime. * Fixed an issue due to which the language select window was not properly displayed in the exchange interface. * Fixed the gaps on the TradingView widget which occurred when zooming out and scrolling the chart. * Fixed incorrect translations in payout requests. *** ### June 8, 2021 [#june-8-2021] #### New features [#new-features-52] ##### Hedging fail handler [#hedging-fail-handler] A new type was added to Events. You can now receive email or Slack notifications which contain transaction ID upon hedging failed for exchange operations. ##### Request receival handler [#request-receival-handler] Another new type was added to Events, which sends email notifications when a request of a specific type is created. ##### B2TRADER platform support in IB [#b2trader-platform-support-in-ib] Another trading platform was added — B2TRADER. Connection to the platform and commission payment plan can be configured in the B2CORE Back Office. #### Improvements [#improvements-63] * Now verification level cannot be saved if a non-existing class is specified as a wizard. * In the Registration wizard fields constructor, the Label field value is now mandatory. * Several improvements for the B2Margin Cash platform: * In the account details, the trading platform groups are now displayed and can be edited. * In the product details, it is now possible to set several platform groups. * When editing the platform group of a product or B2Margin Cash platform account, only one group in one domain is allowed. * Added `nonce` value to the private API requests to B2TRADER platform. Nonce is a 64-bit integer which is unique within a 22 seconds time interval in the frame of the used public key. It is used to improve the security of trading methods. Applicable for B2CORE with B2TRADERShadow platform configured for exchange hedging purposes. * For B2TRADER platform authorization, tokens are now used instead of cookies. * The value of the currently active external connection is now sent in the `snsHost` field for the verification request. * In Introducing brokers, base and quote currencies were added to symbol details, trades details, and reward details. * In Introducing brokers, naming was reworked and improved for reward states and details, trade details, and symbol details. Data displaying was reorganized to improve convenience. #### Resolved issues [#resolved-issues-54] * Fixed an issue due to which the Open Orders widget displayed zero in Price of limit orders. * Fixed an issue that caused an unexpected error when canceling an order. * Fixed the expired session problem when re-logging to the B2CORE UI in Safari. * Fixed an issue that caused slow data loading when re-switching to the exchange tab in the B2CORE UI. * For the Trading View widget, fixed default chart type. Now it’s always Candles. * Fixed the behavior of the Remove tooltip, which did not disappear after deleting an entry in the WatchList widget. * For MT4 and MT5 Accounts, fixed an issue due to which accounts data was not displayed if there were no transactions. * Fixed incorrect displaying of connected B2BINPAY v2 wallets when configuring deposit method. * Fixed calculations for deposit methods with conversion. *** ### May 26, 2021 [#may-26-2021] #### New features [#new-features-53] ##### SumSub KYB [#sumsub-kyb] When changing the client type (individual/corporate), the client’s verification level in the B2CORE UI and verification system will be set to 0. Re-verification will be required. This option is available if Client Resetting Mode is enabled in External Connections for SNS. It is disabled by default. ##### Event log [#event-log] A new tab was added to the client’s details. On this tab you can add notes and commentaries about the client. Supported text formatting, hyperlinks, attachments, replies and message editing. ##### Parameter constructor for services [#parameter-constructor-for-services] It is now possible to configure additional parameters for each service. When adding a service to a client, these fields will be required. ##### IB symbols export [#ib-symbols-export] Now it is possible to export settings to CSV, change the formula and then import these symbol settings in the same or in a different IB Type. The Export button is available on the Symbols tab of IB Type details. ##### Min position lifetime [#min-position-lifetime] New parameter was added to MT4 and MT5 platforms in Introducing brokers. If a position was closed earlier than the min position lifetime, it is not taken into account in rewards calculating. #### Improvements [#improvements-64] * We have significantly enhanced our authorization technology. * Optimized rates receiving from CryptoCompare. Now instead of sending a request for every pair we accumulate the pairs and send one request for all. * New supported formats on the Files tab in the client’s details: DOC, DOCX, XLSX, CSV, PAGES, NUMBERS, ZIP. * API Key in B2TRADERShadow platform configuration is now visible. * Now every export request can be done in a matter of minutes. * Asynchronous balances are now updated right on the open page with no need to refresh. * Added PostgreSQL reporting support for MT5 in Introducing brokers. * In Introducing brokers, tier ID was replaced with tier name. * Min position lifetime parameter was added to MT4 and MT5 platforms in Introducing brokers. If a position was closed earlier than the min position lifetime, it is not taken into account in rewards calculating. * Added MaxMind diagnostics to Introducing brokers services. * IB now supports PostgreSQL reporting for MT5 apart from being only MySQL before. #### Resolved issues [#resolved-issues-55] * Fixed an issue that caused user to be banned due to Client Rights release. * Fixed an issue due to which Transaction Monitoring sent email notifications on “green” transactions. * Fixed an issue due to which on mobile devices deleting the Wallets Overview widget removed also the Quick Links widget. * Fixed an issue due to which the Add Widget link was displayed over the banner when creating a new workspace. * Fixed incorrect behavior of the Verification widget after re-login. * Fixed an issue due to which the trades history was not updated after disconnecting the exchange. *** ### April 27, 2021 [#april-27-2021] #### New features [#new-features-54] ##### Clients access rights [#clients-access-rights] You no longer have to manage client rights from different parts of the Back Office. Clients access rights management has been moved to the Clients Rights subsection in the System. You can create and edit access levels, assign a level to a client from the details of his profile, and so on. ##### Transaction verifying handler [#transaction-verifying-handler] A new type was added to Events. You can now receive email notifications once a RED transaction is detected in Transaction Monitoring (KYT SumSub). The notification contains transaction details and risk score. ##### Account created handler [#account-created-handler] Another new event type, which sends POST requests to a provided external URL when opening an account for a client. Request body contains the client’s identifiers, account number, and product details. ##### IB Reports [#ib-reports] The Reports section has been added. At the moment, Acquisition report and Payment report are available. ##### IB API Clients [#ib-api-clients] You can now connect your application and get API access to them via the Back Office. In Services > Security > API Clients, you can add an API client and get Client ID and Client Secret. You can delete the clients also, if necessary. #### Improvements [#improvements-65] * Integration with ChillPay has been adapted for payment statuses, success and error URLs were added to the method configuration. * Added validation to the Lots per unit field in Bonus Presets. Now zero value cannot be saved. * Balances on all remaining (Transfer, Deposit, Withdraw, MT5, MT4, Internal Transfer) pages are now updated asynchronously for quick and correct displaying of information. * The Wizards functionality has been improved: repeated signals of already completed wizards steps are blocked. * For the IB section, we have reworked and optimized the naming of entities related to Symbols. #### Resolved issues [#resolved-issues-56] * Fixed an issue due to which the Download file button did not work when exporting reports. * Fixed CSV-template for reports exporting. * Fixed an issue due to which client’s data from SumSub were not displayed in the client’s profile. * Fixed incorrect display of the password recovery window. * Fixed infinite loader in Safari when trying to load history in trading account details. * Fixed an issue due to which filter by clients registration date in IB did not work. * Fixed an issue due to which in the Firefox browser the tooltip was hidden behind currency balances on the Pie Chart Widget. * Fixed an issue that caused a wrong caption when depositing with the Wire method. * Fixed an issue that caused an error when interacting with Mercurio, if the client did not have the country value specified. * Fixed an issue due to which the Need help link in the footer could not correctly process HTML formatting. *** ### April 13, 2021 [#april-13-2021] #### New features [#new-features-55] ##### B2Margin platform groups editing [#b2margin-platform-groups-editing] Added the ability to remove/add trading platform groups for accounts. It is now possible to select several platform groups, but only one group in the domain. New functionality is available in account details. ##### New PS integrations [#new-ps-integrations-16] Two more payment systems have been integrated — **EeziePay** and **9PAY**. #### Improvements [#improvements-66] * In Antifraud, to the Identical IP Used By Multiple Accounts event, the Verification Level Monitor setting has been added, which allows you to specify the verification levels of the clients you want to check. * For B2Margin, it is now possible to authorize in the Trading UI by token. * For B2TRADER, a special comment is displayed for the operation when the hold is returned. * Monitoring and running of processes Introducing Brokers is now more convenient: we have analyzed and improved the captions of processes, making them more declarative. * We have added validation for the Options Type of the select field in the Registration Wizard. #### Resolved issues [#resolved-issues-57] * Fixed an issue due to which in the Back Office it was possible to create a withdrawal request with an empty value of the withdrawal wallet. * Fixed an issue that caused incorrect behavior (infinite loading, drag-and-drop block) of MT4/MT5 Payment Accounts and Trading Accounts widgets after they were added to the B2CORE UI dashboard. * Fixed an issue due to which the chart on the TradingView widget was not displayed for day/week/month time intervals. * Fixed an issue due to which the First Transfer Activation option for trading did not work. * Fixed an issue due to which the theme of the chart did not change if at the time of changing the theme of the B2CORE UI, it had not yet loaded. * Fixed an issue due to which the language of the interface was not displayed if only one localization was available. *** ### March 30, 2021 [#march-30-2021] #### Improvements [#improvements-67] * Antifraud updates: * We have added a check for unauthorized changes in the user’s verification level. * Information about all clients is now displayed in details of the Identical IP Used By Multiple Account notification. * MetaTrader5 platform and product updates: * The First Transfer Activation switch has been added to the product settings. If Enabled, all accounts are created with the Trade Enabled right turned off, this right is added upon the first successful transfer to the account. * The Max Inactivity field has been added to the platform settings. All accounts with a balance less than or equal to 0, for which there have been no balance transactions for more days than specified in this field, will be archived. The check runs once a week. * We have migrated HelpDesk settings to External Connections. Now B2CORE owners can configure HelpDesk by themselves with no waiting from the B2CORE team. * CryptoCompare Rates provider integration was adjusted to be able to insert a secret key in provider details. * We have added notifications about long report generation. * Vpay integration updates. The account parameter was moved to provider settings. * Now only admins with Update client’s request permission can audit requests. * We removed the non-relevant Account number field from the Total Balance pie chart. * Background images for banners are now supported for all pages. Previously we supported it only for the dashboard page. * Balances on the Dashboard and Wallets pages are now updated asynchronously for quick and correct displaying of information. #### Resolved issues [#resolved-issues-58] * Fixed an issue due to which an incorrect set of fields was displayed during Advanced registration for select, multiselect types with no configured options. * Fixed an issue due to which the Hide zero balance flag was missing in Accounts. * Fixed an issue due to which request color settings could not be applied. * Fixed validation process for advanced Registration step fields with numeric values ​​of the Name attribute. * Fixed an issue that caused the Amount missing in the Trades History. * Fixed problems with Signing in with desktop Safari. * Fixed an issue with the Asset widget where not all assets were displayed. * Fixed an issue that caused the Trading View widget to freeze in place when dragging and dropping and resizing adjacent widgets on the Dashboard. * Fixed an issue due to which a newly created wallet was displayed only after the page refresh. * Fixed an issue that caused incorrect fee calculation display for Buy Limit orders. * Fixed an issue due to which notifications upon ticket status changing were not displayed and some other small fixes in the HelpDesk. * Fixed an issue due to which for some clients 2FA confirmation via sms was unavailable. * Fixed an issue that caused incorrect tier fee displaying for some clients. *** ### March 16, 2021 [#march-16-2021] #### New features [#new-features-56] ##### Device management [#device-management] Device management provides an opportunity to take a unique “fingerprint” for each client login. Each fingerprint contains a set of data about the login and device. A list of devices is available on the Devices tab in client details. #### Improvements [#improvements-68] * We have added asynchronous updating of balances, which significantly speeds up the loading of user accounts. * We have added a profile picture and a nickname to Client Profile. * The Connections subsection was renamed to External Connections to improve clarity. For each connection, the Type field was added, which currently supports two values: Payment system and Other. Now when creating a new Deposit/Payout method only connections with Payment system type are available for selection. Also, the Enable/Disable option was added to connection details. * We have migrated SumSub configuration into the External Connections. Now B2CORE owners can configure the integration by themselves with no waiting from the B2CORE team. * Clients who are not connected to SumSub can now disable transaction monitoring. It is also possible now to specify a list of currencies to monitor. New settings are available in External Connections. * The Comment field was added to Services List and Services Groups. * Antifraud notifications can now be filtered by Responsible admin users. * Exceptions for antifraud notifications can now be set for the pattern of email addresses. For example, if the exception rule is created for `user*@email.com`, the antifraud system will not be triggered for any address which starts with `user` and ends with `@email.com` like `user+1@email.com`, etc. * Now we process callbacks without transaction IDs from B2BINPAY v2. * For deposit/payouts via WireDocuments provider admin users can now edit the amount of a transaction directly in the request. #### Resolved issues [#resolved-issues-59] * Fixed an issue due to which some clients could see infinite loading when viewing client accounts. * Fixed an issue that causes incorrect HTML displaying of the customer agreement on the registration page. * Fixed an issue due to which export of accounts by currencies did not work for some clients. * Fixed a rule which caused problems with the first name and last name fields when registering. * Fixed an issue that caused problems with verification levels via SumSub. * Fixed an issue due to which permissions for Clients Requests worked incorrectly. * Fixed problems with proxying requests at the server level. * Fixed Offline notification in the B2CORE UI interface. * Fixed an issue due to which some labels in the B2CORE UI could be displayed incorrectly. * Fixed an issue due to which order book in the Trading UI of B2TRADER and B2Margin could be displayed incorrectly after long inactivity. * Fixed an issue that caused incorrect display of the absent rate in the Total Balance widget. *** ### March 2, 2021 [#march-2-2021] #### New features [#new-features-57] ##### Wallets overview widget [#wallets-overview-widget] We have completed yet another Dashboard widget, the most representative and informative one, now end-users are able to check their asset balances and its USD-equivalent in both card and pie chart view. ##### Wizards v2 [#wizards-v2] We have completely reworked and polished wizards functionality, which provides you with an opportunity to configure on the side of the Back Office some parts of business logic, like registration, password recovery, profile changing, verification, etc. Each wizard has a list of steps available for installation and a list of default steps. The System > Wizards section is now available in the menu. We keep working on improvements. #### Improvements [#improvements-69] * We have developed Public Adv UI for all our B2TRADER Exchange clients. This feature is available upon account manager contact. * Now when changing the email of a user with the B2TRADER platform through the Back Office, the email will be automatically changed also on the platform. * Balance (USD) and Balance (EUR) fields were added to clients accounts. * We have improved handling of unsuccessful hedging. Now hedging status and logs are available in transaction details. * We have added transfer details, where you can also see Request Info if the transfer was made via the request. * We added Address Management to the Security section, where you can see which addresses the client has added to the whitelist. * We added Final Amount and Final Currency to Deposits and Payouts tables. * Now you can see which admin has added a comment on the Compliances Tab. * No more double verification for Mercuryo payment system: we can now use the SumSub token for it. * We have changed the logic of the calculation of Min Deposit Amount in product details, it will ignore the restriction in case of 0 or empty value. * We have made several adjustments to make Back Office tables more efficient and quicker to load. #### Resolved issues [#resolved-issues-60] * Fixed an issue due to which account balances in crypto were displayed with wrong precision. * Fixed an issue due to which historical info on email changes was not displayed. * Fixed an issue that caused Back Office freezing after transfer creation. * Fixed Antifraud false alerting for identical phone numbers used by multiple accounts. * Fixed an issue due to which Blockchain fees for withdrawals via B2BINPAY v2 were not displayed. * Fixed an issue that caused Bank Wire Local to not display information correctly. * Fixed an issue with permissions due to which the Client Services section could be unavailable for editing. * Fixed an issue that caused workspaces to reset after the refresh. * Fixed an issue due to which all widgets switched to the default currency pair after page refresh. * Fixed an issue which caused incorrect navigation by clicking on the logo. * Fixed an issue that caused incorrect values of 24h Volume/Change parameters in the Watchlist widget. *** ### February 16, 2021 [#february-16-2021] #### New features [#new-features-58] ##### Audit of financial operations [#audit-of-financial-operations] We have developed and implemented an audit algorithm that checks financial transactions and calculates abnormal discrepancies. New Audit button is now available in Clients > Requests. #### Improvements [#improvements-70] * We are proud to present Mailing 1.1 — we added: * sending an email to all customers at once, * importing recipients from a CSV file, * attachments to an email, * a visual editor for HTML tags, * a preview of an email, * easier template creation and saving an email as a template, * webhooks for Sendgrid. * We have improved hedging: now it can be enabled/disabled for a currency pair, and when exchanging hedging can be disabled for certain types of clients. * We unified transaction details for client requests. Now withdraw requests through all providers will show transaction details entered by end-user. * Now we can process more State codes for PAMM IB. * Upgraded twilio/sdk to version 6. #### Resolved issues [#resolved-issues-61] * Fixed an issue due to which a rejection reason was not displayed in the email notifications on a failed deposit. * Fixed an issue due to which the Created field was not displayed at exporting of transfers. * Fixed an issue that caused showing the incorrect currency for deposits with conversion. * Fixed an issue due to which user restrictions (such as Client Tag) did not apply to export. * Fixed an issue that caused an error when trying to create an applicant that already exists in SumSub. * Fixed an issue due to which wrong MT5 Accounts were displayed in client’s details. * Fixed an issue that caused an Access denied error for Client Services and Services Groups editing with appropriate permissions enabled. * Fixed an issue with failed deposits and actualized integration with Sticpay. * Fixed several issues in B2TRADER Advanced UI, such as a non-working light theme, infinite redirect when clicking on the logo, and other small fixes. * Fixed an issue that caused products to ignore Restrictions with Auto Creation on Login turned on. * Fixed an issue that caused Multiple IP Addresses to trigger with failed authorizations. *** ### February 2, 2021 [#february-2-2021] #### New features [#new-features-59] ##### SumSub transaction monitoring [#sumsub-transaction-monitoring] We have developed a completely new KYT functionality through SumSub integration. Now our clients who are connected to SumSub will be able to check their transactions and see the risk scores, where the money came from and all key signals about it. The new functionality was added to the Security > Transaction Monitoring section. #### Improvements [#improvements-71] * We have reworked integrations with B2Margin and B2TRADER to provide more stability and efficiency to these services. * We have reworked B2TRADERShadow needed for a converter hedging purposes platform to be connected through API keys that can be generated in the B2BX cabinet. * CoinmarketCap rates provider integration was updated and is now fully functional. * MT Accounts in the Back Office are now divided into tabs corresponding to the active platforms, to optimize loading and visualization of the tables. * Added Deposit Wallets export functionality to the Back Office. * All B2TRADER’s clients are now switched to a new updated, optimized advanced UI. * For top-ups with conversion we have removed unnecessary currency selection if there is only one currency available. * Other small UI improvements. #### Resolved issues [#resolved-issues-62] * Fixed an issue due to which 2FA stayed enabled for the enduser after disabling it from the Back Office. * Fixed an issue due to which multiple products with Liquidity type could be created. * Fixed an issue due to which the admins with specified client tags could not create new clients. Now a new client is created with the same tags as the admin. * Fixed an issue that caused blue Error snack bar to show on the login page. * Fixed an issue that could break monthly reports generation. * Fixed an issue that caused infinite loading of transfers table. * Fixed an issue due to which Ignored symbol groups selector was empty during bonus or bonus preset creation. * Fixed an issue due to which mobile numbers were displayed as confirmed while they were not, as twilio was not connected. * Fixed an issue that could not proceed Simplex deposit payment. * Fixed an issue that caused Decta payment gateway payments to stay in New status even though they were successful on the payment gateway side. * Fixed an issue that caused the login page to freeze sometimes when trying to log in. * Fixed an issue that caused incorrect layout display of verification levels in the B2CORE UI. * Fixed an issue due to which charts were not displayed in the trading view. * Fixed an issue due to which the payment details set in wire-custom were not displayed. **Introducing brokers (IB)** is a partnership program that enables brokers to expand their client network and boost their business growth and profits through revenue sharing. ## How it works [#how-it-works] The partnership program is based on a **revenue sharing** approach. Brokers attract new traders through their partners and, in return, reward these partners with a portion of the earnings generated from referred active traders. Rewards can be paid in any crypto- or fiat currency. The reward amount is calculated per trade and is paid to a partner based on pre-set payment schedules, which can be hourly, daily, weekly, or monthly. The programs are fully customizable to best suit your specific needs: * You can select from various joining options: from automatic registration of all clients to exclusive joining by personal invitation. * You can customize reward ratios for different symbols or symbol groups. * You can set up tiers by a number of active traders referred and/or trading volume to further motivate your partners. * You can configure levels to reward partners not only for trades of their direct clients, but also for trades of clients referred by their clients. * You can set personal reward plans for key partners. ## Key features [#key-features] ### Various trading platforms [#various-trading-platforms] B2CORE IB offers a real-time access to market data through integration with popular trading platforms: * [B2TRADER](https://b2broker.com/b2trader/) * [MetaTrader 4](https://www.metatrader4.com/en) * [MetaTrader 5](https://www.metatrader5.com/en) * [cTrader](https://ctrader.com/) * [DXtrade](https://dx.trade/) * Converter ### Diverse and flexible payment plans [#diverse-and-flexible-payment-plans] Explore our range of flexible payment plans and select the option that aligns perfectly with your business needs. Available payment plans depend on the platform. | Payment plan | B2TRADER | MT4 | MT5 | cTrader | DXtrade | Converter | | -------------- | -------------------- | -------------------- | -------------------- | -------------------- | -------------------- | -------------------- | | **Commission** | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | | **Lot** | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | | | **Max amount** | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | | | **Markup** | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | | | **Markup %** | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | :heavy\_check\_mark: | | | **Spread** | :heavy\_check\_mark: | | :heavy\_check\_mark: | :heavy\_check\_mark: | | | To learn more, refer to [Payment plans](payment-plans). ### Advanced CRM tool [#advanced-crm-tool] With the B2CORE Back Office, you have access to a wide range of features and benefits: * Launch and manage multiple partnership programs. * Encourage your clients to attract new traders by offering them a variety of reward options and plans. * Monitor and control your partners’ performance and marketing campaigns. * Get valuable insights through robust data analysis and comprehensive reporting. ### Extended analytics for partners [#extended-analytics-for-partners] With the help of B2CORE UI, your partners can monitor their key performance indicators through comprehensive reports and beautiful charts, as well as customize their referral links. ### All-round equipped solution [#all-round-equipped-solution] B2CORE IB offers an extensive range of services and ready-to-go apps backed up by 24/7 multi-lingual support, ensuring that you have the necessary assistance whenever you need it. ## Broker [#broker] The owner of a partnership program. *** ## Direct client [#direct-client] The client who signed up to the B2CORE UI by a referral link of a partner. Let's say, it is *Jill*. *Jill* joined the partnership program by *Jack's* referral link. *** ## IB type [#ib-type] The set of criteria based on which a broker pays rewards and the set of parameters for calculating these rewards. The broker can configure more than one IB type with separate settings and, for example, different types of registration. *** ## Level [#level] The setting of an IB type. It determines how many participants in the chain from the partner to the trader receive a reward. By default, only Level 1 is configured, which means that the broker pays rewards only for trades of direct clients. Let's say, the broker pays *Jill* the Level 1 ratio for the trades of the direct clients. For example, the Level 1 multiplier is 1. But the broker may want to pay *Jack* the Level 2 ratio for the same trades (because if not for *Jack*, *Jill* might not have joined the program and would not have brought so many clients). For example, the Level 2 multiplier is 0.5. And so on. The depth of the clients tree is not limited, and the broker chooses the number of paid levels. With the [Max amount](payment-plans#max-amount) payment plan, the broker can also limit the total reward amount and specify reward amounts for each level as a fixed value, not a ratio. *** ## Master IB [#master-ib] The special status of a partner. For such partners, a broker can configure an individual number of paid levels with a fix ratio. The Master IB status overwrites settings of a partnership program for this partner. *** ## Partner [#partner] The client who signed up to the B2CORE UI and joined a partnership program. Let's say, it is *Jack*. After joining the partnership program, *Jack* receives a referral link. *** ## Personal ratio [#personal-ratio] The individual configuration of reward amount. For example, the broker can pay increased rewards to partners who bring many clients and trades. Unlike tiers, this setting is not automatic and is set manually by the broker for selected partners. *** ## Referral link [#referral-link] The personal link of a partner which usually leads to the Sign up page of the B2CORE UI. All clients who signed up by this link are [direct clients](key-terms#direct-client) of this partner. *** ## SubIB [#subib] The client who signed up to the B2CORE UI by a referral link of a partner and then joined a partnership program. In other words, this client decided to become a partner too. Let's say, it is *Jill*. Clients brought by *Jill* are not direct clients of *Jack*, but the broker can still trace them back: *Jack* → *Jill* → *Clients brought by Jill*. *Jill* has many friends, so 100 of them signed up to the B2CORE UI and started trading. *** ## Tier [#tier] The setting of an IB type. With the help of tiers a broker can encourage partners with extra motivation. For example, the broker can configure increased reward ratio for each partner who brings 100 active clients in 30 days. Or increased reward ratio for each partner whose clients have traded 1,000 lots in 14 days. Or both at once. A payment plan is part of IB type configuration that the Broker sets when launching a partnership program. **Key points** * Payment plans can be configured for a single symbol or symbol group. For a step-by-step tutorial, refer to [How to set up a payment plan for symbols](how-to-articles/how-to-set-up-a-payment-plan-for-symbols). * The calculated reward amounts can be additionally multiplied by level, tier, personal or Master ratio, if applicable. * If a partner's wallet currency differs from the reward currency, then the reward amount is converted into the wallet currency. The conversion occurs at the current exchange rate at the time of calculation. * Trading volume used for reward calculations can be changed by a platform group modifier. For example, the lot size for a group is set to 0.4 (**Introducing brokers** > **Platforms** > **Groups**). If the trade volume is 100 lots, this value will be multiplied by the group lot size: **100 lots × 0.4 = 40 lots**. The available payment plans are described below. Pay attention to a list of trading platforms to which each plan is applicable. **Disclaimer** All values given in this section are for demonstration purposes only and do not constitute a recommendation. ## Commission [#commission] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, cTrader, DXtrade, and Converter platforms. The Broker pays partners a fixed percentage of commissions received for trades executed by their clients: **Reward amount = Commission × Percentage** Where: * **Commission** is a fee amount that a trader paid to the Broker for executing a trade. * **Percentage** is a commission percentage value specified by the Broker in the IB type settings. This is a percentage of the total commission received by the Broker. Consider an example of *Jack*, whose client brought 70 USD in commissions to the Broker, while the set commission percentage is 10%. In this case, the amount rewarded to *Jack* is calculated as follows: **70 USD × 10% = 7 USD**. **Implementation details of the Commission payment plan on the Converter platform** When the *Commission* plan is used on the Converter platform, brokers pay partners a fixed percentage of markups received from exchange transactions made by their clients. These markups are configured in B2CORE, applied to each exchange transaction, and then recorded as commissions. The partner's reward is then calculated based on the recorded commissions, using the percentage specified in the *Commission* plan. ## Lot [#lot] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, cTrader, and DXtrade platforms. The Broker pays partners a fixed amount for each lot traded by their clients: **Reward amount = Trading volume, in lots × Amount per lot** Where: * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Amount per lot** is a fixed reward amount to be paid per lot, specified by the Broker along with the reward currency. The reward currency doesn't depend on the traded symbol. That is, the Broker can specify USD as the reward currency for the ETH/EUR symbol. Consider an example of *Jill*, whose client has traded 10 lots while the reward amount per lot is 2 USD. In this case, the amount rewarded to *Jill* is calculated as follows: **10 lots × 2 USD = 20 USD**. Keep in mind that you must monitor profitability using this scheme as the reward amounts may exceed the commissions charged. ## Max amount [#max-amount] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, cTrader, and DXtrade platforms. The Broker pays partners a fixed amount for each lot traded by their clients, while also having the opportunity to specify both the maximum reward amount and the reward amount for each configured level. With the **Lot** payment plan, the Broker specifies the reward amount per lot for Level 1. The rewards for subsequent levels (if configured) are calculated as a percentage of Level 1 reward. With the **Max amount** payment plan, the Broker limits the total reward amount paid to partners, regardless of the number of levels, and then specifies the exact amount a partner receives at each level. The following example illustrates how the reward amount can be distributed across different levels. | | **1 level** | **2 levels** | **3 levels** | **4 levels** | **5 levels** | **6 levels** | | ----------- | ----------- | ------------ | ------------ | ------------ | ------------ | ------------ | | **Level 1** | 10 USD | 8 USD | 5 USD | 5 USD | 4 USD | 3 USD | | **Level 2** | | 2 USD | 3 USD | 3 USD | 2 USD | 2 USD | | **Level 3** | | | 2 USD | 1 USD | 2 USD | 2 USD | | **Level 4** | | | | 1 USD | 1 USD | 1 USD | | **Level 5** | | | | | 1 USD | 1 USD | | **Level 6** | | | | | | 1 USD | Based on the table above, consider an example of *Jack*, whose direct client has traded 10 lots. In this case, the reward is paid only to Level 1, and the amount rewarded to *Jack* is calculated as follows: **10 lots × 10 USD = 100 USD**. Next, consider an example of *Jill* who participates in *Jack's* sub-IB program. If *Jill's* direct client has traded 10 lots, then the reward amount is distributed between two levels: * at Level 1, the amount rewarded to *Jill* is calculated as follows: **10 lots × 8 USD = 80 USD** * at Level 2, the amount rewarded to *Jack* is calculated as follows: **10 lots × 2 USD = 20 USD** In this case, the total reward amount is 100 USD, that's 10 USD per each traded lot. ## Markup [#markup] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, cTrader, and DXtrade platforms. The Broker pays partners rewards based on the volume traded by their clients and a markup specified in points: **Reward amount = Trading volume, in lots × Markup, in points** Where: * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Markup** is a markup value to be paid per lot, specified by the broker in the IB type settings. For example, the markup set on a platform is 14 points, and *Jack* decides to pay partners 1/7 of this markup value, that is 2 points. After *Jack's* clients have traded 10 lots of AUD/CAD, the amount rewarded to *Jack* is calculated as follows: **10 lots × 2 points = 20 CAD**. ## Markup % [#markup-] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, cTrader, and DXtrade platforms. The broker pays the partners a percentage of the markup. The calculation formula depends on the trade side: * For **sell** trades: **Reward amount = Trading volume × Trade price × 2 × Markup % / (1 + Markup %)** * For **buy** trades: **Reward amount = Trading volume × Trade price × 2 × Markup % / (1 – Markup %)** Where: * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Trade price** is an execution price at which the asset was sold or bought by a trader as a result of a trade. * **Markup %** is a markup value, in percents, specified by the broker in the IB type settings. For example, the markup value is 20% and a client of *Jill* buys 15 lots at 4,000. In this case, the amount rewarded to *Jill* is calculated as follows: **15 × 4,000 × 2 × 0.2 / (1 - 0.2) = 30,000**. ## Spread [#spread] > Supported for the B2TRADER, cTrader, and MetaTrader 5 platforms. The broker pays the partner a percentage of the market spread value at the moment of the trade. **Reward amount = (Market ask – Market bid) × Contract size × Trading volume × Percentage / 100** Where: * **Market ask**, **Market bid** are top-of-the-book bid and ask market prices valid at the moment of the trade, in the quote currency. * **Contract size** is a standardized quantity of asset per lot, set on a trading platform. * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Percentage** is a spread percentage value specified by the Broker in the IB type settings. Consider an example of *Jill*, whose client traded on the EUR/USD market: * **Market ask** = 1.08253 * **Market bid** = 1.07252 * **Contract size** = 100,000 * **Trading volume** = 2 lots * **Percentage** = 50% In this case, the amount rewarded to *Jill* is calculated as follows: **(1.08253 – 1.07252) × 100,000 × 2 × 50 / 100 = 1,001 USD**. ## Platform Spread % [#platform-spread-] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, and cTrader platforms. This payment plan only applies to **closed** trade positions. The broker pays the partner a percentage of the spread value recorded by the trading platform for the closed trade. Unlike the **Spread** plan, which uses live market bid and ask prices, this plan uses the spread value stored in the trade data by the platform itself. **Reward amount = Platform spread × Contract size × Trading volume × Percentage / 100** Where: * **Platform spread** is the spread value recorded by the trading platform at the time of trade execution, in the quote currency. * **Contract size** is a standardized quantity of asset per lot, set on a trading platform. * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Percentage** is a spread percentage value specified by the Broker in the IB type settings. Consider an example of *Jack*, whose client traded EUR/USD: * **Platform spread** = 0.00200 * **Contract size** = 100,000 * **Trading volume** = 2 lots * **Percentage** = 50% In this case, the amount rewarded to *Jack* is calculated as follows: **0.00200 × 100,000 × 2 × 50 / 100 = 200 USD**. ## Platform Markup % [#platform-markup-] > Supported for the B2TRADER, MetaTrader 4, MetaTrader 5, and cTrader platforms. This payment plan only applies to **closed** trade positions. The broker pays the partner a percentage of the markup revenue generated from the closed trade. Unlike the **Markup %** plan, which uses a manually configured markup value, this plan uses the actual markup recorded by the trading platform based on the broker's symbol configuration. The calculation formula depends on the trade side: * For **sell** trades: **Reward amount = Trading volume × Trade price × 2 × Platform markup % / (1 + Platform markup %)** * For **buy** trades: **Reward amount = Trading volume × Trade price × 2 × Platform markup % / (1 – Platform markup %)** Where: * **Trading volume** is an amount of lots that was sold or bought by a trader as a result of a trade. * **Trade price** is an execution price at which the asset was sold or bought by a trader as a result of a trade. * **Platform markup %** is the markup percentage recorded by the trading platform based on the broker's symbol markup configuration. For example, the platform markup is 20% and a client of *Jack* buys 15 lots at 4,000. In this case, the amount rewarded to *Jack* is calculated as follows: **15 × 4,000 × 2 × 0.2 / (1 - 0.2) = 30,000**. To join your first partnership program and become a partner: Sign in to the B2CORE UI with your credentials. Expand the partnership section in the main menu (labeled **IB Room** or **Partners**, depending on the broker configuration) and click any option in the expanded menu, such as **Partner Dashboard**, **Promo**, or **Reports**. In the **Partner Program** dropdown, select a partnership program that best meets your requirements. After selecting a partnership program, you can see its description that provides important information about the program. Click **Become a Partner** to join the selected partnership program. If several partnership programs are available to you and you've already joined one of them and want to join one more: Expand the partnership section in the main menu (labeled **IB Room** or **Partners**, depending on the broker configuration) and click any option in the expanded menu, such as **Partner Dashboard**, **Promo**, or **Reports**. In the dropdown located at the top of the page, select **Become a Partner**. In the displayed **Partner Program** dropdown, select a partnership program to which you want to join. Click **Become a Partner** to join the selected partnership program. Depending on the platform configuration, you may be allowed to join the selected partnership program immediately or after a B2CORE admin confirms your request for joining the program. After joining your first partnership program, you can access the menu options located under the partnership section (**IB Room** or **Partners**) in the main menu. The Market Data session provides real-time order book streaming via the FIX 4.4 protocol. Use this session to subscribe to price updates for specific trading instruments and receive continuous market data. For FIX connection settings (host, port, SenderCompID, TargetCompID, credentials), contact your broker. This page covers the **Market Data** session only. For trading operations (order placement, execution reports), use the [Trading](trading) session. ## Supported message types [#supported-message-types] The following values can be assigned to the `<35>` MsgType field: * `A` — Logon (Client → B2TRADER) * `0` — Heartbeat (Client ↔ B2TRADER) * `1` — Test Request (Client ↔ B2TRADER) * `3` — Reject (Client ← B2TRADER) * `4` — Sequence Reset (Client ↔ B2TRADER) * `5` — Logout (Client ↔ B2TRADER) * `V` — Market Data Request (Client → B2TRADER) * `W` — Market Data — Snapshot/Full Refresh (Client ← B2TRADER) * `X` — Market Data — Incremental Refresh (Client ← B2TRADER) * `Y` — Market Data Request Reject (Client ← B2TRADER) * `j` — Business Reject (Client ← B2TRADER) ## Getting started [#getting-started] ### Connection [#connection] To connect to the Market Data session, use the following parameters provided by B2TRADER: * **Host and port**: The Market Data endpoint (provided separately from the Trading endpoint) * **SenderCompID**: Your client identifier for the Market Data session * **TargetCompID**: The server identifier for the Market Data session * **Protocol**: FIX 4.4 The Market Data connection does not require SSL. ### Message structure [#message-structure] **Standard Header** All FIX messages must begin with a Standard Header containing the following fields: **`8 BeginString`** `String` Identifies the FIX version (`FIX.4.4`). Always the first field in a message. **`9 BodyLength`** `int` The automatically computed message length, in bytes. Always the second field. **`35 MsgType`** `String` The message type. See [Supported message types](#supported-message-types) for possible values. Always the third field. **`34 MsgSeqNum`** `int` The message sequence number, incremented by 1 for each consecutive message. **`49 SenderCompID`** `String` The identifier of the message sender. Provided by B2TRADER. **`52 SendingTime`** `Timestamp` The date and time when the message was sent, in UTC: `YYYYMMDD-HH:MM:SS.sss`. **`56 TargetCompID`** `String` The identifier of the message recipient. Provided by B2TRADER. *** **Standard Trailer** All FIX messages must end with a Standard Trailer: **`10 CheckSum`** `int` A three-digit checksum. Always the last field in a message. ### Logon (A) [#logon-a] This message is sent by the client to initiate a FIX session. It must be the first message in each connection. **`1 Account`** `String` The account identifier. Required. Provided by B2TRADER. **`98 EncryptMethod`** `int` The encryption method. Required. Must be `0` (no encryption). **`108 HeartBtInt`** `int` The heartbeat interval, in seconds. Required. Indicates how often the server sends Heartbeat messages as part of a connection health check. **`141 ResetSeqNumFlag`** `Boolean` Indicates whether both parties should reset the currently used sequence numbers. Optional. **`553 Username`** `String` The client username. Required. Provided by B2TRADER. **`554 Password`** `String` The client password. Required. Provided by B2TRADER. ```text title="Request (Client → B2TRADER)" 8=FIX.4.4^9=138^35=A^1=68a4446ac84827ff5cd35c74^34=1^52=20231218-07:59:06.000^49=sender_b2trader^56=target_b2trader^554=password^553=username^98=0^108=30^10=139^ ``` ```text title="Response (B2TRADER → Client)" 8=FIX.4.4^9=112^35=A^1=68a4446ac84827ff5cd35c74^34=1^49=target_b2trader^52=20231218-07:59:06.655^56=sender_b2trader^98=0^108=30^10=009^ ``` ### Session maintenance [#session-maintenance] #### Heartbeat (0) [#heartbeat-0] This message is sent back and forth between the server and the client to check the connection status and in response to Test Request messages. **`112 TestReqID`** `String` The identifier of a Test Request in response to which this Heartbeat is sent. Required when the Heartbeat is a response to a Test Request. ```text title="Example" 8=FIX.4.4^9=73^35=0^34=2^52=20231218-07:59:36.000^49=sender_b2trader^56=target_b2trader^10=202^ ``` #### Test Request (1) [#test-request-1] This message is sent back and forth between the server and the client as a means of connectivity check. If a Heartbeat is not received within the expected interval, a Test Request is sent; the recipient must respond with a Heartbeat containing the same `<112>` TestReqID. **`112 TestReqID`** `String` The identifier of a Test Request. Optional. ```text title="Example" 8=FIX.4.4^9=81^35=1^34=137^52=20231218-10:12:38.000^49=sender_b2trader^56=target_b2trader^112=2^10=040^ ``` #### Sequence Reset (4) [#sequence-reset-4] This message indicates the sequence number of the next message from the sender, immediately following the Sequence Reset. This may be necessary to recover from a disconnect when some messages were lost or their resending is not desirable. **`123 GapFillFlag`** `Boolean` Indicates that this message replaces missing messages that won't be resent. Optional. Possible values: * `Y` — Gap fill: `<34>` MsgSeqNum is valid and indicates the beginning of the gap fill range * `N` — Sequence reset: `<34>` MsgSeqNum is ignored. Should only be used in disaster recovery situations **`36 NewSeqNo`** `int` The new sequence number. Required. ```text title="Example" 8=FIX.4.4^9=84^35=4^34=6^49=target_b2trader^52=20231219-21:11:38.578^56=sender_b2trader^123=Y^36=8^10=231^ ``` #### Logout (5) [#logout-5] This message is sent by the client or server to terminate a session. When terminated, the possible reason is specified in the `<58>` Text field. **`58 Text`** `String` The detailed information about the reason for logging out. Optional. ```text title="Request (Client → B2TRADER)" 8=FIX.4.4^9=83^35=5^34=5^52=20231218-13:40:48.000^49=sender_b2trader^56=target_b2trader^58=ST1234^10=229^ ``` ```text title="Response (B2TRADER → Client)" 8=FIX.4.4^9=75^35=5^34=748^49=target_b2trader^52=20231218-13:40:49.016^56=sender_b2trader^10=064^ ``` ### Reject (3) [#reject-3] This message is sent by the server upon receiving a malformed message from the client. The rejection reason is specified in the `<373>` SessionRejectReason field. This message is unrelated to application-level rejections (Market Data Request Reject and Business Reject). **`45 RefSeqNum`** `int` The sequence number of the rejected message (`<34>` MsgSeqNum). Required. **`371 RefTagID`** `int` The tag number of the field that caused message rejection. Optional. **`372 RefMsgType`** `String` The type of the rejected message (`<35>` MsgType). Optional. **`373 SessionRejectReason`** `int` The reason why the message is rejected. Optional. Possible values: * `0` — Invalid tag number * `1` — Required tag missing * `2` — Tag not defined for this message type * `3` — Undefined tag * `4` — Tag has no value assigned * `5` — Value is incorrect (out of range) for this tag * `6` — Incorrect value data format * `7` — Decryption issue * `8` — Signature problem * `9` — CompID issue * `10` — SendingTime accuracy issue * `11` — Invalid MsgType * `12` — XML validation error * `13` — Same tag appears more than once * `14` — Tag specified not in required order * `15` — Wrong order of repeating group fields * `16` — Incorrect NumInGroup count for repeating group * `17` — Non-"Data" value includes field delimiter (SOH character) * `99` — Other **`58 Text`** `String` The detailed information about the rejection reason. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=125^35=3^34=193^52=20231219-22:41:16.000^49=target_b2trader^56=sender_b2trader^45=18^371=262^372=V^373=1^58=Required tag missing^10=122^ ``` *** ## Market Data Request (V) [#market-data-request-v] This message is sent by the client to subscribe to real-time quoting data for a specified ticker symbol. After subscribing, the server sends an initial Market Data — Snapshot/Full Refresh, followed by continuous Market Data — Incremental Refresh messages with each market data update. To subscribe to multiple symbols, send a separate Market Data Request for each symbol. To unsubscribe, send a Market Data Request with `<263>` SubscriptionRequestType set to `2`. All subscriptions are also terminated when the session is closed via Logout. **`262 MDReqID`** `String` The identifier of the Market Data Request. Required. Must be unique for the duration of each session. When unsubscribing, specify the ID of a previous request to discard. **`263 SubscriptionRequestType`** `int` The type of response expected from the server. Required. Possible values: * `1` — Subscribe: receive updates as the market status changes * `2` — Unsubscribe: stop streaming market data for the specified symbol **`264 MarketDepth`** `int` The market depth for an order book snapshot. Required. Possible values: * `0` — Full order book * `1` — Top-of-the-book prices **`265 MDUpdateType`** `int` The update type. Required. Must be `1` (incremental updates for changed price levels only). **`267 NoMDEntryTypes`** `int` The number of `<269>` MDEntryType entries requested. Required. > Repeating group: **`269 MDEntryType`** `int` The side of the quote. Required. Possible values: * `0` — Bid * `1` — Ask **`146 NoRelatedSym`** `int` The number of ticker symbols. Required. Must be `1`. To subscribe to multiple symbols, send a separate request for each. > Repeating group: **`55 Symbol`** `String` The market identifier. Required. Format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. ```text title="Example (Client → B2TRADER)" 8=FIX.4.4^9=141^35=V^34=7^52=20231220-08:11:50.000^49=sender_b2trader^56=target_b2trader^262=1235^263=1^264=0^265=1^267=2^269=0^269=1^146=1^55=spot.btc_usdt^10=250^ ``` ## Market Data — Snapshot/Full Refresh (W) [#market-data--snapshotfull-refresh-w] This message is sent by the server after the client subscribes to a ticker symbol. It contains the full current state of the order book. Subsequent updates are delivered as Market Data — Incremental Refresh messages. **`55 Symbol`** `String` The market identifier. Format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`262 MDReqID`** `String` The identifier of the originating Market Data Request. **`268 NoMDEntries`** `int` The number of market data entries following. The value is `0` if the order book is empty. > Repeating group (present when `<268>` NoMDEntries > 0): **`269 MDEntryType`** `int` The side of the quote. Conditional — required if `<268>` NoMDEntries is not `0`. Possible values: * `0` — Bid * `1` — Ask **`270 MDEntryPx`** `Price` The price of the market data entry. Conditional — required if `<268>` NoMDEntries is not `0`. **`271 MDEntrySize`** `Qty` The tradable volume of the market data entry. Conditional — required if `<268>` NoMDEntries is not `0`. **`278 MDEntryID`** `String` A unique market data entry identifier. Conditional — required if `<268>` NoMDEntries is not `0`. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=507^35=W^34=48^49=target_b2trader^52=20231222-14:40:39.983^56=sender_b2trader^55=spot.btc_usdt^262=1235^268=9^269=1^270=1.10338^271=3000000^278=4441516524^269=1^270=1.10337^271=1000000^278=4441516521^269=1^270=1.10339^271=5000000^278=4441516523^269=1^270=1.10335^271=600000^278=4441516522^269=0^270=1.10333^271=500000^278=4441516520^269=0^270=1.10332^271=1000000^278=4441516517^269=0^270=1.10331^271=3000000^278=4441516516^269=0^270=1.10334^271=100000^278=4441516519^269=0^270=1.1033^271=5000000^278=4441516518^10=025^ ``` ## Market Data — Incremental Refresh (X) [#market-data--incremental-refresh-x] This message is continuously sent by the server after the initial Snapshot/Full Refresh. Each message includes only the changes since the previous update. **`55 Symbol`** `String` The market identifier. Format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`262 MDReqID`** `String` The identifier of the originating Market Data Request. **`268 NoMDEntries`** `int` The number of market data entries following. The value is `0` if the order book is empty. > Repeating group (present when `<268>` NoMDEntries > 0): **`269 MDEntryType`** `int` The side of the quote. Conditional — required if `<268>` NoMDEntries is not `0`. Possible values: * `0` — Bid * `1` — Ask **`270 MDEntryPx`** `Price` The price of the market data entry. Conditional — required if `<268>` NoMDEntries is not `0`. **`271 MDEntrySize`** `Qty` The tradable volume of the market data entry. Conditional — required if `<268>` NoMDEntries is not `0`. **`278 MDEntryID`** `String` A unique market data entry identifier. Conditional — required if `<268>` NoMDEntries is not `0`. * Must be unique among active entries when `<279>` MDUpdateAction is `0` (New) * Must match the previous `<278>` MDEntryID when `<279>` MDUpdateAction is `1` (Change) or `2` (Delete) **`279 MDUpdateAction`** `int` The update type. Conditional — required if `<268>` NoMDEntries is not `0`. Possible values: * `0` — New * `1` — Change * `2` — Delete **`58 Text`** `String` Additional context. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=201^35=X^34=52^49=target_b2trader^52=20231222-14:40:41.150^56=sender_b2trader^55=spot.btc_usdt^262=1235^268=2^279=1^269=0^270=1.10334^271=200000^278=4441516519^279=2^269=1^270=1.10339^271=0^278=4441516523^10=092^ ``` ## Market Data Request Reject (Y) [#market-data-request-reject-y] This message is sent by the server to reject a Market Data Request due to business or technical reasons. **`262 MDReqID`** `String` The identifier of the rejected Market Data Request. Required. **`281 MDReqRejReason`** `int` The reason why the request is rejected. Optional. Possible values: * `0` — Unknown symbol * `1` — Duplicate MDReqID * `2` — Insufficient bandwidth * `3` — Insufficient permissions * `4` — Unsupported SubscriptionRequestType * `5` — Unsupported MarketDepth * `6` — Unsupported MDUpdateType * `8` — Unsupported MDEntryType **`58 Text`** `String` The detailed information about the rejection reason. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=118^35=Y^34=3^49=target_b2trader^52=20231221-10:25:11.849^56=sender_b2trader^262=1234^58=symbol 'btcusd' is not supported^10=104^ ``` ## Business Reject (j) [#business-reject-j] This message is sent by the server to reject a message due to a business-level issue not addressed by the standard Market Data Request Reject or session-level Reject. **`45 RefSeqNum`** `int` The sequence number of the rejected message (`<34>` MsgSeqNum). Required. **`372 RefMsgType`** `String` The type of the rejected message (`<35>` MsgType). Optional. **`380 BusinessRejectReason`** `int` The reason why the request is rejected. Required. Possible values: * `0` — Other * `1` — Unknown ID * `2` — Unknown Security * `3` — Unsupported MsgType * `4` — Application not available * `5` — Conditionally required field missing * `6` — Not authorized * `7` — DeliverTo firm not available at this time **`58 Text`** `String` The detailed information about the rejection reason. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=120^35=j^34=2^49=target_b2trader^52=20231219-22:30:39.617^56=sender_b2trader^45=133^58=Unsupported Message Type^372=V^380=3^10=166^ ``` The Trading session enables order placement and execution management via the FIX 4.4 protocol. Use this session to submit orders and receive real-time execution reports for your trading activity. For FIX connection settings (host, port, SenderCompID, TargetCompID, credentials), contact your broker. This page covers the **Trading** session only. For real-time order book streaming, use the [Market Data](market-data) session. ## Supported message types [#supported-message-types] The following values can be assigned to the `<35>` MsgType field: * `A` — Logon (Client → B2TRADER) * `0` — Heartbeat (Client ↔ B2TRADER) * `1` — Test Request (Client ↔ B2TRADER) * `3` — Reject (Client ← B2TRADER) * `4` — Sequence Reset (Client ↔ B2TRADER) * `5` — Logout (Client ↔ B2TRADER) * `D` — New Order Single (Client → B2TRADER) * `8` — Execution Report (Client ← B2TRADER) * `j` — Business Reject (Client ← B2TRADER) ## Getting started [#getting-started] ### Connection [#connection] To connect to the Trading session, use the following parameters provided by B2TRADER: * **Host and port**: The Trading endpoint (provided separately from the Market Data endpoint) * **SenderCompID**: Your client identifier for the Trading session * **TargetCompID**: The server identifier for the Trading session * **Protocol**: FIX 4.4 The Trading connection requires SSL with a self-signed certificate. ### Message structure [#message-structure] **Standard Header** All FIX messages must begin with a Standard Header containing the following fields: **`8 BeginString`** `String` Identifies the FIX version (`FIX.4.4`). Always the first field in a message. **`9 BodyLength`** `int` The automatically computed message length, in bytes. Always the second field. **`35 MsgType`** `String` The message type. See [Supported message types](#supported-message-types) for possible values. Always the third field. **`34 MsgSeqNum`** `int` The message sequence number, incremented by 1 for each consecutive message. **`49 SenderCompID`** `String` The identifier of the message sender. Provided by B2TRADER. **`52 SendingTime`** `Timestamp` The date and time when the message was sent, in UTC: `YYYYMMDD-HH:MM:SS.sss`. **`56 TargetCompID`** `String` The identifier of the message recipient. Provided by B2TRADER. *** **Standard Trailer** All FIX messages must end with a Standard Trailer: **`10 CheckSum`** `int` A three-digit checksum. Always the last field in a message. ### Logon (A) [#logon-a] This message is sent by the client to initiate a FIX session. It must be the first message in each connection. **`1 Account`** `String` The account identifier. Required. Provided by B2TRADER. **`98 EncryptMethod`** `int` The encryption method. Required. Must be `0` (no encryption). **`108 HeartBtInt`** `int` The heartbeat interval, in seconds. Required. Indicates how often the server sends Heartbeat messages as part of a connection health check. **`141 ResetSeqNumFlag`** `Boolean` Indicates whether both parties should reset the currently used sequence numbers. Optional. **`553 Username`** `String` The client username. Required. Provided by B2TRADER. **`554 Password`** `String` The client password. Required. Provided by B2TRADER. ```text title="Request (Client → B2TRADER)" 8=FIX.4.4^9=117^35=A^1=68a4446ac84827ff5cd35c74^34=1^52=20231218-07:59:06.000^49=sender_b2trader^56=target_b2trader^554=password^553=username^98=0^108=30^10=117^ ``` ```text title="Response (B2TRADER → Client)" 8=FIX.4.4^9=93^35=A^1=68a4446ac84827ff5cd35c74^34=225^49=target_b2trader^52=20231218-07:59:06.655^56=sender_b2trader^98=0^108=30^10=054^ ``` ### Session maintenance [#session-maintenance] #### Heartbeat (0) [#heartbeat-0] This message is sent back and forth between the server and the client to check the connection status and in response to Test Request messages. **`112 TestReqID`** `String` The identifier of a Test Request in response to which this Heartbeat is sent. Conditional — required when sent in response to a Test Request. ```text title="Example" 8=FIX.4.4^9=79^35=0^34=2^52=20231218-07:59:36.000^49=sender_b2trader^56=target_b2trader^10=156^ ``` #### Test Request (1) [#test-request-1] This message is sent back and forth between the server and the client as a means of connectivity check. If a Heartbeat is not received within the expected interval, a Test Request is sent; the recipient must respond with a Heartbeat containing the same `<112>` TestReqID. **`112 TestReqID`** `String` The identifier of a Test Request. Required. ```text title="Example" 8=FIX.4.4^9=87^35=1^34=137^52=20231218-10:12:38.000^49=sender_b2trader^56=target_b2trader^112=2^10=250^ ``` #### Sequence Reset (4) [#sequence-reset-4] This message indicates the sequence number of the next message from the sender, immediately following the Sequence Reset. This may be necessary to recover from a disconnect when some messages were lost or their resending is not desirable. **`123 GapFillFlag`** `Boolean` Indicates that this message replaces missing messages that won't be resent. Optional. Possible values: * `Y` — Gap fill: `<34>` MsgSeqNum is valid and indicates the beginning of the gap fill range * `N` — Sequence reset: `<34>` MsgSeqNum is ignored. Should only be used in disaster recovery situations **`36 NewSeqNo`** `int` The new sequence number. Required. ```text title="Example" 8=FIX.4.4^9=90^35=4^34=6^49=target_b2trader^52=20231219-21:11:38.578^56=sender_b2trader^123=Y^36=8^10=176^ ``` #### Logout (5) [#logout-5] This message is sent by the client or server to terminate a session. When terminated, the possible reason is specified in the `<58>` Text field. **`58 Text`** `String` The detailed information about the reason for logging out. Optional. ```text title="Request (Client → B2TRADER)" 8=FIX.4.4^9=105^35=5^34=5^52=20231218-13:40:48.000^49=sender_b2trader^56=target_b2trader^58=Session terminated by client^10=183^ ``` ```text title="Response (B2TRADER → Client)" 8=FIX.4.4^9=81^35=5^34=748^49=target_b2trader^52=20231218-13:40:49.016^56=sender_b2trader^10=009^ ``` ### Reject (3) [#reject-3] This message is sent by the server upon receiving a malformed message from the client. The rejection reason is specified in the `<373>` SessionRejectReason field. This message is unrelated to application-level rejections (Execution Report with rejected status and Business Reject). **`45 RefSeqNum`** `int` The sequence number of the rejected message (`<34>` MsgSeqNum). Required. **`371 RefTagID`** `int` The tag number of the field that caused message rejection. Optional. **`372 RefMsgType`** `String` The type of the rejected message (`<35>` MsgType). Optional. **`373 SessionRejectReason`** `int` The reason why the message is rejected. Optional. Possible values: * `0` — Invalid tag number * `1` — Required tag missing * `2` — Tag not defined for this message type * `3` — Undefined tag * `4` — Tag has no value assigned * `5` — Value is incorrect (out of range) for this tag * `6` — Incorrect value data format * `7` — Decryption issue * `8` — Signature problem * `9` — CompID issue * `10` — SendingTime accuracy issue * `11` — Invalid MsgType * `12` — XML validation error * `13` — Same tag appears more than once * `14` — Tag specified not in required order * `15` — Wrong order of repeating group fields * `16` — Incorrect NumInGroup count for repeating group * `17` — Non-"Data" value includes field delimiter (SOH character) * `99` — Other **`58 Text`** `String` The detailed information about the rejection reason. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=128^35=3^34=193^52=20231219-22:41:16.000^49=target_b2trader^56=sender_b2trader^45=18^371=11^372=D^373=1^58=Required tag missing: ClOrdID^10=126^ ``` *** ## New Order Single (D) [#new-order-single-d] This message is sent by the client to place a new order. The server responds with an Execution Report confirming the order status. For details on supported order types, see [Order types](../get-started/order-types). For details on time-in-force options, see [Time in force](../get-started/time-in-force). **`11 ClOrdID`** `String` The unique client-assigned order identifier. Required. **`1 Account`** `String` The account identifier. Required. Provided by B2TRADER. **`55 Symbol`** `String` The market identifier. Required. Format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. **`54 Side`** `char` The order side. Required. Possible values: * `1` — Buy * `2` — Sell **`38 OrderQty`** `Qty` The order quantity. Required. Must be greater than zero. The decimal precision must not exceed the market's amount scale, and the value must be at least the market's minimum amount. **`40 OrdType`** `char` The order type. Required. Possible values: * `1` — Market * `2` — Limit **`59 TimeInForce`** `char` The order's time-in-force policy. Required. Possible values: * `0` — Day * `1` — Good Till Cancel (GTC) * `3` — Immediate or Cancel (IOC) * `4` — Fill or Kill (FOK) * `6` — Good Till Date (GTD) **`44 Price`** `Price` The order price. Conditional — required when `<40>` OrdType is `2` (Limit), must not be present when `<40>` OrdType is `1` (Market). Must be greater than zero. The decimal precision must not exceed the market's price scale. **`126 ExpireTime`** `UTCTimestamp` The order expiration time. Conditional — required when `<59>` TimeInForce is `6` (GTD), must not be present otherwise. **`60 TransactTime`** `UTCTimestamp` The time of order creation. Required. ```text title="Limit order example (Client → B2TRADER)" 8=FIX.4.4^9=168^35=D^34=3^52=20231220-09:15:30.000^49=sender_b2trader^56=target_b2trader^1=68a4446ac84827ff5cd35c74^11=order001^55=spot.btc_usdt^54=1^38=0.5^40=2^44=42500.00^59=1^60=20231220-09:15:30.000^10=123^ ``` ```text title="Market order example (Client → B2TRADER)" 8=FIX.4.4^9=155^35=D^34=4^52=20231220-09:16:00.000^49=sender_b2trader^56=target_b2trader^1=68a4446ac84827ff5cd35c74^11=order002^55=spot.btc_usdt^54=2^38=0.1^40=1^59=3^60=20231220-09:16:00.000^10=045^ ``` ## Execution Report (8) [#execution-report-8] This message is sent by the server to confirm order status changes, including acknowledgment of new orders, fills, partial fills, cancellations, and rejections. For details on order statuses, see [Order statuses](../get-started/order-statuses). **`37 OrderID`** `String` The server-assigned unique order identifier. Required. **`11 ClOrdID`** `String` The client-assigned order identifier from the original New Order Single. Required. **`17 ExecID`** `String` The unique execution identifier. Present for trade executions. **`150 ExecType`** `char` The type of execution being reported. Required. Possible values: * `0` — New: order has been accepted * `4` — Canceled: order has been canceled by the server (e.g., IOC order partially filled, GTD order expired, or market settings changed) * `8` — Rejected: order has been rejected * `F` — Trade: order has been partially or fully filled **`39 OrdStatus`** `char` The current order status. Required. Possible values: * `0` — New * `1` — Partially filled * `2` — Filled * `4` — Canceled * `8` — Rejected **`1 Account`** `String` The account identifier. Required. **`55 Symbol`** `String` The market identifier. Format: `{marketType}.{baseAssetId}_{quoteAssetId}`. **`54 Side`** `char` The order side. Required. Possible values: * `1` — Buy * `2` — Sell **`40 OrdType`** `char` The order type. Required. Possible values: * `1` — Market * `2` — Limit **`44 Price`** `Price` The order price. Present for Limit orders. **`6 AvgPx`** `Price` The average price of all fills on this order. Required. **`14 CumQty`** `Qty` The total filled quantity. Required. **`151 LeavesQty`** `Qty` The remaining quantity to be filled. Required. Set to `0` for Canceled or Rejected orders. **`31 LastPx`** `Price` The price of the last fill. Present when `<150>` ExecType is `F` (Trade). **`32 LastQty`** `Qty` The quantity of the last fill. Present when `<150>` ExecType is `F` (Trade). **`15 Currency`** `String` The quote asset identifier. Optional. **`60 TransactTime`** `UTCTimestamp` The transaction time. Required. **`64 SettlDate`** `String` The settlement date in `YYYYMMDD` format. Required. **`58 Text`** `String` Additional information, such as the rejection reason. Optional. ```text title="New order accepted (B2TRADER → Client)" 8=FIX.4.4^9=220^35=8^34=5^52=20231220-09:15:30.100^49=target_b2trader^56=sender_b2trader^37=01HBXK5V3R8NQ7YP^11=order001^150=0^39=0^1=68a4446ac84827ff5cd35c74^55=spot.btc_usdt^54=1^40=2^44=42500.00^6=0^14=0^151=0.5^60=20231220-09:15:30.100^64=20231220^10=087^ ``` ```text title="Trade execution (B2TRADER → Client)" 8=FIX.4.4^9=245^35=8^34=6^52=20231220-09:15:30.200^49=target_b2trader^56=sender_b2trader^37=01HBXK5V3R8NQ7YP^11=order001^17=01HBXK5V3R8NQ7YR^150=F^39=2^1=68a4446ac84827ff5cd35c74^55=spot.btc_usdt^54=1^40=2^44=42500.00^6=42500.00^14=0.5^151=0^31=42500.00^32=0.5^15=usdt^60=20231220-09:15:30.200^64=20231220^10=154^ ``` ```text title="Order rejected (B2TRADER → Client)" 8=FIX.4.4^9=214^35=8^34=7^52=20231220-09:16:00.100^49=target_b2trader^56=sender_b2trader^37=01HBXK5V3R8NQ7YS^11=order002^150=8^39=8^1=68a4446ac84827ff5cd35c74^55=spot.btc_usdt^54=2^40=1^6=0^14=0^151=0^58=Insufficient balance^60=20231220-09:16:00.100^64=20231220^10=201^ ``` ## Business Reject (j) [#business-reject-j] This message is sent by the server to reject a message due to a business-level issue not addressed by the standard session-level Reject or Execution Report rejection. **`45 RefSeqNum`** `int` The sequence number of the rejected message (`<34>` MsgSeqNum). Required. **`372 RefMsgType`** `String` The type of the rejected message (`<35>` MsgType). Optional. **`380 BusinessRejectReason`** `int` The reason why the request is rejected. Required. Possible values: * `0` — Other * `1` — Unknown ID * `2` — Unknown Security * `3` — Unsupported MsgType * `4` — Application not available * `5` — Conditionally required field missing * `6` — Not authorized * `7` — DeliverTo firm not available at this time **`58 Text`** `String` The detailed information about the rejection reason. Optional. ```text title="Example (B2TRADER → Client)" 8=FIX.4.4^9=100^35=j^34=2^49=target_b2trader^52=20231219-22:30:39.617^56=sender_b2trader^45=133^58=Unsupported Message Type^372=V^380=3^10=006^ ``` Each trading account has an `accountStatus` field that determines which operations are permitted on the account. The field is returned on account objects by the API, such as in [Get accounts](../rest-api/settings). An account can be assigned one of the following statuses: * **Active**: All operations are permitted, including placing, modifying, and canceling orders, opening and closing positions, deposits, and withdrawals. * **Halted**: Trader-initiated trading is blocked. Requests to place, modify, or cancel orders and to open or close positions are rejected. Deposits and withdrawals remain allowed. Managed trading through the Management API (MAM, B2COPY) continues to work. * **Frozen**: All operations are blocked. Trading, deposits, and withdrawals are unavailable, and the account is view-only. Stop-out liquidation still executes as a safety mechanism. * **Archived**: The account is decommissioned and hidden from all user-facing surfaces. Real-time profit and loss, equity, margin level, and funding settlement continue for all statuses. Archived accounts are never returned in the trading API account list. They are excluded server-side, so an account that changes to *Archived* stops appearing in [Get accounts](../rest-api/settings) responses. A market can be assigned one of the following statuses: * **Open**: The market is operating properly and accepts orders via Trading terminal and API. Market data for charts is persisted. * **Paused**: The market stops accepting incoming orders via Trading terminal and API (previously placed Limit orders still await execution). Market data for charts is persisted. * **Halted**: The market stops accepting incoming orders via Trading terminal and API. All open Limit orders will be cancelled. Market data for charts is persisted. * **Disabled**: The market stops accepting incoming orders via Trading terminal and API. All open Limit orders will be cancelled. Market data for charts is not persisted. * **Archived**: The market is retired from regular operations. It doesn't accept trading activity, isn't included in market synchronization responses, and its historical chart data is deleted. ## Market and Limit orders [#market-and-limit-orders] Orders can be assigned one of the following statuses: * **Started**: The order has passed preliminary checks. * **Pending**: For Limit orders: the order is waiting for a price trigger. * **Working**: The order is being executed. * **Completed**: The order has been executed in its full amount. * **Cancelled**: The order has been cancelled by a trader. * **Rejected**: The order has been rejected by the system and has never been assigned the *Working* status. * **Expired**: The order has been cancelled due to [Time in force](time-in-force) settings. Some part of it may have already been executed. The status is applicable for GTD and Day orders only. ## Stop orders [#stop-orders] Orders can be assigned one of the following statuses: * **Waiting for activation**: The order awaits the Activation price trigger. * **Activated**: The Activation price has been reached, a new Market or Limit order has been placed. * **Rejected**: The Activation price has been reached, but an issue occurred with placing of a new Market or Limit order. The following order types are supported: * **Market**: An instruction to instantly buy or sell a certain asset amount at a currently best price on the market. Such orders are not listed in the order book. * **Limit**: An instruction to buy or sell a certain asset amount at a specified price. Limit orders are placed in the order book and executed only after the market price reaches the specified limit price (or at a better price). * **Stop Market**: Such an order is not placed unless the current market price meets a specified stop (or trigger) price, after which the order is placed as a regular Market order due to be executed or cancelled, depending on its Time in force. * **Stop Limit**: The order is similar to the Stop Market order in the sense that you need to indicate the stop price at which the order must be placed, after which it becomes a regular Limit order awaiting execution at a specified limit price. For Stop buy orders, the stop price should be above the best ask price; for Stop sell orders, the stop price should be below the best bid price (otherwise, the orders will be activated instantly). Stop Market and Stop Limit orders are accepted while a market is closed according to its trading calendar. The order is stored with the standard `WaitingForActivation` status and is evaluated against the first available price when the session opens. Market and Limit orders are still rejected while the market is closed. The market's own status must still be `Open` — a `Paused` or `Halted` market rejects every order type. Refer to [Time in force](time-in-force) to learn about execution parameters that can be specified for different order types. ## Introduction [#introduction] B2TRADER provides developers with three distinct methods for data delivery, each optimized for specific use cases and performance requirements: REST, WebSocket, and FIX APIs. The **REST API** provides read access to market data as well as both read and write access to trading operations. It serves as the foundation for synchronous data operations where immediate confirmation and guaranteed delivery are essential. The **WebSocket API** provides access to public market data streaming as well as private account updates. It delivers real-time updates with low latency, making it ideal for live trading environments. The **FIX API** provides direct access to market data and trading via the FIX 4.4 protocol. It is designed for institutional clients and algorithmic trading systems that require standardized, low-latency connectivity using the industry-standard Financial Information eXchange protocol. This approach provides developers with flexible options for building robust, scalable trading applications that can handle both operational requirements and real-time market dynamics. ### When to use REST API [#when-to-use-rest-api] * **Account configuration and settings**: Managing user preferences and system configurations. * **Order placement and modification**: Creating, updating, and canceling trading orders. * **Historical data retrieval**: Accessing past trading records and market data. * **One-time data requests**: Retrieving specific information that doesn't require continuous updates. * **Administrative operations**: Account management and system administration tasks. ### When to use WebSocket API [#when-to-use-websocket-api] * **Real-time price monitoring**: Live market price feeds and ticker updates. * **Live position tracking**: Continuous monitoring of open and closed positions. * **Order book visualization**: Real-time depth of market data. * **Market data feeds**: Streaming market statistics and trading activity. * **Account balance monitoring**: Live updates of account equity and margin status. ### When to use FIX API [#when-to-use-fix-api] * **Institutional connectivity**: Standardized FIX 4.4 protocol for professional trading infrastructure. * **Algorithmic trading**: Low-latency order execution and market data for automated strategies. * **Market data streaming**: Real-time order book snapshots and incremental updates via FIX protocol. * **Multi-venue integration**: Unified FIX connectivity for systems already integrated with other FIX-based venues. ## General considerations [#general-considerations] The following applies to all interface descriptions provided in this documentation: * **Endpoints**: All endpoints are relative and resolved based on a specified hostname (indicated as `{host}`). * **Authentication**: REST and WebSocket APIs require an access token (see [Authentication](#authentication)). The FIX API uses in-band authentication via the Logon message with Username, Password, and Account fields provided by B2TRADER. * **Data format**: REST and WebSocket APIs return results in JSON format. The FIX API uses the standard FIX 4.4 message format. * **Security**: All communications use secure protocols (HTTPS for REST, WSS for WebSocket, encrypted TCP for FIX). ### Authentication [#authentication] API access requires an access token for both REST and WebSocket connections. Authentication follows a two-step process: 1. Generate an offline token in the Trading terminal. 2. Exchange the offline token for an access token via API call. #### Token types [#token-types] **Offline token** * **Limit**: 10 tokens per account * **Validity**: 1 year * **Management**: Can be revoked or deleted at any time * **Purpose**: Generate access tokens **Access token** * **Type**: Bearer token * **Validity**: 60 minutes * **Purpose**: Authorize API requests ### Generate offline token [#generate-offline-token] To generate an offline token: 1. In the Trading terminal, open **Settings** and select **API token management**. 2. Click **+ Create new**. 3. In the **New API token** popup, fill in a **Name** for the token, to help you identify it later. 4. Click **Create**. The newly generated token will be displayed and available for copying, along with its name and expiration date. The token only reveals once in the creation popup. Copy and store it securely before closing the popup. The token can't be retrieved again after closing. ### Obtain access token [#obtain-access-token] Request an access token using your offline token. **Endpoint**: `POST` `/frontoffice/api/v4/access-token` **Request body**: ```json { "token": "{YOUR_OFFLINE_TOKEN}" } ``` **Response** (Success): ```json { "accessToken": "{YOUR_ACCESS_TOKEN}", "expiresIn": 3600, "tokenType": "Bearer" } ``` **`accessToken`** `string` The access token for API authorization. **`expiresIn`** `integer` The token lifetime, in seconds. **`tokenType`** `string` The authentication type, always `"Bearer"`. ### Using access tokens [#using-access-tokens] Include the access token in API requests: ```http title="REST" Authorization: Bearer {YOUR_ACCESS_TOKEN} ``` ```http title="WebSocket" {URL}?access_token={YOUR_ACCESS_TOKEN} ``` Access tokens must be refreshed before expiration by repeating the Step 2 with your offline token. ## REST API: Synchronous data operations [#rest-api-synchronous-data-operations] The REST API serves as the foundation for synchronous data operations within the B2TRADER platform. This approach follows standard HTTP protocols and is ideal for operations requiring immediate confirmation and guaranteed delivery. ### Key characteristics [#key-characteristics] * **Request-response operations** where immediate confirmation is required. * **Account management** including settings and configuration. * **Order placement and modification** with guaranteed delivery. * **Historical data retrieval** for analysis and reporting. * **Stateless operations** that don't require persistent connections. ### HTTP response codes [#http-response-codes] B2TRADER API uses conventional HTTP response codes to indicate the success or failure of requests. **Success codes:** * `200 OK` — Request successful **Error codes:** * `400 Bad Request` — Invalid request parameters * `401 Unauthorized` — Authentication required * `403 Forbidden` — Insufficient permissions * `404 Not Found` — Resource not found * `429 Too Many Requests` — [Rate limit](#rate-limits) exceeded * `500 Internal Server Error` — Server error In case of an error, an object will be returned with the following structure: ```json { "code": "text", "message": "text", "details": { "source": "text", "message": "text", "stackTrace": "text" } } ``` ### Available endpoints [#available-endpoints] * **[Trading operations](../rest-api/trading)**: Create, modify, and cancel orders; open, close, and modify positions; control price trigger settings. * **[Trading history](../rest-api/history)**: Retrieve detailed execution records for positions and orders. * **[Settings and configurations](../rest-api/settings)**: Access account information, market specifications, trading sessions, and asset details. ### Rate limits [#rate-limits] Rate limits are applied per minute for each unique **AccountId** to ensure fair resource usage and maintain optimal API performance. All limits use the **Fixed Window** strategy. When rate limits are exceeded, the API returns a `429 Too Many Requests` HTTP status code. #### Trading methods [#trading-methods] * **Default limit**: 600 requests per minute for all methods. * **Reduced limit (200 rpm)** applies to: * Get order data methods * Bulk close positions method * Price triggers methods #### History methods [#history-methods] * **All request types**: 60 requests per minute. #### Settings methods [#settings-methods] * **GET requests**: 100 requests per minute. * **POST and DELETE requests**: 60 requests per minute. Rate limits are calculated independently for each method category. For example, you can make 100 GET requests to Settings methods and 60 requests to History methods within the same minute without hitting rate limits. ## WebSocket API: Real-time data streaming [#websocket-api-real-time-data-streaming] The WebSocket API delivers real-time updates with minimal latency, essential for modern trading applications. The implementation uses unidirectional communication from server to client, ensuring efficient data delivery. ### Key characteristics [#key-characteristics-1] * **Unidirectional communication** from server to client for optimal performance. * **Real-time market data** for live trading environments. * **Position and order updates** as they occur in real-time. * **Low-latency data delivery** for time-sensitive trading operations. * **Persistent connections** maintaining continuous data flow. ### SignalR implementation [#signalr-implementation] B2TRADER utilizes **AspNetCore SignalR** for WebSocket message organization and transmission, providing a robust and scalable real-time communication framework. **Resources:** * [Official GitHub Repository](https://github.com/dotnet/aspnetcore/tree/main/src/SignalR) * [Official Documentation](https://dotnet.microsoft.com/en-us/apps/aspnet/signalr) SignalR provides a structured approach to real-time communication through standardized message formatting and connection management. ### Connection lifecycle [#connection-lifecycle] The data transfer process consists of two essential phases: 1. **Connection establishment** — Initial handshake, authentication, and subscription setup. 2. **Data streaming** — Continuous real-time data flow with automatic reconnection handling. ### Message types [#message-types] SignalR utilizes numerical `type` indicators for different operations: ### Available stream types [#available-stream-types] * **[Trading streams](../ws-api/trading)**: Track active orders, open and closed positions. * **[Market data streams](../ws-api/market-data)**: Get real-time order book updates, market statistics and price changes. * **[Account information streams](../ws-api/account-info)**: Get live account balance and margin updates. ## FIX API: Standardized protocol connectivity [#fix-api-standardized-protocol-connectivity] The FIX API provides direct access to B2TRADER via the FIX 4.4 protocol, the industry standard for electronic trading communication. It is designed for institutional clients and algorithmic trading systems. ### Key characteristics [#key-characteristics-2] * **FIX 4.4 protocol** for standardized, vendor-neutral connectivity. * **Dedicated sessions** for Market Data and Trading with separate endpoints. * **In-band authentication** via Logon message (Username, Password, Account). * **Real-time market data** with order book snapshots and incremental updates. * **Session management** with Heartbeat, Test Request, and Sequence Reset support. ### Authentication [#authentication-1] Unlike REST and WebSocket APIs, the FIX API does not use access tokens. Authentication is performed in-band as part of the FIX Logon message using credentials provided by B2TRADER: * **Username** (`<553>`): The client username * **Password** (`<554>`): The client password * **Account** (`<1>`): The account identifier ### Available session types [#available-session-types] * **[Market Data](../fix-api/market-data)**: Subscribe to real-time order book updates, snapshots, and incremental refreshes. * **[Trading](../fix-api/trading)**: Place orders and receive execution reports in real time. ## Integration best practices [#integration-best-practices] ### API selection strategy [#api-selection-strategy] * Use **REST API** for operational tasks requiring confirmation (order placement, account management). * Use **WebSocket API** for real-time monitoring and market data visualization. * Use **FIX API** for institutional connectivity, algorithmic trading, and integration with existing FIX-based infrastructure. * Implement multiple APIs in comprehensive trading applications for optimal functionality. ### Performance optimization [#performance-optimization] * Implement proper connection pooling for REST API requests. * Use WebSocket subscriptions efficiently by subscribing only to required data streams. * Handle reconnection logic for WebSocket connections to ensure data continuity. * Implement appropriate error handling and retry mechanisms. ### Security considerations [#security-considerations] * Store authentication tokens securely and implement token refresh mechanisms. * Use secure connections (HTTPS/WSS) for all API communications. * Implement proper input validation and sanitization. * Monitor API usage and implement rate limiting on the client side. This comprehensive API architecture enables developers to build sophisticated trading applications that can handle both real-time market dynamics and operational trading requirements efficiently. When trading on CFD or Perpetual markets, the following triggers can be enabled to manage investments and mitigate risks: * **Take profit**: A take-profit order is used to sell or buy an asset automatically once it hits a predefined price, ensuring the trader locks in profits. For example, if a trader buys ETH at $2,000 and sets the Take profit at $2,100, the platform will sell the ETH automatically when the market price reaches $2100, securing the trader's profit. * **Stop loss**: A stop-loss order is a tool to limit potential losses. It automatically sells an asset when its price falls to a predetermined level. For example, if a trader buys ETH at $2,000 and sets the Stop loss at $1,900, the asset will be sold if the price drops to $1,900, capping the loss to $100 per ETH. * **Trailing stop**: A trailing-stop order allows a trader to set a Stop price that dynamically adjusts as the market price moves. It's different from a regular stop-loss order because the Stop price isn't stationary but follows the market price by a specified percentage. When the asset price moves favorably, the Stop price updates, securing potential gains. However, if the price falls, the Stop price stays fixed to protect profits or limit losses. For example, a trader buys ETH at $2,000 and sets the Trailing stop at $1900 with a 10% adjustment. If ETH rises to $2,200, the Trailing stop increases to $2,090. A drop to $2,090 triggers the sale, locking in gains. The triggers are applicable to all order types: Market, Limit, Stop Market, and Stop Limit. Multiple triggers can be applied simultaneously. The triggers can be adjusted anytime until a position is fully closed. The Take profit, Stop loss, and Trailing stop always operate with the current position volume. For **buy** orders, the triggers are activated by the top-of-the-book **bid** price. For **sell** orders, the triggers are activated by the top-of-the-book **ask** price. Triggers do not activate if a position is in the *Stop out* state. However, if the position persists after the *Stop out*, triggers can then be activated. The following time-in-force settings can be specified for orders: * **FOK** (fill-or-kill): Such orders are either filled instantly or killed (cancelled). In other words, a fill-or-kill order must be fulfilled instantly or not executed at all. FOK orders are used when partial delivery of assets isn't acceptable for any reason. * **IOC** (immediate-or-cancel): This setting implies that any part of an order that can't be filled instantly must be cancelled. Upon placing an IOC order, an attempt will be made to instantly execute it (in full or in part) at the best possible price, after which any remaining, unfilled part will be cancelled. If no amount is available at a specified price upon placing such order, it's cancelled instantly. * **GTC** (good-‘til-cancelled): The default setting applied to all Limit orders. Open GTC orders are awaiting execution until they are cancelled explicitly by a trader or filled. * **GTD** (good-‘til-date): Can be applied to Limit and Stop Limit orders. Such orders remain listed in the order book until a specified date or until they are cancelled by a trader. By that time the order can be partially executed. * **DAY**: Can be applied to Limit and Stop Limit orders. Such orders remain listed in the order book until 23:59 of the current day or until they are cancelled by a trader. By that time the order can be partially executed. * **Retry**: Can be applied to Market orders only. A Retry order aims to fill your full volume by repeatedly filling the unfilled remainder at current market prices. The average price may be worse than shown, and in thin markets a remainder may stay unfilled. The order expiration time is defined by the time settings specified for the platform, without taking into account the time settings of the devices from which the platform is accessed. Guest endpoints serve public market data to callers with no access token. Each one is the anonymous counterpart of an authenticated endpoint: same request shape, same response schema, no authorization. They exist so an unauthenticated Trading terminal session can render markets, charts, and order books, and you can use them the same way for read-only integrations. Every guest endpoint sits under a `/guest` path segment inserted after the API version, and shares these rules: * **No authentication.** Do not send an `Authorization` header. There are no required operations. * **No `accountId`.** The `accountId` header used by the authenticated endpoints does not apply and is not read. * **Public data only.** Balances, positions, orders, trade history, margin, and user profile are not reachable through any guest endpoint. * **Guest-visible markets only.** A market that is not active and well-configured is rejected with `400`, even if it exists. * **No account context.** A guest has no trading account, so nothing account-specific enters the calculation. Commissions come from the tenant's **default** commission profile rule, with volume-based tiers evaluated at a traded volume of `0`, so a guest always sees the entry tier. Prices and calculated figures can therefore differ from the same call made with an access token. * **Rate limited per caller.** Guest traffic is subject to its own request-rate limit, separate from the authenticated limits. * **Read-only.** There is no guest counterpart of order placement, position closing, trigger submission, or favorites. ## Assets [#assets] `GET` `/frontoffice/api/v3/guest/assets` Anonymous counterpart of [Get assets](settings#get-assets). Returns the same schema, restricted to CRM-source assets — assets that exist only on a liquidity provider stay hidden. ## Info [#info] `GET` `/frontoffice/api/v3/guest/info` Anonymous counterpart of [Get server info](settings#get-server-info). Same platform time, same schema. *** `GET` `/frontoffice/api/v3/guest/info/time-zones` Anonymous counterpart of [Get server time zones](settings#get-server-time-zones). Same schema. ## Markets [#markets] `GET` `/frontoffice/api/v5/guest/markets` Anonymous counterpart of [Get markets](settings#get-markets). Lists active, well-configured markets ordered by display name. Accepts the optional `categoryId` query parameter. Each item carries `marketId`, `displayName`, `fullName`, `type`, and `subtype` — the authenticated `isFavorite` field is absent, because guests have no per-account favorites. *** `GET` `/frontoffice/api/v5/guest/markets/{marketId}` Anonymous counterpart of [Get market](settings#get-market). Returns the instrument's trading parameters — price and amount scales, tick size, lot size and step, amount limits, trading calendar, slippage rate, price deviation, and the funding schedule for perpetual markets. The per-account, commission, and leverage fields of the authenticated response are absent. An unknown, disabled, or misconfigured `marketId` returns `400`. *** `GET` `/frontoffice/api/v4/guest/markets-categories` Returns the broker's market category tree, pruned to branches that contain at least one guest-visible market. Each category carries `id`, `name`, and a nested `categories` array. ## Order data [#order-data] These endpoints price a hypothetical order without placing it. They are the calculation behind the order form's preview figures. `POST` `/frontoffice/api/v3/guest/order-data` Anonymous counterpart of [Get SPOT order data](trading#get-spot-order-data). Same request body. The response carries the same `order` object with `baseAmount`, `quoteAmount`, `commissionAmount`, and `total`, calculated without any account-specific settings and with the tenant-default commission rule. *** `POST` `/frontoffice/api/cfd/v4/guest/order-data` Anonymous counterpart of [Get CFD order data](trading#get-cfd-order-data). Same request body. The response carries the same `order` object — `lotAmount`, `requiredMarginInRAT`, `quoteAmount`, `commissionAmountInRAT`, `takeProfit`, and `stopLoss` — calculated without any account-specific settings, and with `marginLevel` always `null`, since it needs a balance and open positions. *** `POST` `/frontoffice/api/perpetual/v4/guest/order-data` Anonymous counterpart of [Get PF order data](trading#get-pf-order-data). Behaves exactly as the CFD guest variant above, including `marginLevel` always being `null`. ## Charting [#charting] `GET` `/marketdata/api/v4/guest/instruments/{marketSymbol}/history` Returns historical candles for a market. Candle prices are not account-specific and can differ from the authenticated endpoint's response for the same market and window. Response schema matches the authenticated charting history endpoint at `/marketdata/api/v4/instruments/{marketSymbol}/history`. `type`, `startDate`, and `endDate` are **required** here, and the requested window is capped per timeframe: | Timeframe | Maximum window | | ---------------------- | -------------- | | 1, 5, 15, 30 minutes | 30 days | | 1, 4, 12 hours | 365 days | | 1 day, 1 week, 1 month | 5 years | A missing, malformed, or oversized window returns `400`. `endDate` may not be in the future beyond a one-minute allowance for client clock drift. A market that is hidden from traders returns an empty candle set rather than an error. *** `GET` `/marketdata/api/v4/guest/instruments/{marketSymbol}/funding` Returns the funding event history of a perpetual market. Funding events do not depend on an account, so the response matches the authenticated endpoint at `/marketdata/api/v4/instruments/{marketSymbol}/funding` exactly. Accepts the same `limit`, `offset`, `appliedAtFrom`, and `appliedAtTo` query parameters. An unknown market symbol, or a market that is not a perpetual, returns `400`. ## AI recommendation [#ai-recommendation] `GET` `/marketdata/api/v1/guest/ai-recommendation/{marketId}` Returns the AI-generated recommendation for a market — price forecast, sentiment ratios, suggested actions, market metrics, and triggers. Response schema matches the authenticated endpoint at `/marketdata/api/v1/ai-recommendation/{marketId}`. Accepts the same optional `language` query parameter, defaulting to `en`. An unknown `marketId` returns `400`. ## Streaming market data as a guest [#streaming-market-data-as-a-guest] The endpoints above cover snapshots and history. For live prices, order books, and candles without a token, use the guest market data stream — see [Guest market data](../ws-api/market-data#guest-market-data). ## Open positions [#open-positions] ### Get executions for an open position [#get-executions-for-an-open-position] `POST` `/frontoffice/api/v4/positions/``{positionId}``/executions/list` #### Summary [#summary] Use this method to retrieve execution details for a specific open position using its position identifier. #### Request [#request] ##### Header parameters [#header-parameters] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters] **`positionId`** `required` The position identifier. ##### Body [#body] **`limit`** `integer · int32 | nullable` The maximum number of items to return. **`offset`** `integer · int32 | nullable` The number of items to skip before starting to collect the result set. ```http title="Request example" POST /frontoffice/api/v4/positions/01K2PMT0VMJG5B8XBDNZ7FNM1F/executions/list HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "limit": 2, "offset": 0 } ``` #### Response [#response] In case of success, an object containing an array of executions will be returned. Each execution object contains the following information: **`positionId`** `string` The position identifier. **`orderId`** `string` The order identifier. **`side`** `string` The execution side. Possible values: * `Buy` * `Sell` **`reason`** `string` The reason for the execution. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`createdAt`** `string` The date and time when the execution occurred, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`executionId`** `string` The execution identifier. **`baseAmount`** `decimal string` The executed base asset amount. **`executionPrice`** `decimal string` The price at which the execution was settled. **`commissionAmountInRAT`** `decimal string` The total commissions charged for the execution, in conversion to RAT. **`commissions`** `array` The breakdown of commissions charged per asset. **`comment`** `string | nullable` The text note attached to the order, up to 100 characters. ```json title="Response example — 200: OK" { "executions": [ { "positionId": "01K2PMT0VMJG5B8XBDNZ7FNM1F", "orderId": "01K2PMT0KRRMTTXGPDJCXZ99NZ", "side": "Buy", "reason": "Trader", "createdAt": "2025-08-15T10:36:02.293Z", "executionId": "01K2PMT0VNWB23GSRN2XQAJD6Q", "baseAmount": "0.314", "executionPrice": "4603.5", "commissionAmountInRAT": "0", "commissions": [], "comment": null }, { "positionId": "01K2PMT0VMJG5B8XBDNZ7FNM1F", "orderId": "01K2PMT0KRRMTTXGPDJCXZ99NZ", "side": "Buy", "reason": "Trader", "createdAt": "2025-08-15T10:36:02.293Z", "executionId": "01K2PMT0VN1F2JPM14AEV6V8YJ", "baseAmount": "0.045", "executionPrice": "4603.49", "commissionAmountInRAT": "0", "commissions": [], "comment": null } ] } ``` ### Get executions for open positions [#get-executions-for-open-positions] `POST` `/frontoffice/api/v4/positions/executions/list` #### Summary [#summary-1] Use this method to retrieve execution details for multiple open positions by providing an array of position identifiers. #### Request [#request-1] ##### Header parameters [#header-parameters-1] **`accountId`** `required` The trading account identifier. ##### Body [#body-1] **`positionIds`** `array · string[]` The array of position identifiers. **`limit`** `integer · int32 | nullable` The maximum number of items to return. ```http title="Request example" POST /frontoffice/api/v4/positions/executions/list HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "positionIds": [ "01K2PMT0VMJG5B8XBDNZ7FNM1F", "01K2PMXY63HESK110WT1CHMAFA" ], "limit": 5 } ``` #### Response [#response-1] In case of success, an object containing an array of executions will be returned. Each execution object contains the following information: **`positionId`** `string` The position identifier. **`orderId`** `string` The order identifier. **`side`** `string` The execution side. Possible values: * `Buy` * `Sell` **`reason`** `string` The reason for the execution. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`createdAt`** `string` The date and time when the execution occurred, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`executionId`** `string` The execution identifier. **`baseAmount`** `decimal string` The executed base asset amount. **`executionPrice`** `decimal string` The price at which the execution was settled. **`commissionAmountInRAT`** `decimal string` The total commissions charged for the execution, in conversion to RAT. **`commissions`** `array` The breakdown of commissions charged per asset. **`comment`** `string | nullable` The text note attached to the order, up to 100 characters. ```json title="Response example — 200: OK" { "executions": [ { "positionId": "01K2PMXY63HESK110WT1CHMAFA", "orderId": "01K2PMXY1894RC6E2BYFR00T87", "side": "Buy", "reason": "Trader", "createdAt": "2025-08-15T10:38:10.627Z", "executionId": "01K2PMXY63NXM30VNWPDECSFJR", "baseAmount": "15", "executionPrice": "4333.69288", "commissionAmountInRAT": "32.27", "commissions": [ { "assetId": "eur", "amount": "32.27" } ], "comment": null }, { "positionId": "01K2PMT0VMJG5B8XBDNZ7FNM1F", "orderId": "01K2PMT0KRRMTTXGPDJCXZ99NZ", "side": "Buy", "reason": "Trader", "createdAt": "2025-08-15T10:36:02.292Z", "executionId": "01K2PMT0VMPCZW0JB2C9J6B405", "baseAmount": "0.141", "executionPrice": "4602.3", "commissionAmountInRAT": "5", "commissions": [ { "assetId": "eur", "amount": "5" } ], "comment": null } ] } ``` ## Closed positions [#closed-positions] ### Get orders for closed positions [#get-orders-for-closed-positions] `POST` `/frontoffice/api/v4/orders/closed-positions` #### Summary [#summary-2] Use this method to retrieve orders associated with closed positions within specified date ranges and market filters. #### Request [#request-2] ##### Header parameters [#header-parameters-2] **`accountId`** `required` The trading account identifier. ##### Body [#body-2] **`createdAtFrom`** `string · date-time | nullable` The start date of the period when the positions were opened. **`createdAtTo`** `string · date-time | nullable` The end date of the period when the positions were opened. **`closedAtFrom`** `string · date-time | nullable` The start date of the period when the positions were closed. **`closedAtTo`** `string · date-time | nullable` The end date of the period when the positions were closed. **`marketId`** `string | nullable` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`marketType`** `string | nullable` The market type. Possible values: * `Cfd` * `Perp` **`limit`** `integer · int32 | nullable` The maximum number of items to return. **`lastOrderId`** `string | nullable` The identifier of the final order to be returned. ```http title="Request example" POST /frontoffice/api/v4/orders/closed-positions HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "limit": 2, "createdAtFrom": "2025-08-01T12:00:32.886Z", "createdAtTo": "2025-08-15T12:00:32.886Z" } ``` #### Response [#response-2] In case of success, an object will be returned. Each object contains the following information: **`marketId`** `string` The market identifier. **`marketFullName`** `string | nullable` The market full name or description (optional). **`marketDisplayName`** `string | nullable` The market ticker. **`marketType`** `string` The market type. Possible values: * `Cfd` * `Perp` **`orderId`** `string` The order identifier. **`orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`timeInForce`** `string` The [time-in-force setting](../get-started/time-in-force) of the order. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`side`** `string` The order side. Possible values: * `Buy` * `Sell` **`positionCloseLotAmount`** `decimal string` The position amount closed by the order, in lots. **`reason`** `string` The reason for placing the order. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`realizedPnlInRAT`** `decimal string` The realized PnL, in conversion to RAT. **`closedAt`** `string · date-time | nullable` The date and time when the position was closed. **`positionId`** `string` The position identifier. **`openPrice`** `decimal string` The volume-weighted average price (VWAP) at which the position was opened. **`closePrice`** `decimal string` The volume-weighted average price (VWAP) of trades related to a position-closing order. **`positionPriceInRAT`** `decimal string` The position price, in conversion to RAT. **`rateToRAT`** `decimal string` The conversion rate to RAT. **`openedAt`** `string · date-time` The date and time when the position was opened. **`comment`** `string | nullable` The text note attached to the order, up to 100 characters. **`isExceeded`** `boolean` Indicates whether the number of returned items reached the response `limit` and more data is available. ```json title="Response example — 200: OK" { "data": [ { "marketId": "cfd.eth_eur", "marketFullName": null, "marketDisplayName": "CFD ETH/EUR", "marketType": "Cfd", "orderId": "01K2PNGX50SR1FRE6P14PJC17E", "orderType": "Market", "timeInForce": "Ioc", "side": "Sell", "positionCloseLotAmount": "15", "reason": "Trader", "realizedPnlInRAT": "-144.64", "closedAt": "2025-08-15T10:48:32.393Z", "positionId": "01K2PMXY63HESK110WT1CHMAFA", "openPrice": "4333.69288", "closePrice": "3370.58389", "positionPriceInRAT": "50558.75", "rateToRAT": "1", "openedAt": "2025-08-15T10:38:10.628Z", "comment": null }, { "marketId": "perp.eth_usdt", "marketFullName": "ETH/USDT_4s8hKqiPXmXOEhsO1J6W", "marketDisplayName": "ETH/USDT_jC6Im5PxwgZLrwyccRcI", "marketType": "Perpetual", "orderId": "01K2PNG3N6NKAJVV4RV5E2V0HK", "orderType": "Market", "timeInForce": "Ioc", "side": "Sell", "positionCloseLotAmount": "0.5", "reason": "Trader", "realizedPnlInRAT": "13.42", "closedAt": "2025-08-15T10:48:06.234Z", "positionId": "01K2PMT0VMJG5B8XBDNZ7FNM1F", "openPrice": "4603.1607", "closePrice": "4634.3915", "positionPriceInRAT": "1992.78", "rateToRAT": "0.86", "openedAt": "2025-08-15T10:36:02.293Z", "comment": null } ], "isExceeded": true } ``` ### Get executions for a closing order [#get-executions-for-a-closing-order] `POST` `/frontoffice/api/v5/orders/``{orderId}``/executions/list` #### Summary [#summary-3] Use this method to retrieve execution details for a specific position-closing order using its identifier. #### Request [#request-3] ##### Header parameters [#header-parameters-3] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-1] **`orderId`** `required` The order identifier. ##### Body [#body-3] **`positionId`** `string | nullable` The position identifier. **`limit`** `integer · int32 | nullable` The maximum number of items to return. **`lastExecutionId`** `string | nullable` The identifier of the final execution to be returned. ```http title="Request example" POST /frontoffice/api/v4/orders/01K2PNG3N6NKAJVV4RV5E2V0HK/executions/list HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "limit": 5 } ``` #### Response [#response-3] In case of success, an object containing an array of executions will be returned. Each execution object contains the following information: **`positionId`** `string` The position identifier. **`orderId`** `string` The order identifier. **`side`** `string` The execution side. Possible values: * `Buy` * `Sell` **`reason`** `string` The reason for the execution. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`createdAt`** `string` The date and time when the execution occurred, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`executionId`** `string` The execution identifier. **`baseAmount`** `decimal string` The executed amount of the base asset. **`executionPrice`** `decimal string` The price at which the execution was settled. **`realizedPnlInRAT`** `decimal string` The realized PnL, in conversion to RAT. **`commissionAmountInRAT`** `decimal string` The total commissions charged for the execution, in conversion to RAT. **`commissions`** `array` The breakdown of commissions charged per asset. Structure: * **`assetId`** `string` * **`amount`** `decimal string` **`positionSizeIncreased`** `boolean` Indicates if a position size was increased (`true`) or decreased (`false`) as a result of the execution. **`isExceeded`** `boolean` Indicates whether the number of returned items reached the response `limit` and more data is available. ```json title="Response example — 200: OK" { "executions": [ { "positionId": "string", "orderId": "string", "side": "Buy", "reason": "Trader", "createdAt": "2025-12-18T19:02:22.196Z", "executionId": "string", "baseAmount": "string", "executionPrice": "string", "realizedPnlInRAT": "string", "commissionAmountInRAT": "string", "commissions": [ { "assetId": "string", "amount": "string" } ], "positionSizeIncreased": true } ], "isExceeded": true } ``` ### Get executions for closing orders [#get-executions-for-closing-orders] `POST` `/frontoffice/api/v5/orders/executions/list` #### Summary [#summary-4] Use this method to retrieve execution details for multiple position-closing orders by providing an array of order identifiers. #### Request [#request-4] ##### Header parameters [#header-parameters-4] **`accountId`** `required` The trading account identifier. ##### Body [#body-4] **`orderId`** `string` The order identifier. **`positionId`** `string` The order identifier. ```http title="Request example" POST /frontoffice/api/v4/orders/executions/list HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "orderPositionPairs": [ { "orderId": "01K31APDKZCVGWZA3XTF5JPAMD", "positionId": "01K31APDWF2EBHRKHH15VGB1ST" } ], "limit": 0 } ``` #### Response [#response-4] In case of success, an object containing an array of executions will be returned. Each execution object contains the following information: **`positionId`** `string` The position identifier. **`orderId`** `string` The order identifier. **`side`** `string` The execution side. Possible values: * `Buy` * `Sell` **`reason`** `string` The reason for the execution. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`createdAt`** `string` The date and time when the execution occurred, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`executionId`** `string` The execution identifier. **`baseAmount`** `decimal string` The executed base asset amount. **`executionPrice`** `decimal string` The price at which the execution was settled. **`realizedPnlInRAT`** `decimal string` The realized PnL, in conversion to RAT. **`commissionAmountInRAT`** `decimal string` The total commissions charged for the execution, in conversion to RAT. **`commissions`** `array` The breakdown of commissions charged per asset. Structure: * **`assetId`** `string` * **`amount`** `decimal string` **`positionSizeIncreased`** `boolean` Indicates if a position size was increased (`true`) or decreased (`false`) as a result of the execution. **`comment`** `string | nullable` The text note attached to the order, up to 100 characters. **`isExceeded`** `boolean` Indicates whether the number of returned items reached the response `limit` and more data is available. ```json title="Response example — 200: OK" { "executions": [ { "positionId": "string", "orderId": "string", "side": "Buy", "reason": "Trader", "createdAt": "2025-12-18T18:53:15.657Z", "executionId": "string", "baseAmount": "string", "executionPrice": "string", "realizedPnlInRAT": "string", "commissionAmountInRAT": "string", "commissions": [ { "assetId": "string", "amount": "string" } ], "positionSizeIncreased": true, "comment": null } ], "isExceeded": true } ``` ## Accounts [#accounts] ### Get accounts [#get-accounts] `GET` `/frontoffice/api/v3/accounts` #### Summary [#summary] Use this method to retrieve a list of all trading accounts with their basic information including account type and total balance. #### Request [#request] *No request parameters.* ```http title="Request example" GET /frontoffice/api/v3/accounts HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response] In case of success, an array of objects will be returned. Each object contains the following information: **`accountId`** `string` The trading account identifier. **`publicAccountId`** `integer` The public account identifier for display purposes. **`accountName`** `string` The account name. **`accountType`** `string` The account type. Possible values: * `Hedging` * `Netting` **`accountStatus`** `string` The account status, which determines the permitted operations. For a description of each value, see [Account statuses](../get-started/account-statuses). Possible values: * `Active` * `Halted` * `Frozen` **`totalBalanceInRAT`** `decimal string` The total balance, in RAT. **`isCopyTradingAccount`** `boolean` Indicates if the account is `Copy`. ```json title="Response example — 200: OK" [ { "accountId": "685a7eaa360f9e7416221a61", "publicAccountId": 1234567, "accountName": "B2TRADER Hedging account", "accountType": "Hedging", "accountStatus": "Active", "totalBalanceInRAT": "6020.12", "isCopyTradingAccount": false }, { "accountId": "6891e70db552ff9c6fbbccf5", "publicAccountId": 1234568, "accountName": "B2TRADER Netting account", "accountType": "Netting", "accountStatus": "Halted", "totalBalanceInRAT": "10987.39", "isCopyTradingAccount": false } ] ``` ## Assets [#assets] ### Get assets [#get-assets] `GET` `/frontoffice/api/v3/assets` #### Summary [#summary-1] Use this method to retrieve a list of available assets on the platform. #### Request [#request-1] *No request parameters.* ```http title="Request example" GET /frontoffice/api/v3/assets HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-1] In case of success, an array of objects will be returned. Each object contains the following information: **`assetId`** `string` The asset identifier. **`assetName`** `string` The asset display name. **`isRootAsset`** `boolean` Indicates whether this is a root asset. ```json title="Response example — 200: OK" [ { "assetId": "usdt", "assetName": "Tether", "isRootAsset": true }, { "assetId": "xrp", "assetName": "Ripple", "isRootAsset": false } ] ``` ## Markets [#markets] ### Get markets [#get-markets] `GET` `/frontoffice/api/v6/markets` #### Summary [#summary-2] Use this method to retrieve a list of available markets with their type, subtype, and favorite status. #### Request [#request-2] ##### Query parameters [#query-parameters] **`categoryId`** The market category identifier. **`dynamicCommissionGroupId`** The dynamic commission group identifier. **`isFavorite`** `boolean` Filter by favorite status. If set to `true`, only markets marked as favorites are returned. ```http title="Request example" GET /frontoffice/api/v6/markets?isFavorite=true HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} ``` #### Response [#response-2] In case of success, an array of market objects is returned. Each market object contains the following information: **`marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`displayName`** `string` The market ticker. **`fullName`** `string | nullable` The market full name or description. **`type`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`subtype`** `string | nullable` *Applicable to CFD markets only.* The market subtype. Possible values: * `Crypto` * `Fx` * `Metals` * `Indices` * `Energies` * `Ndf` * `Shares` * `Etf` **`isFavorite`** `boolean` Indicates whether the market is marked as a favorite by the current user. ```json title="Response example — 200: OK" [ { "marketId": "spot.btc_usdt", "displayName": "BTC/USDT", "fullName": null, "type": "Spot", "subtype": null, "isFavorite": true }, { "marketId": "cfd.eth_btc", "displayName": "ETH/BTC", "fullName": "Ethereum to Bitcoin", "type": "Cfd", "subtype": "Crypto", "isFavorite": false }, { "marketId": "perp.trx_usdt", "displayName": "TRX/USDT", "fullName": "TRX to Tether Perpetual", "type": "Perpetual", "subtype": null, "isFavorite": false } ] ``` ### Get market [#get-market] `GET` `/frontoffice/api/v6/markets/``{marketId}` #### Summary [#summary-3] Use this method to retrieve detailed information about a specific market using its market identifier. #### Request [#request-3] ##### Path parameters [#path-parameters] **`marketId`** `required` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. ```http title="Request example" GET /frontoffice/api/v6/markets/{marketId} HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-3] In case of success, an object will be returned. Each object contains the following information: **`marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`displayName`** `string` The market ticker. **`fullName`** `string | nullable` The market full name or description (optional). **`baseAssetId`** `string` The base asset identifier. **`quoteAssetId`** `string` The quote asset identifier. **`minAmount`** `decimal string | nullable` *Applicable to Spot markets only.* The minimum tradable amount of the base asset. **`maxBaseAmount`** `decimal string | nullable` The maximum tradable amount of the base asset. **`priceDeviation`** `decimal string` The allowed price deviation for Limit orders placed on the market. Supports decimal values in the range `[0, 1]`, with up to 4 decimal places, for example: * `0.1` = 10% * `0.01` = 1% * `0.001` = 0.1% * `0.0001` = 0.01% If set to `0`, no restriction is applied, the price deviation is ignored. **`priceScale`** `integer` The price precision, which is the number of digits after a decimal separator. Also determines the minimum allowed trade price. Supports only integer values in the range `[2, 8]`. For example, `2` means the following price format: `0.01`, and `8`: `0.00000001`. **`amountScale`** `integer | nullable` *Applicable to Spot markets only.* The amount precision, which is the number of digits after a decimal separator. Also determines the minimum trade amount. Supports only integer values in the range `[0, 8]`. For example: * `0` means `1` (no digits after the decimal separator) * `5` means `0.00001` (five digits after the decimal separator) * `8` means `0.00000001` (eight digits after the decimal separator) **`type`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`subtype`** `string | nullable` *Applicable to CFD markets only.* The market subtype. Possible values: * `Crypto` * `Fx` * `Metals` * `Indices` * `Energies` * `Ndf` * `Shares` * `Etf` **`swapSettings`** `object | nullable` *Applicable to CFD markets only.* The fee type charged for holding open positions overnight. The amount can be negative for rebates. Possible values: * `FixPerLot`: The fixed amount per lot. * `Percent`: The fixed amount in points which is applied to the position size, in the range `[-1, 1]`, with up to 5 decimal places. * `Points`: The fixed amount of percents which is applied to the position size, with up to 3 decimal places. Structure: * **`type`** `string` — Swap calculation type. Possible values: `FixPerLot`, `Percent`, `Points`. * **`shortPositionSettings`** `object` — Settings for Short positions: * **`size`** `decimal string` * **`assetId`** `string | nullable` * **`longPositionSettings`** `object` — Settings for Long positions: * **`size`** `decimal string` * **`assetId`** `string | nullable` **`lotSize`** `integer | nullable` *Not applicable to Spot markets.* The standardized quantity of the base asset per lot. Supports only integer values in the range `[1, 1000000]`. **`minLotAmount`** `decimal string | nullable` *Not applicable to Spot markets.* The minimum order amount, in lots, that can be placed and executed. Supports values in the range `[0.00000001, 1]`. **`maxLotAmount`** `integer | nullable` *Not applicable to Spot markets.* The maximum order amount, in lots, that can be placed and executed. Supports only integer values in the range `[1, 10000]`. **`tickSize`** `decimal string | nullable` *Not applicable to Spot markets.* The minimum price increment. **`lotStep`** `decimal string | nullable` *Not applicable to Spot markets.* The minimum lot amount increment. Supports values in the range `[0.00000001, 1]`. By default, equals to the `minLotAmount`. **`slippageRate`** `decimal string` The expected slippage, that is, the difference between the expected execution price and the actual one. This value is used as a multiplier to calculate the funds to be put on hold for a market order execution. Supports values in the range `[1, 10]`, including decimal values with up to 4 decimal places. The default value is `1` which means that only the current bid/ask price is put on hold. For example, `1.1` means that the current bid or ask price + 10% is put on hold for each order, to cover the 10% slippage. **Mind that** the total amount funds to be held depends on the order parameters and takes into account many conditions, the slippage rate is only one of them. **`calendar`** `object` The trading calendar defining market trading hours. Structure: * **`timeZoneId`** `string` — IANA time zone identifier. * **`tradingSessions`** `array` — Weekly trading sessions: * **`dayOfWeek`** `string` — One of: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday. * **`timeIntervals`** `array` — List of intervals with: * **`start`** `string` (time) — Start time in `calendar.timeZoneId`. * **`end`** `string` (time) — End time in `calendar.timeZoneId`. * **`sessionOverrides`** `array` — Optional specific-date overrides: * **`date`** `string` (date) — In `YYYY-MM-DD` format. * **`timeIntervals`** `array | nullable` — Intervals for that date. **`fundingStartTime`** `string | nullable` *Applicable to Perpetual markets only.* The time of the first funding settlement, in the following format: `HH:MM:SS`. **`fundingIntervalInHours`** `integer | nullable` *Applicable to Perpetual markets only.* The funding settlement interval, in hours. Possible values: 1, 2, 3, 4, 6, 8, 12, 24. **`leverageProfile`** `object` *Not applicable to Spot markets.* The leverage profile. Structure: * **`leverageType`** `string` — Leverage type. Possible values: `Fixed`, `Dynamic`. * **`leverage`** `object` * **`useOnlyMaxLeverage`** `boolean` * **`maxLeverage`** `integer` — For `Fixed` leverage type only. * **`tiers`** `array` — For `Dynamic` leverage type only. * **`maxLeverage`** `integer` — The maximum allowed leverage for this tier. * **`maxNotionalValueInRAT`** `string | nullable` — The maximum position notional for this tier. **`commissionSettings`** `object` The commission settings. Structure: * **`type`** `string` — Leverage type. Possible values: `Fixed`, `Dynamic`. * **`charge`** `object` * **`type`** `string` — Possible values: `Percent`, `FixPerLot`. * **`assetId`** `string | nullable` — For `Fixed` commission type only. * **`size`** `decimal string` — For `Fixed` commission type only. * **`tiers`** `array` — For `Dynamic` commission type only. * **`size`** `string` — The commission amount for this tier. * **`minTradingVolumeInRAT`** `string` — The minimum required trading volume for this tier. * **`minCommissionInRAT`** `decimal string | nullable` * **`dynamicCommissionGroupId`** **`isFavorite`** `boolean` Indicates whether the market is marked as a favorite by the current user. ```json title="Response example — 200: OK" { "marketId": "string", "displayName": "string", "fullName": "string", "baseAssetId": "string", "quoteAssetId": "string", "minAmount": "string", "maxBaseAmount": "string", "minQuoteAmount": "string", "priceDeviation": "string", "priceScale": 0, "amountScale": 0, "type": "Spot", "subtype": "Cash", "swapSettings": { "type": "FixPerLot", "shortPositionSettings": { "size": "string", "assetId": "string" }, "longPositionSettings": { "size": "string", "assetId": "string" } }, "lotSize": 0, "minLotAmount": "string", "maxLotAmount": 0, "tickSize": "string", "lotStep": "string", "slippageRate": "string", "calendar": { "timeZoneId": "string", "tradingSessions": [ { "dayOfWeek": "Monday", "timeIntervals": [ { "start": "string", "end": "string" } ] } ], "sessionOverrides": [ { "date": "2025-12-18", "timeIntervals": [ { "start": "string", "end": "string" } ] } ] }, "fundingStartTime": "string", "fundingIntervalInHours": 0, "leverageProfile": { "leverageType": "Fixed", "leverage": { "useOnlyMaxLeverage": true, "maxLeverage": 0 } }, "commissionSettings": { "type": "Dynamic", "сharge": { "type": "Percent", "tiers": [ { "size": "string", "minTradingVolumeInRAT": "string" }, { "size": "string", "minTradingVolumeInRAT": "string" } ], "minCommissionInRAT": "string" }, "dynamicCommissionGroupId": "string" }, "isFavorite": true } ``` *** ### Add favorite market [#add-favorite-market] `POST` `/frontoffice/api/v6/markets/favorites/add` #### Summary [#summary-4] Add a market to the current user's favorites list. #### Request [#request-4] ##### Body [#body] **`marketId`** `string` `required` The market identifier to add to favorites. ```http title="Request example" POST /frontoffice/api/v6/markets/favorites/add HTTP/1.1 Host: {host} Authorization: Bearer JWT Content-Type: application/json { "marketId": "spot.btc_usdt" } ``` #### Response [#response-4] In case of success (`200`), an empty object is returned. *** ### Remove favorite market [#remove-favorite-market] `POST` `/frontoffice/api/v6/markets/favorites/delete` #### Summary [#summary-5] Remove a market from the current user's favorites list. #### Request [#request-5] ##### Body [#body-1] **`marketId`** `string` `required` The market identifier to remove from favorites. ```http title="Request example" POST /frontoffice/api/v6/markets/favorites/delete HTTP/1.1 Host: {host} Authorization: Bearer JWT Content-Type: application/json { "marketId": "spot.btc_usdt" } ``` #### Response [#response-5] In case of success (`200`), an empty object is returned. ## Account margin settings [#account-margin-settings] ### Get margin assets [#get-margin-assets] `GET` `/frontoffice/api/v4/account-margin-settings/assets` #### Summary [#summary-6] Use this method to retrieve a list of assets that can be used as collateral for margin trading. #### Request [#request-6] *No request parameters.* ```http title="Request example" GET /frontoffice/api/v4/account-margin-settings/assets HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-6] In case of success, an object will be returned. Each object contains the following information: **`assets`** `array` A list of assets that can be used as a collateral for margin trading. Each array item contains: **`assetId`** `string` The asset identifier. **`assetName`** `string` The asset display name. **`available`** `decimal string` The available asset balance. This value is calculated as *Total balance* – *Locked balance*. **`total`** `decimal string` The overall amount of the asset, including locked funds. **`marginRatio`** `decimal string` The percentage of the asset value used as a collateral. Supports values in the range `[0, 1]`, where `1` represents 100.00%. **`isSelected`** `boolean` Indicates whether the asset is selected to be used as collateral. Can be `true` only for assets with the `marginRatio` more than `0`. ```json title="Response example — 200: OK" { "assets": [ { "assetId": "btc", "assetName": "btc", "available": "0.031", "total": "0.031", "marginRatio": "1", "isSelected": true }, { "assetId": "eth", "assetName": "eth", "available": "0", "total": "0", "marginRatio": "1", "isSelected": false } ] } ``` ### Select margin asset [#select-margin-asset] `POST` `/frontoffice/api/v4/account-margin-settings/assets/``{assetId}` #### Summary [#summary-7] Use this method to enable a particular asset to be used as collateral for margin trading. Only assets with the `marginRatio` more than `0` can be selected. #### Request [#request-7] ##### Path parameters [#path-parameters-1] **`assetId`** `required` The asset identifier. ```http title="Request example" POST /frontoffice/api/v4/account-margin-settings/assets/usdt HTTP/1.1 Host: {host} Authorization: Bearer JWT Content-Type: application/json Accept: */* {} ``` #### Response [#response-7] In case of success, an empty object will be returned. ```json title="Response example — 200: OK" {} ``` ### Disable margin asset [#disable-margin-asset] `DELETE` `/frontoffice/api/v4/account-margin-settings/assets/``{assetId}` #### Summary [#summary-8] Use this method to prohibit a specific asset from being used as collateral for margin trading. #### Request [#request-8] ##### Path parameters [#path-parameters-2] **`assetId`** `required` The asset identifier. ```http title="Request example" DELETE /frontoffice/api/v4/account-margin-settings/assets/usdt HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-8] In case of success, an empty object will be returned. ```json title="Response example — 200: OK" {} ``` ## Info [#info] ### Get server info [#get-server-info] `GET` `/frontoffice/api/v3/info` #### Summary [#summary-9] Use this method to retrieve current server time and timezone information. #### Request [#request-9] *No request parameters.* ```http title="Request example" GET /frontoffice/api/v3/info HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-9] In case of success, an object will be returned. Each object contains the following information: **`serverTime`** `string` The server time, in the Unix timestamp format. **`serverTimeZone`** `string` The server time zone. ```json title="Response example — 200: OK" { "serverTime": "1755190380", "serverTimeZone": "+00:00" } ``` ### Get server time zones [#get-server-time-zones] `GET` `/frontoffice/api/v3/info/time-zones` #### Summary [#summary-10] Use this method to retrieve available server time zones. #### Request [#request-10] *No request parameters.* ```http title="Request example" GET /frontoffice/api/v3/info/time-zones HTTP/1.1 Host: {host} Authorization: Bearer JWT Accept: */* ``` #### Response [#response-10] In case of success, an array of objects will be returned. Each object contains the following information: **`id`** `string` The time zone identifier. **`offset`** `string` The UTC offset, in the following format: `HH:MM:SS`. **`offsetInMinutes`** `integer · int32` The UTC offset in minutes. **`shortLabel`** `string` The short label for the time zone. **`label`** `string` The display label for the time zone. ```json title="Response example — 200: OK" [ { "id": "Africa/Abidjan", "offset": "00:00:00", "offsetInMinutes": 0, "shortLabel": "Africa/Abidjan", "label": "(UTC+00:00) Côte d’Ivoire Time" }, { "id": "Africa/Algiers", "offset": "01:00:00", "offsetInMinutes": 60, "shortLabel": "Africa/Algiers", "label": "(UTC+01:00) Central European Time (Algiers)" }, { "id": "Africa/Bissau", "offset": "00:00:00", "offsetInMinutes": 0, "shortLabel": "Africa/Bissau", "label": "(UTC+00:00) Guinea-Bissau Time" }, ... ] ``` ## Webhooks [#webhooks] ### Create webhook API key [#create-webhook-api-key] `POST` `/frontoffice/api/v3/webhook/api-keys` #### Summary [#summary-11] Create a new webhook API key for receiving TradingView alerts. #### Request [#request-11] ##### Header parameters [#header-parameters] **`Authorization`** `required` Bearer JWT token with `trading-ui` permission. ##### Body [#body-2] **`name`** `string` `required` A descriptive name for the API key, up to 100 characters. ```http title="Request example" POST /frontoffice/api/v3/webhook/api-keys HTTP/1.1 Host: {host} Authorization: Bearer JWT Content-Type: application/json { "name": "My TradingView Key" } ``` #### Response [#response-11] In case of success (`201`), the created API key object is returned. **`id`** `string` The unique identifier of the API key. **`apiKey`** `string` The full API key value. The key is shown only once at creation. **`name`** `string` The name assigned to the key. **`userId`** `string` The user identifier the key is bound to. **`status`** `string` The key status: `Active`. **`createdAt`** `string` The timestamp when the key was created. **`expiresAt`** `string` The timestamp when the key expires (one year from creation). ```json title="Response example" { "id": "01JZ3CVZKN20410JPYYH1YZJSK", "apiKey": "wh_key_abc123def456...", "name": "My TradingView Key", "userId": "01JZ3CVZKN20410JPYYH1YZJSK", "status": "Active", "createdAt": "2026-02-02T12:00:00Z", "expiresAt": "2027-02-02T00:00:00Z" } ``` The API key is shown only once in the creation response. It can't be retrieved again after this call. *** ### List webhook API keys [#list-webhook-api-keys] `GET` `/frontoffice/api/v3/webhook/api-keys` #### Summary [#summary-12] Retrieve all webhook API keys for the authenticated user along with the webhook URL. #### Request [#request-12] ##### Header parameters [#header-parameters-1] **`Authorization`** `required` Bearer JWT token with `trading-ui` permission. ```http title="Request example" GET /frontoffice/api/v3/webhook/api-keys HTTP/1.1 Host: {host} Authorization: Bearer JWT ``` #### Response [#response-12] In case of success (`200`), the webhook URL and a list of API keys are returned. **`webhookUrl`** `string` The webhook URL to configure in TradingView alerts. **`apiKeys`** `array of objects` The list of API keys. **`apiKeys[].id`** `string` The unique identifier of the API key. **`apiKeys[].name`** `string` The name assigned to the key. **`apiKeys[].status`** `string` The key status. Possible values: * `Active` * `Revoked` * `Expired` **`apiKeys[].createdAt`** `string` The timestamp when the key was created. **`apiKeys[].expiresAt`** `string` The timestamp when the key expires. ```json title="Response example" { "webhookUrl": "https://trading.example.com/frontoffice/api/v3/webhook/alerts/01JZ3...", "apiKeys": [ { "id": "01JZ3CVZKN20410JPYYH1YZJSK", "name": "My TradingView Key", "status": "Active", "createdAt": "2026-02-02T12:00:00Z", "expiresAt": "2027-02-02T00:00:00Z" } ] } ``` *** ### Revoke webhook API key [#revoke-webhook-api-key] `DELETE` `/frontoffice/api/v3/webhook/api-keys/{id}` #### Summary [#summary-13] Revoke an active webhook API key. After revocation, the key can no longer be used to authenticate webhook requests. #### Request [#request-13] ##### Header parameters [#header-parameters-2] **`Authorization`** `required` Bearer JWT token with `trading-ui` permission. ##### Path parameters [#path-parameters-3] **`id`** `string` `required` The unique identifier of the API key to revoke. ```http title="Request example" DELETE /frontoffice/api/v3/webhook/api-keys/01JZ3CVZKN20410JPYYH1YZJSK HTTP/1.1 Host: {host} Authorization: Bearer JWT ``` #### Response [#response-13] In case of success (`200`), a confirmation object is returned. **`success`** `boolean` Indicates whether the key was revoked successfully. **`message`** `string` A description of the result. ```json title="Response example" { "success": true, "message": "API key revoked successfully" } ``` *** ### Receive TradingView alert [#receive-tradingview-alert] `POST` `/frontoffice/api/v3/webhook/alerts/{userId}` #### Summary [#summary-14] Accept a webhook alert from TradingView and place an order on the specified trading account. TradingView calls this endpoint when an alert triggers. #### Request [#request-14] ##### Path parameters [#path-parameters-4] **`userId`** `string` `required` The B2TRADER user identifier (ULID format). ##### Body [#body-3] **`apiKey`** `string` `required` The webhook API key for authentication. **`accountId`** `string` `required` The trading account identifier. **`symbol`** `string` `required` The market symbol with a type prefix (`spot.`, `cfd.`, or `perp.`) followed by the pair name. For example: `spot.btc_usdt`, `cfd.eur_usd`, `perp.btc_usdt`. **`side`** `string` `required` The order side. Possible values: * `buy` * `sell` **`quantity`** `decimal string` `required` The order quantity in the base asset. **`orderType`** `string` The order type. Default: `market`. Possible values: * `market` * `limit` * `stop` * `stop_limit` **`price`** `decimal string` The limit price. Required for `limit` and `stop_limit` orders. **`stopPrice`** `decimal string` The stop price. Required for `stop` and `stop_limit` orders. **`leverage`** `decimal string` The leverage ratio. Applicable to CFD and Perpetual Futures markets only. **`takeProfit`** `decimal string` The take profit trigger price. **`stopLoss`** `decimal string` The stop loss trigger price. **`timeInForce`** `string` The time-in-force policy. Default: `gtc`. Possible values: * `gtc` * `ioc` * `fok` * `day` **`comment`** `string` A custom comment, up to 256 characters. **`deduplicationId`** `string` A UUID for idempotency. Duplicate requests with the same ID within five minutes return a cached response. ```http title="Request example" POST /frontoffice/api/v3/webhook/alerts/01JZ3CVZKN... HTTP/1.1 Host: {host} Content-Type: application/json { "apiKey": "wh_key_abc123def456...", "accountId": "01JZ3CVZKN20410JPYYH1YZJSK", "symbol": "spot.btc_usdt", "side": "buy", "quantity": "0.01", "comment": "TV Strategy Signal" } ``` #### Response [#response-14] In case of success (`200`), an order confirmation is returned. **`success`** `boolean` Indicates whether the order was placed successfully. **`orderId`** `string` The unique identifier of the created order. **`orderStatus`** `string` The initial status of the order. **`message`** `string` A description of the result. **`timestamp`** `string` The timestamp of the response. ```json title="Response example" { "success": true, "orderId": "01JZ3CVZKN20410JPYYH1YZJSK", "orderStatus": "Working", "message": "Order placed successfully", "timestamp": "2026-02-02T12:34:56.789Z" } ``` #### Rate limits [#rate-limits] Webhook requests are limited to five requests per second per user. If the limit is exceeded, the response returns a `429` status code with the following headers: * `X-RateLimit-Limit`: Maximum requests per window * `X-RateLimit-Remaining`: Remaining requests in the current window * `X-RateLimit-Reset`: Unix timestamp when the window resets ## Orders [#orders] ### Place SPOT order [#place-spot-order] `POST` `/frontoffice/api/v3/orders` #### Summary [#summary] Use this method to create and submit a new order for SPOT markets. #### Request [#request] ##### Header parameters [#header-parameters] **`accountId`** `required` The trading account identifier. ##### Body [#body] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` * `Retry` — Market orders only **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell. For Market orders, this represents the total base amount to fill; the executed amount may be lower if liquidity is insufficient. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/v3/orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json { "order": { "marketId": "spot.btc_usdt", "side": "Buy", "orderType": "Limit", "timeInForce": "Gtc", "requestedAmount": 0.02, "requestedPrice": 115193.35, "comment": "Strategy A" } } ``` #### Response [#response] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.marketId`** `string` The market identifier, same as in the request. **`order.marketDisplayName`** `string` The market ticker. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.orderType`** `string` The order type, same as in the request. **`order.side`** `string` The order side, same as in the request. **`order.status`** `string` The current [order status](../get-started/order-statuses#market-and-limit-orders). Possible values: * `Started` * `Pending` * `Working` * `Completed` * `Cancelled` * `Expired` * `Rejected` **`order.source`** `string` The source of the order. Possible values: * `Manual` — the order was created manually via UI or API. **`order.timeInForce`** `string` The time-in-force policy, same as in the request. **`order.commission`** `decimal string` The fee charged for the execution of the order, expressed in the quote asset. Right after the order is created commission is `0`. **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell, same as in the request. **`order.remainingAmount`** `decimal string` The amount of the base asset that remains unfilled. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders, same as in the request; `null` for market orders. **`order.executionPrice`** `decimal string` The volume-weighted average price at which the order was executed. **`order.createdAt`** `string` The timestamp when the order was created, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.updatedAt`** `string` The timestamp of the most recent update to the order, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.rejectDetails`** `string` The reason and details for order rejection when `status` is `Rejected`. Currently unused and not populated. **`order.cancellationDate`** `string | nullable` The timestamp when the order was cancelled or expired, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`; `null` if not cancelled. **`order.fillFactor`** `decimal string` The ratio of the filled quantity to the originally requested quantity (`filledAmount / requestedAmount`). ```json title="Response example — 200: OK" { "order": { "marketId": "spot.btc_usdt", "marketDisplayName": "SPOT BTC/USDT", "orderId": "01K1ZTB4DB0S6Y2NH81S781BQX", "orderType": "Limit", "side": "Buy", "status": "Pending", "source": "Manual", "timeInForce": "Gtc", "commission": "0", "requestedAmount": "0.02", "remainingAmount": "0.02", "requestedPrice": "115193.35", "executionPrice": "0", "createdAt": "2025-08-06T13:50:13.931Z", "updatedAt": "2025-08-06T13:50:13.9325008Z", "rejectDetails": "", "cancellationDate": null, "fillFactor": "0" } } ``` ### Place CFD order [#place-cfd-order] `POST` `/frontoffice/api/cfd/v4/orders` #### Summary [#summary-1] Use this method to create and submit a new order for CFD markets. #### Request [#request-1] ##### Header parameters [#header-parameters-1] **`accountId`** `required` The trading account identifier. ##### Body [#body-1] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` * `Retry` — Market orders only **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.stopLoss`** `object` The Stop loss settings. **`order.stopLoss.price`** `decimal string` The Stop loss price. **`order.stopLoss.isTrailing`** `boolean` Indicates if the Stop loss is Trailing. **`order.takeProfit`** `object` The Take profit settings. **`order.takeProfit.price`** `decimal string` The take profit price. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/cfd/v4/orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json { "order": { "marketId": "cfd.eth_eur", "side": "Sell", "orderType": "Limit", "timeInForce": "Gtd", "requestedLotAmount": 1, "requestedPrice": 3280, "leverage": 75, "cancellationDate": "2025-08-10T00:00:00Z", "stopLoss": { "price": 3320, "isTrailing": false }, "takeProfit": { "price": 3200 }, "comment": "Strategy A" } } ``` #### Response [#response-1] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.status`** `string` The current [order status](../get-started/order-statuses#market-and-limit-orders). Possible values: * `Started` * `Pending` * `Working` * `Completed` * `Cancelled` * `Expired` * `Rejected` ```json title="Response example — 200: OK" { "order": { "orderId": "01K2253Q9X3VTJ68PNWY40JC6Q", "status": "Pending" } } ``` ### Place PF order [#place-pf-order] `POST` `/frontoffice/api/perpetual/v4/orders` #### Summary [#summary-2] Use this method to create and submit a new order for Perpetual markets. #### Request [#request-2] ##### Header parameters [#header-parameters-2] **`accountId`** `required` The trading account identifier. ##### Body [#body-2] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `perp.eth_eur`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` * `Retry` — Market orders only **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.stopLoss`** `object` The Stop loss settings. **`order.stopLoss.price`** `decimal string` The Stop loss price. **`order.stopLoss.isTrailing`** `boolean` Indicates if the Stop loss is Trailing. **`order.takeProfit`** `object` The Take profit settings. **`order.takeProfit.price`** `decimal string` The take profit price. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/perpetual/v4/orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json { "order": { "marketId": "perp.eth_usdt", "side": "Buy", "orderType": "Market", "timeInForce": "Ioc", "requestedLotAmount": 10, "leverage": 159, "comment": "Strategy A" } } ``` #### Response [#response-2] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.status`** `string` The current [order status](../get-started/order-statuses#market-and-limit-orders). Possible values: * `Started` * `Pending` * `Working` * `Completed` * `Cancelled` * `Expired` * `Rejected` ```json title="Response example — 200: OK" { "order": { "orderId": "01K228VN55N7WFZRG70M24T9J1", "status": "Working" } } ``` ### Cancel order [#cancel-order] `DELETE` `/frontoffice/api/v3/orders/``{orderId}` #### Summary [#summary-3] Use this method to cancel an active order placed on SPOT, CFD, or Perpetual markets. #### Request [#request-3] ##### Header parameters [#header-parameters-3] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters] **`orderId`** `required` The order identifier to cancel. ```http title="Request example" DELETE /frontoffice/api/v3/orders/01K2PF9XS29WN4JZRHMCTTQYJB HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Accept: */* ``` #### Response [#response-3] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The canceled order. **`order.marketId`** `string` The market identifier, same as in the request. **`order.marketDisplayName`** `string` The market ticker. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.orderType`** `string` The order type, same as in the request. **`order.side`** `string` The order side, same as in the request. **`order.status`** `string` The current [order status](../get-started/order-statuses#market-and-limit-orders). Possible values: * `Started` * `Pending` * `Working` * `Completed` * `Cancelled` * `Expired` * `Rejected` **`order.source`** `string` The source of the order. Possible values: * `Manual` * `StopOrder` * `FixApi` * `System` **`order.timeInForce`** `string` The time-in-force policy, same as in the request. **`order.commission`** `decimal string` The fee charged for the execution of the order, expressed in the quote asset. **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell, same as in the request. **`order.remainingAmount`** `decimal string` The amount of the base asset that remains unfilled. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders, same as in the request; `null` for market orders. **`order.executionPrice`** `decimal string` The volume-weighted average price at which the order was executed. **`order.createdAt`** `string` The timestamp when the order was created, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.updatedAt`** `string` The timestamp of the most recent update to the order, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.rejectDetails`** `string` The reason and details for order rejection when `status` is `Rejected`. Currently unused and not populated. **`order.cancellationDate`** `string | nullable` The timestamp when the order was cancelled or expired, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`; `null` if not cancelled. **`order.fillFactor`** `decimal string` The ratio of the filled quantity to the originally requested quantity (`filledAmount / requestedAmount`). ```json title="Response example — 200: OK" { "order": { "marketId": "spot.eth_usdt", "marketDisplayName": "SPOT ETH/USDT", "orderId": "01K2PF9XS29WN4JZRHMCTTQYJB", "orderType": "Limit", "side": "Buy", "status": "Cancelled", "source": "Manual", "timeInForce": "Gtc", "commission": "0", "requestedAmount": "0.1", "remainingAmount": "0.1", "requestedPrice": "4450", "executionPrice": "0", "createdAt": "2025-08-15T08:59:51.97Z", "updatedAt": "2025-08-15T09:00:06.2791048Z", "rejectDetails": "", "cancellationDate": null, "fillFactor": "0" } } ``` ### Get SPOT order data [#get-spot-order-data] `POST` `/frontoffice/api/v3/order-data` #### Summary [#summary-4] Use this method to retrieve and validate order data for SPOT market orders before placing. #### Request [#request-4] ##### Header parameters [#header-parameters-4] **`accountId`** `required` The trading account identifier. ##### Body [#body-3] **`order`** `object` The order data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.requestedBaseAmount`** `decimal string | nullable` The requested amount in base asset units. **`order.requestedQuoteAmount`** `decimal string | nullable` The requested amount in quote asset units. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. ```http title="Request example" POST /frontoffice/api/v3/order-data HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=3.0 Accept: */* { "order": { "marketId": "spot.eth_usdt", "side": "Buy", "orderType": "Limit", "requestedBaseAmount": 0.2, "requestedPrice": 4600 } } ``` #### Response [#response-4] In case of success, an object will be returned. Each object contains the following information: **`baseAmount`** `decimal string` The calculated base asset amount for the order. **`quoteAmount`** `decimal string` The calculated quote asset amount for the order. **`commissionAmount`** `decimal string` The estimated commission amount to be charged. **`total`** `decimal string` The total quote asset amount, including the estimated commission. ```json title="Response example — 200: OK" { "order": { "baseAmount": "0.2", "quoteAmount": "920", "commissionAmount": "9.2", "total": "929.2" } } ``` ### Get CFD order data [#get-cfd-order-data] `POST` `/frontoffice/api/cfd/v4/order-data` #### Summary [#summary-5] Use this method to retrieve and validate order data for CFD market orders before placing. #### Request [#request-5] ##### Header parameters [#header-parameters-5] **`accountId`** `required` The trading account identifier. ##### Body [#body-4] **`order`** `object` The order data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.takeProfit.triggerType`** `string · enum | nullable` The trigger calculation type for Take profit. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`order.takeProfit.triggerSize`** `decimal string | nullable` The trigger value in selected units. **`order.stopLoss.triggerType`** `string · enum | nullable` The trigger calculation type for Stop loss. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`order.stopLoss.triggerSize`** `decimal string | nullable` The trigger value in selected units. **`order.stopLoss.isTrailing`** `boolean | nullable` If `true`, enables the Trailing behavior for Stop loss. ```http title="Request example" POST /frontoffice/api/cfd/v4/order-data HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "order": { "takeProfit": { "triggerSize": 15000, "triggerType": "points" }, "stopLoss": { "triggerSize": "4020", "triggerType": "price", "isTrailing": false }, "marketId": "cfd.eth_eur", "side": "Sell", "orderType": "Market", "leverage": 135, "requestedLotAmount": 1 } } ``` #### Response [#response-5] In case of success, an object will be returned. Each object contains the following information: **`requiredMarginInRAT`** `decimal string` The required margin amount, in conversion to RAT. **`quoteAmount`** `decimal string` The calculated quote asset amount for the order. **`commissionAmountInRAT`** `decimal string` The estimated commission amount to be charged, in conversion to RAT. **`marginLevel`** `decimal string | nullable` The resulting margin level. **`takeProfit.price`** `decimal string` The calculated Take profit price, based on trigger settings. **`takeProfit.rate`** `decimal string` The calculated Take profit rate. **`takeProfit.points`** `integer · int64` The calculated take profit offset, in points. **`takeProfit.pnl`** `decimal string` The projected PnL at Take profit. **`stopLoss.price`** `decimal string` The calculated Stop loss price, based on trigger settings. **`stopLoss.rate`** `decimal string` The calculated Stop loss rate. **`stopLoss.points`** `integer · int64` The calculated Stop loss offset, in points. **`stopLoss.pnl`** `decimal string` The projected PnL at Stop loss. ```json title="Response example — 200: OK" { "order": { "requiredMarginInRAT": "34.4613643", "quoteAmount": "4004.345", "commissionAmountInRAT": "0", "marginLevel": "5.3015", "takeProfit": { "price": "3989.345", "rate": "0.0037", "points": 15000, "pnl": "17.42713545" }, "stopLoss": { "price": "4020", "rate": "-0.0039", "points": -15655, "pnl": "-18.18812036" } } } ``` ### Get PF order data [#get-pf-order-data] `POST` `/frontoffice/api/perpetual/v4/order-data` #### Summary [#summary-6] Use this method to retrieve and validate order data for Perpetual market orders before placing. #### Request [#request-6] ##### Header parameters [#header-parameters-6] **`accountId`** `required` The trading account identifier. ##### Body [#body-5] **`order`** `object` The order data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.takeProfit.triggerType`** `string · enum | nullable` The trigger calculation type for Take profit. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`order.takeProfit.triggerSize`** `decimal string | nullable` The trigger value in selected units. **`order.stopLoss.triggerType`** `string · enum | nullable` The trigger calculation type for Stop loss. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`order.stopLoss.triggerSize`** `decimal string | nullable` The trigger value in selected units. **`order.stopLoss.isTrailing`** `boolean | nullable` If `true`, enables Trailing behavior for Stop loss. ```http title="Request example" POST /frontoffice/api/perpetual/v4/order-data HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "order": { "takeProfit": { "triggerSize": "0.01", "triggerType": "rate" }, "stopLoss": { "triggerSize": "-100", "triggerType": "pnl", "isTrailing": false }, "marketId": "perp.btc_usdt", "side": "Buy", "orderType": "Limit", "leverage": 100, "requestedLotAmount": 0.5, "requestedPrice": 118450 } } ``` #### Response [#response-6] In case of success, an object will be returned. Each object contains the following information: **`requiredMarginInRAT`** `decimal string` The required margin amount, in conversion to RAT. **`quoteAmount`** `decimal string` The calculated quote asset amount for the order. **`commissionAmountInRAT`** `decimal string` The estimated commission amount to be charged, in conversion to RAT. **`marginLevel`** `decimal string | nullable` The resulting margin level. **`takeProfit.price`** `decimal string` The calculated Take profit price, based on trigger settings. **`takeProfit.rate`** `decimal string` The calculated Take profit rate. **`takeProfit.points`** `integer · int64` The calculated take profit offset, in points. **`takeProfit.pnl`** `decimal string` The projected PnL at Take profit. **`stopLoss.price`** `decimal string` The calculated Stop loss price, based on trigger settings. **`stopLoss.rate`** `decimal string` The calculated Stop loss rate. **`stopLoss.points`** `integer · int64` The calculated Stop loss offset, in points. **`stopLoss.pnl`** `decimal string` The projected PnL at Stop loss. ```json title="Response example — 200: OK" { "order": { "requiredMarginInRAT": "592.25", "quoteAmount": "59225", "commissionAmountInRAT": "0", "marginLevel": "0.3582", "takeProfit": { "price": "119634.5", "rate": "0.01", "points": 11845, "pnl": "592.25" }, "stopLoss": { "price": "118250", "rate": "-0.0016", "points": -2000, "pnl": "-100" } } } ``` ## Stop orders [#stop-orders] Stop orders are accepted while the market is closed according to its trading calendar. The market's own status must still be `Open` — a `Paused` or `Halted` market rejects Stop orders too. At submission the platform validates the requested and activation price scales, the amount scale, the market minimum amount, and the time in force: a Stop Market order requires `Ioc` or `Fok`, a Stop Limit order requires an explicit value. The stop price is additionally checked against the best bid and ask **only when a price is available** — while the market is closed there may be no top of the book to compare against, in which case the check is skipped. The accepted order is stored with the standard `WaitingForActivation` status — no new status value was introduced — and is evaluated against the first available price when the session opens; if the market gapped past the stop price, it triggers at the open. An order accepted while no price was available first has its internal pricing finalised from the next incoming price, so its activation can take one extra price update. No balance or margin is reserved at submission. The margin check runs at trigger time, and an order that fails it is cancelled with a failure reason rather than dropped. `Cancel Stop order` also works while the market is closed. Market and Limit orders are still rejected during non-trading hours. ### Place SPOT Stop order [#place-spot-stop-order] `POST` `/frontoffice/api/v3/stop-orders` #### Summary [#summary-7] Use this method to create and submit a new Stop order for SPOT markets. #### Request [#request-7] ##### Header parameters [#header-parameters-7] **`accountId`** `required` The trading account identifier. ##### Body [#body-6] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `spot.btc_usdt`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell. For Market orders, this represents the total base amount to fill; the executed amount may be lower if liquidity is insufficient. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`activationPrice`** `decimal string | nullable` The trigger price that activates the Stop order. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/v3/stop-orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "order": { "marketId": "spot.btc_usdt", "side": "Buy", "orderType": "Market", "activationPrice": 128000, "requestedAmount": 0.01, "timeInForce": "Ioc", "comment": "Strategy A" } } ``` #### Response [#response-7] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.marketId`** `string` The market identifier, same as in the request. **`order.marketDisplayName`** `string` The market ticker. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.orderType`** `string` The order type, same as in the request. **`order.side`** `string` The order side, same as in the request. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders, same as in the request; `null` for market orders. **`activationPrice`** `decimal string | nullable` The trigger price that activates the Stop order, same as in the request. **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell, same as in the request. **`order.timeInForce`** `string` The time-in-force policy, same as in the request. **`order.status`** `string` The current [order status](../get-started/order-statuses#stop-orders). Possible values: * `WaitingForActivation` * `Activated` * `Rejected` **`order.createdAt`** `string` The timestamp when the order was created, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.updatedAt`** `string` The timestamp of the most recent update to the order, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.cancellationDate`** `string | nullable` The timestamp when the order was cancelled or expired, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`; `null` if not cancelled. **`order.comment`** `string | nullable` The text note attached to the order, up to 100 characters. ```json title="Response example — 200: OK" { "order": { "marketId": "spot.btc_usdt", "marketDisplayName": "SPOT BTC/USDT", "orderId": "01K2MNC3BVR5WRTBEE9YWAS91K", "orderType": "Market", "side": "Buy", "requestedPrice": "0", "activationPrice": "128000", "requestedAmount": "0.01", "timeInForce": "Ioc", "status": "WaitingForActivation", "createdAt": "2025-08-14T16:07:25.8193038Z", "updatedAt": "2025-08-14T16:07:25.8193044Z", "cancellationDate": null, "comment": null } } ``` ### Place CFD Stop order [#place-cfd-stop-order] `POST` `/frontoffice/api/cfd/v4/stop-orders` #### Summary [#summary-8] Use this method to create and submit a new Stop order for CFD markets. #### Request [#request-8] ##### Header parameters [#header-parameters-8] **`accountId`** `required` The trading account identifier. ##### Body [#body-7] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.activationPrice`** `decimal string | nullable` The trigger price that activates the Stop order. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.stopLoss`** `object` The Stop loss settings. **`order.stopLoss.price`** `decimal string` The Stop loss price. **`order.stopLoss.isTrailing`** `boolean` Indicates if the Stop loss is Trailing. **`order.takeProfit`** `object` The Take profit settings. **`order.takeProfit.price`** `decimal string` The take profit price. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/cfd/v4/stop-orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "order": { "marketId": "cfd.eth_eur", "side": "Sell", "orderType": "Limit", "activationPrice": 3200, "requestedLotAmount": 0.5, "timeInForce": "Gtd", "leverage": 76, "requestedPrice": 3500, "cancellationDate": "2025-08-18T00:00:00Z", "stopLoss": { "price": "3900", "isTrailing": false }, "takeProfit": { "price": "3100" }, "comment": "Strategy A" } } ``` #### Response [#response-8] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.status`** `string` The current [order status](../get-started/order-statuses#stop-orders). Possible values: * `WaitingForActivation` * `Activated` * `Rejected` ```json title="Response example — 200: OK" { "order": { "orderId": "01K2MNRWP2J1S8T9TKTCXWYY87", "status": "WaitingForActivation" } } ``` ### Place PF Stop order [#place-pf-stop-order] `POST` `/frontoffice/api/perpetual/v4/stop-orders` #### Summary [#summary-9] Use this method to create and submit a new Stop order for Perpetual markets. #### Request [#request-9] ##### Header parameters [#header-parameters-9] **`accountId`** `required` The trading account identifier. ##### Body [#body-8] **`order`** `object` Order creation data. **`order.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. Must match one of the available markets returned by the [Get markets](settings#get-markets) endpoint. **`order.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`order.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`order.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`order.requestedLotAmount`** `decimal string` The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.activationPrice`** `decimal string | nullable` The trigger price that activates the Stop order. **`order.cancellationDate`** `string | nullable` For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. Required if `timeInForce` is set to `Gtd`; ignored for other time-in-force values. **`order.leverage`** `integer` The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin). **`order.stopLoss`** `object` The Stop loss settings. **`order.stopLoss.price`** `decimal string` The Stop loss price. **`order.stopLoss.isTrailing`** `boolean` Indicates if the Stop loss is Trailing. **`order.takeProfit`** `object` The Take profit settings. **`order.takeProfit.price`** `decimal string` The take profit price. **`order.comment`** `string | nullable` A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed. ```http title="Request example" POST /frontoffice/api/perpetual/v4/stop-orders HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "order": { "marketId": "perp.btc_usdt", "side": "Sell", "orderType": "Market", "activationPrice": 115000, "requestedLotAmount": 1, "timeInForce": "Fok", "leverage": 22, "stopLoss": { "price": "118020", "isTrailing": true }, "takeProfit": { "price": "113873" }, "comment": "Strategy A" } } ``` #### Response [#response-9] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The created order. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.status`** `string` The current [order status](../get-started/order-statuses#stop-orders). Possible values: * `WaitingForActivation` * `Activated` * `Rejected` ```json title="Response example — 200: OK" { "order": { "orderId": "01K2MNM0S8B2R9DS7BWJ8PGYPR", "status": "WaitingForActivation" } } ``` ### Cancel Stop order [#cancel-stop-order] `DELETE` `/frontoffice/api/v3/stop-orders/``{orderId}` #### Summary [#summary-10] Use this method to cancel an active Stop order placed on SPOT, CFD, or Perpetual markets. #### Request [#request-10] ##### Header parameters [#header-parameters-10] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-1] **`orderId`** `required` The Stop order identifier to cancel. ```http title="Request example" DELETE /frontoffice/api/v3/stop-orders/01K2MNGAWPMQJ7WGATFSCAS1G4 HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* ``` #### Response [#response-10] In case of success, an object will be returned. Each object contains the following information: **`order`** `object` The canceled order. **`order.marketId`** `string` The market identifier, same as in the request. **`order.marketDisplayName`** `string` The market ticker. **`order.orderId`** `string` The unique identifier of the order assigned by the system. **`order.orderType`** `string` The order type, same as in the request. **`order.side`** `string` The order side, same as in the request. **`order.requestedPrice`** `decimal string | nullable` The limit price for Limit orders (the maximum price for a buy or minimum price for a sell). Must be `null` or omitted for Market orders. **`order.activationPrice`** `decimal string | nullable` The trigger price that activates the Stop order. **`order.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell, same as in the request. **`order.timeInForce`** `string` The time-in-force policy, same as in the request. **`order.status`** `string` The current [order status](../get-started/order-statuses#stop-orders). Possible values: * `WaitingForActivation` * `Activated` * `Rejected` **`order.createdAt`** `string` The timestamp when the order was created, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.updatedAt`** `string` The timestamp of the most recent update to the order, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`. **`order.cancellationDate`** `string | nullable` The timestamp when the order was cancelled or expired, in the following format: `YYYY-MM-DDTHH:MM:SS.sssZ`; `null` if not cancelled. ```json title="Response example — 200: OK" { "order": { "marketId": "perp.btc_usdt", "marketDisplayName": "Perpetual BTC/USDT", "orderId": "01K2MNGAWPMQJ7WGATFSCAS1G4", "orderType": "Limit", "side": "Sell", "requestedPrice": "115100", "activationPrice": "115000", "requestedAmount": "1", "timeInForce": "Gtc", "status": "Rejected", "createdAt": "2025-08-14T16:09:44.5986099Z", "updatedAt": "2025-08-14T16:09:44.5986103Z", "cancellationDate": null } } ``` ## Positions [#positions] ### Close position [#close-position] `POST` `/frontoffice/api/v4/positions/``{positionId}``/close` #### Summary [#summary-11] Use this method to close a specific position entirely or partially. #### Request [#request-11] ##### Header parameters [#header-parameters-11] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-2] **`positionId`** `required` The position identifier to close. ##### Body [#body-9] **`closePositionLotAmount`** `decimal string | nullable` The portion of the position to close, in lots. ```http title="Request example" POST /frontoffice/api/v4/positions/01K2PFXDP1FWCJSGTX4GJ6JHM0/close HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* ``` #### Response [#response-11] In case of success, an object will be returned. Each object contains the following information: **`positionId`** `string` The position identifier. ```json title="Response example — 200: OK" { "positionId": "01K2PFXDP1FWCJSGTX4GJ6JHM0" } ``` ### Bulk close positions [#bulk-close-positions] `POST` `/frontoffice/api/v4/positions/bulk-close` #### Summary [#summary-12] Use this method to close multiple positions simultaneously based on different criteria such as all positions, positive PnL only, or negative PnL only. #### Request [#request-12] ##### Header parameters [#header-parameters-12] **`accountId`** `required` The trading account identifier. ##### Body [#body-10] **`mode`** `string` `required` The bulk close mode. Possible values: * `AllPositions` — close all positions. * `PositivePnl` — close only positions with positive PnL. * `NegativePnl` — close only positions with negative PnL. ```http title="Request example" POST /frontoffice/api/v4/positions/bulk-close HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "mode": "AllPositions" } ``` #### Response [#response-12] In case of success, an object will be returned containing identifiers of closed positions. ```json title="Response example — 200: OK" { "status": "accepted", "positionIds": [ "01K228VNC2Q7E7K9W8GABWBZ5Z", "01K22BZ2DCETJZKW6MK81N1T8Y", "01K2CXF06A3A5SK2YFJT67CMZ5", "01K2CXF2ZJ6MJYMEK663TBBY8K", "01K2PFXDP1FWCJSGTX4GJ6JHM0" ] } ``` ### Get trigger data [#get-trigger-data] `POST` `/frontoffice/api/v4/positions/``{positionId}``/trigger-data` #### Summary [#summary-13] Use this method to retrieve Stop loss and Take profit settings for an open position. #### Request [#request-13] ##### Header parameters [#header-parameters-13] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-3] **`positionId`** `required` The position identifier. ##### Body [#body-11] **`stopLoss.triggerType`** `string · enum | nullable` The trigger calculation type for Stop loss. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`stopLoss.triggerSize`** `decimal string | nullable` The trigger value in selected units. **`stopLoss.isTrailing`** `boolean | nullable` Indicates if Stop loss is Trailing. **`takeProfit.triggerType`** `string · enum | nullable` The trigger calculation type for Take profit. Possible values: * `Price` * `Rate` * `Points` * `Pnl` **`order.takeProfit.triggerSize`** `decimal string | nullable` The trigger value in selected units. ```http title="Request example" POST /frontoffice/api/v4/positions/01K2HYXA7N2G9NHTFEWYVM9SEQ/trigger-data HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "stopLoss": { "triggerSize": "-0.01", "triggerType": "rate", "isTrailing": true }, "takeProfit": { "triggerSize": 2500, "triggerType": "points" } } ``` #### Response [#response-13] In case of success, an object will be returned. Each object contains the following information: **`takeProfit.price`** `decimal string` The calculated Take profit price, based on trigger settings. **`takeProfit.rate`** `decimal string` The calculated Take profit rate. **`takeProfit.points`** `integer · int64` The calculated take profit offset, in points. **`takeProfit.pnl`** `decimal string` The projected PnL at Take profit. **`stopLoss.price`** `decimal string` The calculated Stop loss price, based on trigger settings. **`stopLoss.rate`** `decimal string` The calculated Stop loss rate. **`stopLoss.points`** `integer · int64` The calculated Stop loss offset, in points. **`stopLoss.pnl`** `decimal string` The projected PnL at Stop loss. ```json title="Response example — 200: OK" { "takeProfit": { "price": "248.27", "rate": "0.1119", "points": 2500, "pnl": "21.5" }, "stopLoss": { "price": "221.04", "rate": "-0.01", "points": -223, "pnl": "-1.91" } } ``` ### Submit triggers [#submit-triggers] `PUT` `/frontoffice/api/v4/positions/``{positionId}``/triggers` #### Summary [#summary-14] Use this method to modify Stop loss and Take profit settings for an open position. #### Request [#request-14] ##### Header parameters [#header-parameters-14] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-4] **`positionId`** `required` The position identifier. ##### Body [#body-12] **`stopLoss.price`** `decimal string` The Stop loss trigger price. **`stopLoss.isTrailing`** `boolean` If `true`, enables the Trailing behavior for Stop loss. **`takeProfit.price`** `decimal string` The Take profit trigger price. ```http title="Request example" PUT /frontoffice/api/v4/positions/01K2HYXA7N2G9NHTFEWYVM9SEQ/triggers HTTP/1.1 Host: {host} Authorization: Bearer JWT accountId: {accountId} Content-Type: application/json; x-api-version=4.0 Accept: */* { "stopLoss": { "price": "165.13", "isTrailing": true }, "takeProfit": { "price": 250 } } ``` #### Response [#response-14] In case of success, an object will be returned containing the identifier of the updated position. ```json title="Response example — 200: OK" { "positionId": "01K2HYXA7N2G9NHTFEWYVM9SEQ" } ``` ## Commissions [#commissions] ### Get account trading volume [#get-account-trading-volume] `GET` `/frontoffice/api/v3/commission/``{dynamicCommissionGroupId}``/account-trading-volume` #### Summary [#summary-15] Use this method to obtain a cumulative account trading volume used for calculating the commission tier. #### Request [#request-15] ##### Header parameters [#header-parameters-15] **`accountId`** `required` The trading account identifier. ##### Path parameters [#path-parameters-5] **`dynamicCommissionGroupId`** `required` The dynamic commission group identifier. Use [Get market](settings#get-market) to obtain. ```http title="Request example" GET /frontoffice/api/v3/commission/{dynamicCommissionGroupId}/account-trading-volume HTTP/1.1 Host: {host} Authorization: Bearer JWT Content-Type: application/json; x-api-version=4.0 Accept: */* ``` #### Response [#response-15] In case of success, an object will be returned containing current trading volume, in RAT, for the account. ```json title="Response example — 200: OK" { "currentTradingVolumeInRAT": "string" } ``` ## Get full balance [#get-full-balance] ### Connection [#connection] ```text title="URL" /frontoffice/ws/v3/account?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"FullBalance"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46" ], "invocationId": "0", "target": "FullBalance", "type": 4 } ``` *** ### Message [#message] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `array of objects` The array of balance objects. **`item.assetId`** `string` The asset identifier. **`item.available`** `decimal string` The available asset balance. This value is calculated as *Total balance* – *Locked balance*. **`item.total`** `decimal string` The overall amount of the asset, including locked funds. **`item.locked`** `decimal string` The asset amount locked on the account for execution of all placed Limit orders. ```json title="Example" { "type": 2, "invocationId": "0", "item": [ { "assetId": "eur", "available": "497838.8", "total": "497838.8", "locked": "0" } ] } ``` ## Get margin data [#get-margin-data] ### Connection [#connection-1] ```text title="URL" /frontoffice/ws/v3/account?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"MarginData"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46" ], "invocationId": "0", "target": "MarginData", "type": 4 } ``` *** ### Message [#message-1] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.marginBalanceInRAT`** `decimal string` The total amount of funds that can be used as a collateral for trading, in RAT. This value is calculated as SUM (*TotalAmountX* × *MarginRatioX* × *Rate X/RAT*) Where: * *TotalAmountX* is the the total amount of the asset X, including both available and locked funds. * *MarginRatioX* is the Margin ratio set for the asset X. * *Rate X/RAT* is the constantly updated rate of the asset X to the BP root asset. **`item.creditInRAT`** `decimal string` The promotional trading credit granted to the account by the broker, in RAT. Credit is included in the account equity but excluded from the withdrawable amount. During a rolling deployment, older payloads might omit this field. In that case, default it to `0`. **`item.unrealizedPnlInRAT`** `decimal string` The total potential profit or loss earned from all open positions. This value is calculated as *Σ(Unrealized PnL for Long positions + Unrealized PnL for Short positions)*, where: * *Unrealized PnL for Long positions* = *Position size* × (*Current price* – *Open price*) * *Unrealized PnL for Short positions* = *Position size* × (*Open price* – *Current price*) **`item.equityInRAT`** `decimal string` The potential balance if all open positions were closed right now. This value is calculated as *Margin balance* + *Credit* + *Unrealized PnL*. **`item.usedMarginInRAT`** `decimal string` The amount of funds that is used for maintaining all open positions. Is opposed to the *Free margin*. The Used margin for positions on a specific market is calculated using the maximum value between the total margin of long positions and the total margin of short positions: MAX(*MarketPositionLong*, *MarketPositionShort*). **`item.freeMarginInRAT`** `decimal string` The amount of funds that can be used for opening new positions. **`item.marginLevel`** `decimal string` The ratio of funds to a used collateral, in percents. This value is calculated as *Equity* / *Used margin* × 100%. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "marginBalanceInRAT": "497838.8", "creditInRAT": "0", "unrealizedPnlInRAT": "-5.25", "equityInRAT": "497833.55", "usedMarginInRAT": "100.18", "freeMarginInRAT": "497733.37", "marginLevel": "4969.3905" } } ``` ## Get order book [#get-order-book] ### Connection [#connection] ```text title="URL" /marketdata/v5/info?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. In the second element, provide the `marketId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"Book"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46", "cfd.eur_chf" ], "invocationId": "0", "target": "Book", "type": 4 } ``` *** ### Message [#message] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.instrument`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.askTotalAmount`** `string` The total ask amount. **`item.bidTotalAmount`** `string` The total bid amount. **`item.asks`** `array of objects` The array of ask price objects. **`item.asks.price`** `string` The price, in the quote asset. **`item.asks.amount`** `string` The total amount of the base asset available at a corresponding price level. **`item.asks.total`** `string` The total amount, in the quote asset, required to fully execute the orders at a corresponding price level. **`item.bids`** `array of objects` The array of bid price objects. **`item.bids.price`** `string` The price, in the quote asset. **`item.bids.amount`** `string` The total amount of the base asset available at a corresponding price level. **`item.bids.total`** `string` The total amount, in the quote asset, required to fully execute the orders at a corresponding price level. **`item.version`** `string` The order book version. **`item.snapshot`** `boolean` The data snapshot. If `snapshot: true`, it indicates the message contains the full dataset. Subsequent messages with `snapshot: false` only include updates or changes since the initial snapshot. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "instrument": "cfd.eur_chf", "askTotalAmount": "18700000", "bidTotalAmount": "19100000", "asks": [ { "price": "0.93677", "amount": "5000000", "total": "4683850" }, { "price": "0.93676", "amount": "0", "total": "0" }, { "price": "0.93676", "amount": "0", "total": "0" } ], "bids": [ { "price": "0.93654", "amount": "0", "total": "0" }, { "price": "0.93654", "amount": "0", "total": "0" }, { "price": "0.93655", "amount": "5000000", "total": "4682750" } ], "version": "12498", "snapshot": false } } ``` ## Get trading data [#get-trading-data] ### Connection [#connection-1] ```text title="URL" /marketdata/v5/info?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. In the second element, provide a list of `marketIds` as an array of strings. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"TradingData"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46", [ "spot.bnb_btc" ] ], "invocationId": "0", "target": "TradingData", "type": 4 } ``` *** ### Message [#message-1] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.markets`** `array of objects` The array of market objects. **`item.markets.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.markets.type`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`item.markets.displayName`** `string` The market ticker. **`item.markets.fullName`** `string` The market full name or description (optional). **`item.markets.price`** `decimal string` The current top-of-the-book price, in the quote asset. **`item.markets.priceInRAT`** `decimal string` The current top-of-the-book price, in conversion to the root asset of the platform. **`item.markets.priceChange24hr`** `decimal string` The price change over the last 24 hours, in percents. This value is calculated as ((*Current price* – *Price 24h ago*) / *Current price*) × 100. **`item.markets.priceChangeAbs24hr`** `decimal string` The price change over the last 24 hours. This value is calculated as *Current price* – *Price 24h ago*. **`item.markets.highPrice24hr`** `decimal string` The highest trade price over the last 24 hours. **`item.markets.lowPrice24hr`** `decimal string` The lowest trade price over the last 24 hours. **`item.markets.markPrice`** `decimal string` *Applicable to Perpetual markets only.* The mid-spread price, in conversion to RAT. **`item.markets.fundingRate`** `decimal string` *Applicable to Perpetual markets only.* The current funding rate. **`item.snapshot`** `boolean` The data snapshot. If `snapshot: true`, it indicates the message contains the full dataset. Subsequent messages with `snapshot: false` only include updates or changes since the initial snapshot. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "markets": [ { "marketId": "cfd.eur_chf", "type": "Cfd", "displayName": "cfd.eur_chf", "fullName": "", "price": "0.93586", "priceInRAT": "1", "priceChange24hr": "-0.0006", "priceChangeAbs24hr": "-0.00049", "highPrice24hr": "0.93695", "lowPrice24hr": "0.93134", "markPrice": null, "fundingRate": null } ], "snapshot": false } } ``` ## Get top of the book [#get-top-of-the-book] ### Connection [#connection-2] ```text title="URL" /marketdata/v5/info?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. In the second element, provide a list of `marketIds` as an array of strings. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"Tob"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46", [ "spot.eth_usdt" ] ], "invocationId": "0", "target": "Tob", "type": 4 } ``` *** ### Message [#message-2] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.markets`** `array of objects` The array of market objects. **`item.markets.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.markets.ask`** `decimal string` The top-of-the-book ask price. **`item.markets.bid`** `decimal string` The top-of-the-book bid price. **`item.snapshot`** `boolean` The data snapshot. If `snapshot: true`, it indicates the message contains the full dataset. Subsequent messages with `snapshot: false` only include updates or changes since the initial snapshot. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "markets": [ { "marketId": "spot.eth_usdt", "ask": "2483.82", "bid": "2483.81" } ], "snapshot": false } } ``` ## Get trading chart [#get-trading-chart] ### Connection [#connection-3] ```text title="URL" /marketdata/v5/info?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. In the second element, provide the `marketId` and `timescale` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"Chart"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46", "cfd.eth_eur@15m" ], "invocationId": "0", "target": "Chart", "type": 4 } ``` *** ### Message [#message-3] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.instrument`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.low`** `decimal string` The lowest base asset price within the specified time interval. **`item.high`** `decimal string` The highest base asset price within the specified time interval. **`item.open`** `decimal string` The base asset price at the beginning of the specified time interval. **`item.close`** `decimal string` The base asset price at the end of the specified time interval. **`item.start`** `dateTime` The beginning of the specified time interval, in ISO 8601 format. **`item.end`** `dateTime` The end of the specified time interval, in ISO 8601 format. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "instrument": "cfd.eth_eur", "low": "2240.88", "high": "2270.29", "open": "2265.63", "close": "2255.99", "start": "2025-05-21T15:30:00Z", "end": "2025-05-21T15:45:00Z" } } ``` ## Get market summary [#get-market-summary] ### Connection [#connection-4] ```text title="URL" /marketdata/v5/info?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. In the second element, provide a list of `marketIds` as an array of strings. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"Summary"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46", [ "cfd.eur_chf" ] ], "invocationId": "0", "target": "Summary", "type": 4 } ``` *** ### Message [#message-4] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.items`** `array of objects` The array of data objects. **`item.items.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.items.last`** `decimal string` The price of the last trade. **`item.items.high24hr`** `decimal string` The highest trade price over the last 24 hours. **`item.items.low24hr`** `decimal string` The lowest trade price over the last 24 hours. **`item.items.percentChange`** `decimal string` The price change over the last 24 hours, in percents. This value is calculated as ((*Current price* – *Price 24h ago*) / *Current price*) × 100. **`item.snapshot`** `boolean` The data snapshot. If `snapshot: true`, it indicates the message contains the full dataset. Subsequent messages with `snapshot: false` only include updates or changes since the initial snapshot. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "items": [ { "marketId": "cfd.eur_chf", "last": "0.93597", "high24hr": "0.93695", "low24hr": "0.93134", "percentChange": "-0.02" } ], "snapshot": false } } ``` ## Guest market data [#guest-market-data] Every stream on this page has an anonymous counterpart on a separate hub. Use it to read live market data without an access token — for example, to drive a public dashboard. ### Connection [#connection-5] ```text title="URL" /marketdata/v5/guest ``` No `access_token` query parameter and no `Authorization` header. The connection carries no account, so guest traffic is subject to its own limits, separate from the authenticated ones: a per-instance cap on concurrent connections and a per-client-IP cap on concurrent connections. A connection beyond either cap is rejected with a `GuestConnectionLimitExceeded` hub error. The per-IP cap keys off the real-client-IP header configured for the deployment; connections whose IP cannot be resolved share one fallback bucket. ### Differences from the authenticated hub [#differences-from-the-authenticated-hub] The five stream targets are identical — `Book`, `TradingData`, `Tob`, `Chart`, and `Summary` — and each returns the same message shape as documented above. Two things change: * **`arguments` has one element, not two.** Drop the `accountId` element and pass only what the authenticated hub takes as its second element: | Target | `arguments` | | ------------- | ---------------------------------------- | | `Book` | `[ "cfd.eur_chf" ]` | | `Chart` | `[ "cfd.eth_eur@15m" ]` | | `TradingData` | `[ [ "cfd.eur_chf", "spot.btc_usdt" ] ]` | | `Tob` | `[ [ "cfd.eur_chf", "spot.btc_usdt" ] ]` | | `Summary` | `[ [ "cfd.eur_chf", "spot.btc_usdt" ] ]` | * **Prices are not account-specific.** A guest stream and an authenticated stream on the same instrument can therefore quote different prices. Only markets that are active and well-configured are streamed. A reconnect needs no credentials. ```json title="Example: subscribe to a guest order book" { "arguments": [ "cfd.eur_chf" ], "invocationId": "0", "target": "Book", "type": 4 } ``` For guest snapshots, instrument lists, and candle history over REST, see [Guest](../rest-api/guest). ## Get open orders [#get-open-orders] ### Connection [#connection] ```text title="URL" /frontoffice/ws/v4/account?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"OpenOrders"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46" ], "invocationId": "0", "target": "OpenOrders", "type": 4 } ``` *** ### Message [#message] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `array of objects` The array of market objects. **`item.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.marketType`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`item.marketDisplayName`** `string` The market ticker. **`item.marketFullName`** `string` The market full name or description (optional). **`item.orderId`** `string` The unique identifier of the order assigned by the system. **`item.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`item.status`** `string` The current [order status](../get-started/order-statuses). Possible values: * `Started` * `Pending` * `Working` **`item.source`** `string` The source of the order. Possible values: * `Manual` — the order was created manually via UI or API. **`item.reason`** `string` The reason for placing the order. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`item.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`item.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`item.requestedAmount`** `decimal string` The quantity of the base asset to buy or sell. For market orders, this represents the total base amount to fill; the executed amount may be lower if liquidity is insufficient. **`item.remainingAmount`** `decimal string` The order amount that hasn't yet been filled, in the base asset. **`item.requestedPrice`** `decimal string` The limit price for Limit orders; `null` for Market orders. **`item.executionPrice`** `decimal string` The volume-weighted average price of the order executions. **`item.createdAt`** `dateTime` The timestamp when the order was created, in ISO 8601 format. **`item.updatedAt`** `dateTime` The timestamp of the most recent update to the order, in ISO 8601 format. **`item.cancellationDate`** `dateTime` The timestamp when the order was cancelled or expired, in ISO 8601 format; `null` if not cancelled. **`item.commissionAssetId`** `string` The currency in which the commission was held. **`item.commissionAmount`** `decimal string` The total commissions put on hold for executing the order. **`item.leverage`** `int` *Applicable only to CFD markets.* The leverage ratio used when placing the order. **`item.fillFactor`** `decimal string` The proportion of the order amount filled so far, where `1` represents 100% fulfillment. **`item.comment`** `string | nullable` The text note attached to the order, up to 100 characters. **`item.takeProfit`** `decimal string` The Take Profit price, if set. **`item.stopLoss`** `decimal string` The Stop Loss price, if set. ```json { "type": 2, "invocationId": "0", "item": [ { "marketId": "cfd.eur_chf", "marketType": "Cfd", "marketDisplayName": "EUR/CHF", "marketFullName": "", "orderId": "01JVQBFSTVC40VK03A0AY7K016", "timeInForce": "Gtc", "status": "Pending", "source": "Manual", "reason": "Trader", "side": "Buy", "orderType": "Limit", "requestedAmount": "10000", "remainingAmount": "10000", "requestedPrice": "0.9", "executionPrice": "0", "createdAt": "2025-05-20T17:22:31.899Z", "updatedAt": "2025-05-20T17:22:31.9001213Z", "cancellationDate": null, "commissionAssetId": "eur", "commissionAmount": "0", "leverage": 1, "fillFactor": "0", "takeProfit": null, "stopLoss": null, "comment": null } ] } ``` ## Get open positions [#get-open-positions] ### Connection [#connection-1] ```text title="URL" /frontoffice/ws/v4/account?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"OpenPositions"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46" ], "invocationId": "0", "target": "OpenPositions", "type": 4 } ``` *** ### Message [#message-1] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `object` The dataset object. **`item.item`** `array of objects` The array of position objects. **`item.item.positionId`** `string` The unique identifier of the position assigned by the system. **`item.item.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.item.marketType`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`item.item.marketDisplayName`** `string` The market ticker. **`item.item.marketFullName`** `string` The market full name or description (optional). **`item.item.createdAt`** `dateTime` The timestamp when the position was opened, in ISO 8601 format. **`item.item.updatedAt`** `dateTime` The timestamp of the most recent update to the position, in ISO 8601 format. **`item.item.side`** `string` The position side. Possible values: * `Buy` * `Sell` **`item.item.status`** `string` The current position status. Always `"Open"`. **`item.item.leverage`** `int` *Applicable only to CFD markets.* The leverage ratio used when opening the position. **`item.item.positionLotAmount`** `decimal string` The position volume, in lots. **`item.item.positionPriceInRAT`** `decimal string` The current position price, in conversion to RAT. **`item.item.rateToRAT`** `decimal string` The current exchange rate of a quote asset to RAT. **`item.item.usedMarginInRAT`** `decimal string` The amount of trader’s funds used for maintaining a position, in conversion to RAT. **`item.item.openPrice`** `decimal string` The volume-weighted average price (VWAP) at which the position was opened. **`item.item.currentMarketPrice`** `decimal string` The current market price of the base asset: bid for Long positions and ask for Short positions. **`item.item.unrealizedPnlDayInRAT`** `decimal string` The potential profit or loss earned for a current day, in conversion to RAT. For **Long** positions, this value is calculated as *Position size* × (*Current bid price* – *First bid price for today*). For **Short** positions, this value is calculated as *Position size* × (*First ask price for today* – *Current ask price*). If a position was opened today, then the *Open VWAP* is used instead of the *First price for today*. **`item.item.unrealizedPnlDayPercent`** `decimal string` The potential profit or loss earned for a current day, in percents. **`item.item.unrealizedPnlTotalInRAT`** `decimal string` The potential profit or loss earned for the entire period from the moment the position was opened, in conversion to RAT. For **Long** positions, this value is calculated as *Position size* × (*Current bid price* – *Open VWAP*). For **Short** positions, this value is calculated as *Position size* × (*Open VWAP* – *Current ask price*). **`item.item.unrealizedPnlTotalPercent`** `decimal string` The potential profit or loss earned for the entire period from the moment the position was opened, in conversion to RAT, in percents. **`item.item.takeProfit`** `decimal string` The Take Profit price, if set. **`item.item.stopLoss`** `decimal string` The Stop Loss price, if set. **`item.item.positionModifier`** `string` The reason for the latest position update. **`item.item.comment`** `string | nullable` The text note inherited from the opening order, up to 100 characters. **`snapshot`** `boolean` The data snapshot. If `snapshot: true`, it indicates the message contains the full dataset. Subsequent messages with `snapshot: false` only include updates or changes since the initial snapshot. ```json title="Example" { "type": 2, "invocationId": "0", "item": { "item": [ { "positionId": "01JP4H3AMS7Q1H6Y6H3XJ52JTA", "marketId": "cfd.eur_chf", "marketType": "Cfd", "marketDisplayName": "EUR/CHF", "marketFullName": "", "createdAt": "2025-03-12T06:36:31.257Z", "updatedAt": "2025-03-12T06:36:31.257Z", "side": "Buy", "status": "Open", "leverage": 1, "positionLotAmount": "0.01", "positionPriceInRAT": "1000.46", "rateToRAT": "1.07", "usedMarginInRAT": "1000.53", "openPrice": "0.96304", "currentMarketPrice": "0.93501", "unrealizedPnlDayInRAT": "1.86", "unrealizedPnlDayPercent": "0.0018", "unrealizedPnlTotalInRAT": "-29.93", "unrealizedPnlTotalPercent": "-0.0291", "takeProfit": null, "stopLoss": null, "positionModifier": "Trader", "comment": null }, { "positionId": "01JVQB9ZWJ6G4QV0P98X0QWNA7", "marketId": "cfd.eur_chf", "marketType": "Cfd", "marketDisplayName": "EUR/CHF", "marketFullName": "", "createdAt": "2025-05-20T17:19:21.49Z", "updatedAt": "2025-05-20T17:19:21.491321Z", "side": "Buy", "status": "Open", "leverage": 100, "positionLotAmount": "0.1", "positionPriceInRAT": "10004.6", "rateToRAT": "1.07", "usedMarginInRAT": "100.06", "openPrice": "0.93666", "currentMarketPrice": "0.93501", "unrealizedPnlDayInRAT": "18.61", "unrealizedPnlDayPercent": "0.0018", "unrealizedPnlTotalInRAT": "-17.02", "unrealizedPnlTotalPercent": "-0.0017", "takeProfit": null, "stopLoss": null, "positionModifier": "Trader", "comment": null } ], "snapshot": false } } ``` ## Get closed positions [#get-closed-positions] ### Connection [#connection-2] ```text title="URL" /frontoffice/ws/v4/account?access_token={YOUR_ACCESS_TOKEN} ``` **`arguments`** `array` The connection parameters. In the first element, provide the `accountId` as a string. **`invocationId`** `string` The invocation identifier. Must be unique and increase by 1 for each sent message. **`target`** `string` The stream name. Specify `"ClosePositionsOrders"`. **`type`** `int` The operation type. Set to `4` to indicate a subscription to the stream. ```json title="Example" { "arguments": [ "67d0456f8c7b1108e4cf5d46" ], "invocationId": "0", "target": "ClosePositionsOrders", "type": 4 } ``` *** ### Message [#message-2] **`type`** `string` The operation type. `2` indicates the streaming is in progress. **`invocationId`** `string` The invocation identifier. Same as in the request. **`item`** `array of objects` The array of position objects. **`item.marketId`** `string` The market identifier, in the following format: `{marketType}.{baseAssetId}_{quoteAssetId}`, for example: `cfd.eth_eur`. **`item.marketType`** `string` The market type. Possible values: * `Spot` * `Cfd` * `Perp` **`item.marketDisplayName`** `string` The market ticker. **`item.marketFullName`** `string` The market full name or description (optional). **`item.orderId`** `string` The unique identifier of the order assigned by the system. **`item.orderType`** `string` The [order type](../get-started/order-types). Possible values: * `Market` * `Limit` **`item.timeInForce`** `string` The [time-in-force policy](../get-started/time-in-force) for the order, controlling its lifetime. Possible values: * `Gtc` * `Ioc` * `Fok` * `Gtd` * `Day` **`item.side`** `string` The order side, indicating the direction of the trade. Possible values: * `Buy` * `Sell` **`item.positionCloseLotAmount`** `decimal string` The closed volume, in lots, which is equivalent to the corresponding filled order volume. **`item.reason`** `string` The reason for position closing. Possible values: * `Trader` * `StopOut` * `MarketHalted` * `MarketDisabled` * `TakeProfit` * `StopLoss` * `Admin` **`item.realizedPnlInRAT`** `decimal string` The actual profit or loss earned, in conversion to RAT. For **Long** positions, this value is calculated as *Position size* × (*Close price* – *Open price*). For **Short** positions, this value is calculated as *Position size* × (*Open price* – *Close price*). **`item.closedAt`** `dateTime` The timestamp when the position was closed, in ISO 8601 format. **`item.positionId`** `string` The unique identifier of the position assigned by the system. **`item.openPrice`** `decimal string` The volume-weighted average price (VWAP) at which the position was opened. **`item.closePrice`** `decimal string` The volume-weighted average price (VWAP) of trades related to a position-closing order. **`item.positionPriceInRAT`** `decimal string` The position price, in conversion to RAT. **`item.rateToRAT`** `decimal string` The conversion rate to RAT. **`item.openedAt`** `dateTime` The timestamp when the position was opened, in ISO 8601 format. ```json title="Example" { "type": 2, "invocationId": "0", "item": [ { "marketId": "cfd.eur_chf", "marketFullName": "", "marketDisplayName": "EUR/CHF", "marketType": "Cfd", "orderId": "01JVSQ8WFA3QZ6AQTKYPXVXDWA", "orderType": "Market", "timeInForce": "Ioc", "side": "Sell", "positionCloseLotAmount": "0.01", "reason": "Trader", "realizedPnlInRAT": "-29.25", "closedAt": "2025-05-21T15:26:57.0027785Z", "positionId": "01JP4H3AMS7Q1H6Y6H3XJ52JTA", "openPrice": "0.96304", "closePrice": "0.93571", "positionPriceInRAT": "1001.2", "rateToRAT": "1.07", "openedAt": "2025-03-12T06:36:31.257Z" } ] } ``` You can connect B2Trader to **ChatGPT** as a **connector**. It uses the same B2Trader MCP URL and OAuth sign-in as every other agent. Pick the surface you need first — see [Overview](overview): * Read-only: `https:///mcp-read-only` * Full access: `https:///mcp-full-access` Ask your broker for the exact base URL for your platform. The read-only connector may also be discoverable directly in ChatGPT's connector directory. Connector availability depends on your ChatGPT plan. ## Connect the B2Trader connector [#connect-the-b2trader-connector] 1. In ChatGPT, open **Settings** → **Connectors**. 2. Choose to add a connector by **URL** (custom connector). 3. Paste the B2Trader MCP **URL** for the surface you want (read-only or full access). 4. Confirm. ChatGPT reads the endpoint's OAuth metadata and opens the sign-in page for your platform in your browser. 5. Sign in with the credentials you normally use. Depending on how your broker set up your platform, this is either the B2Trader sign-in form or the sign-in page of the portal you normally use to access your account. Authentication uses OAuth 2.1 with PKCE — no API key is pasted into ChatGPT. 6. **Full access only:** approve the consent screen (see [The full-access consent screen](#the-full-access-consent-screen)). 7. ChatGPT lists the connector as connected, and the B2Trader tools become available to it. ## The full-access consent screen [#the-full-access-consent-screen] When you connect the **full-access** surface, B2Trader shows an explicit consent screen before issuing a token. It reads: Connecting this AI agent lets it place, cancel and close orders and set triggers on your account directly, with no per-action confirmation. These actions are irreversible. This differs from the in-terminal AI chat, which confirms each trade. * **Approve** — ChatGPT receives a token carrying the `mcp:trade` scope and can trade on your account. * **Decline** — no token is issued and ChatGPT stays disconnected from the full-access surface. The read-only surface does **not** show this screen — it only grants the `mcp:read` scope. Before approving full access, read [Full-access safety](full-access-safety). ## What "connected" looks like [#what-connected-looks-like] * The connector appears as connected in ChatGPT's settings. * B2Trader tools are available to ChatGPT in your chats. * On read-only, no order-placing or position-closing tools appear — they are not part of that surface. ## Disconnecting [#disconnecting] * In ChatGPT, remove the connector to stop it calling B2Trader. * To revoke B2Trader's side of the grant, use the account console — see [How to stop your agent](full-access-safety#how-to-stop-your-agent). You can connect B2Trader to **Claude** in two places: * **claude.ai** (web and desktop app) — add B2Trader as a **custom connector**. * **Claude Desktop** — add B2Trader as an MCP server; the OAuth sign-in completes through Claude's hosted redirect (`https://claude.ai/api/mcp/auth_callback`). Both use the same B2Trader MCP URL and the same OAuth sign-in. Pick the surface you need first — see [Overview](overview): * Read-only: `https:///mcp-read-only` * Full access: `https:///mcp-full-access` Ask your broker for the exact base URL for your platform. The read-only connector may also be discoverable directly in Claude's connector directory. ## Connect on claude.ai [#connect-on-claudeai] 1. Open **Settings** → **Connectors** in claude.ai. 2. Click **Add custom connector**. 3. Paste the B2Trader MCP **URL** for the surface you want (read-only or full access). 4. Click **Add**. Claude reads the endpoint's OAuth metadata and opens the sign-in page for your platform in your browser. 5. Sign in with the credentials you normally use. Depending on how your broker set up your platform, this is either the B2Trader sign-in form or the sign-in page of the portal you normally use to access your account. Authentication uses OAuth 2.1 with PKCE — you are **not** pasting an API key into Claude. 6. **Full access only:** approve the consent screen (see [The full-access consent screen](#the-full-access-consent-screen)). 7. Claude shows the connector as **Connected**, and the B2Trader tools appear in the tool list for your conversations. ## Connect in Claude Desktop [#connect-in-claude-desktop] 1. Open **Claude Desktop** → **Settings** → **Connectors**. 2. Add a new MCP server pointing at the B2Trader MCP URL for your surface. 3. Claude Desktop opens your browser for OAuth sign-in and completes the flow through Claude's **hosted** redirect (`https://claude.ai/api/mcp/auth_callback`), a pre-registered redirect URI. 4. Sign in and — for full access — approve the consent screen. 5. The B2Trader tools appear in Claude Desktop once the connector reports **Connected**. ## The full-access consent screen [#the-full-access-consent-screen] When you connect the **full-access** surface, B2Trader shows an explicit consent screen before issuing a token. It reads: Connecting this AI agent lets it place, cancel and close orders and set triggers on your account directly, with no per-action confirmation. These actions are irreversible. This differs from the in-terminal AI chat, which confirms each trade. * **Approve** — Claude receives a token carrying the `mcp:trade` scope and can trade on your account. * **Decline** — no token is issued and Claude stays disconnected from the full-access surface. The read-only surface does **not** show this screen — it only grants the `mcp:read` scope. Before approving full access, read [Full-access safety](full-access-safety). ## What "connected" looks like [#what-connected-looks-like] * The connector is listed as **Connected** in Claude's settings. * B2Trader tools (for example `trader_get_accounts`, plus platform market-data and portfolio tools) are available to Claude in your conversations. * On read-only, no order-placing or position-closing tools appear — they are not part of that surface. ## Disconnecting [#disconnecting] * In Claude, remove the connector to stop it calling B2Trader. * To revoke B2Trader's side of the grant, use the account console — see [How to stop your agent](full-access-safety#how-to-stop-your-agent). If you are building your own agent (for example with an Agent SDK) or using an MCP client that is not Claude or ChatGPT, you connect to the same two B2Trader endpoints and the same OAuth flow. This page covers the OAuth details a custom client needs. Pick the surface you need first — see [Overview](overview): * Read-only: `https:///mcp-read-only` * Full access: `https:///mcp-full-access` `` is the domain you open your B2Trader terminal on, not a separate API address. ## OAuth discovery [#oauth-discovery] Your client needs no B2Trader-specific configuration beyond the MCP URL. B2Trader is an OAuth 2.1 protected resource and advertises everything a compliant client needs: 1. Your client calls the MCP endpoint without a token and receives `401 Unauthorized` with a `WWW-Authenticate: Bearer resource_metadata="…"` header. 2. That header points at the protected-resource metadata (RFC 9728) for the surface you called — each surface has its own document: `https:///.well-known/oauth-protected-resource/mcp-read-only` and `https:///.well-known/oauth-protected-resource/mcp-full-access`. Fetching it returns the resource identifier, the authorization server (your broker's Keycloak realm), and `scopes_supported` — one scope only, matching the surface: `[mcp:read]` for `/mcp-read-only`, `[mcp:trade]` for `/mcp-full-access`. 3. Your client runs the standard OAuth 2.1 **authorization-code flow with PKCE** against that authorization server, requesting the scope for the surface you want. 4. B2Trader validates the token's audience (`bbp-mcp`) and the required scope (`mcp:read` for read-only, `mcp:trade` for full access) before serving any tool. Use a compliant MCP client library — it performs discovery, PKCE, and token refresh for you. You only supply the MCP URL. ## Pre-registered OAuth clients [#pre-registered-oauth-clients] B2Trader ships two pre-registered public OAuth clients. Use the one matching your surface: | Surface | `client_id` | Scope | Consent | | ----------- | ----------------- | ----------- | ---------------------------- | | Read-only | `mcp-read-only` | `mcp:read` | None | | Full access | `mcp-full-access` | `mcp:trade` | Explicit trade-scope consent | Both are **public** clients (no client secret) and require **PKCE (S256)**. A custom client authenticates as one of these `client_id`s and completes the browser sign-in as any other agent does. Depending on how your broker set up your platform, the page that opens is either the B2Trader sign-in form or the sign-in page of the portal you normally use to access your account — your client behaves the same either way. ## Command-line agents (Codex CLI, Claude Code) [#command-line-agents-codex-cli-claude-code] Command-line MCP clients default to **Dynamic Client Registration (DCR)** — on first connect they try to register a brand-new OAuth client with the authorization server instead of using a fixed `client_id`. The B2Trader Keycloak realm does not permit anonymous DCR, so these tools must be told to use one of the pre-registered `client_id`s above: * **Codex CLI:** ```bash codex mcp add --url --oauth-client-id mcp-full-access codex mcp login ``` Use `mcp-read-only` in place of `mcp-full-access` for the read-only surface. * **Claude Code:** ```bash claude mcp add --transport http --client-id mcp-full-access --callback-port 8080 ``` Without an explicit `client_id`, both tools fall back to anonymous DCR, which the authorization server rejects — the connection fails before you reach the sign-in page. ## Redirect URIs [#redirect-uris] The pre-registered clients accept these redirect URIs: | Redirect URI | Use | | ------------------------------------------------------- | ----------------------------------------------------- | | `https://claude.ai/api/mcp/auth_callback` | Claude (claude.ai) | | `https://chatgpt.com/connector_platform_oauth_redirect` | ChatGPT | | `http://localhost:8080/*` | Claude Code — fixed callback port | | `http://127.0.0.1/*` | Codex CLI and other loopback clients — ephemeral port | If your custom agent runs locally, use one of the loopback redirects above. Most Agent SDKs and MCP client libraries (including Codex CLI) default to an ephemeral-port loopback callback on `127.0.0.1`, matching `http://127.0.0.1/*`, so no configuration change is needed. Claude Code is the exception: it needs a **fixed** callback port to match a registered redirect, so pass `--callback-port 8080` (matching `http://localhost:8080/*`) as shown above. ## Adding a custom redirect URI (broker step) [#adding-a-custom-redirect-uri-broker-step] If your agent runs on a hosted callback URL that is **not** one of the above (for example a server-side agent with its own public redirect), your broker must add that redirect URI to the pre-registered client in Keycloak before sign-in will succeed. A redirect URI that is not registered on the client fails at the sign-in step with an "Invalid redirect URI" error from Keycloak. Send your broker the exact callback URL your agent uses and which surface it needs (read-only or full access). Adding a redirect URI is a broker-side change to the MCP client registration. It requires no product change and is the documented path for onboarding custom, non-marketplace agents. ## Full access [#full-access] If your custom agent uses the full-access surface, the same [full-access safety](full-access-safety) rules apply: no per-action confirmation, irreversible actions, and the prompt-injection risk of an autonomous agent. Read that page before granting `mcp:trade`. The full-access surface (`/mcp-full-access`) lets a connected AI agent trade on your account **directly**. This page explains exactly what that means and how to stay in control. Read it before you approve the full-access consent screen. Connecting this AI agent lets it place, cancel and close orders and set triggers on your account directly, with no per-action confirmation. These actions are irreversible. This differs from the in-terminal AI chat, which confirms each trade. ## No per-action confirmation [#no-per-action-confirmation] The in-terminal **AI Assistant chat** asks you to confirm each trade before it executes. The full-access MCP surface does **not**. Once connected, the agent can place, cancel, and close orders and set price triggers on its own, as fast as it decides to — there is no confirmation dialog and no "are you sure?" step. ## Actions are irreversible [#actions-are-irreversible] Trades execute against the live market. A filled order, a closed position, or a cancelled order **cannot be undone**. If your agent makes a mistake — or is manipulated into one — the market result stands. ## Prompt-injection risk [#prompt-injection-risk] An autonomous agent acts on the text it reads. If your agent processes untrusted content — a web page, an email, a chat message, a document — that content can contain hidden instructions telling the agent to trade against your interest. This is called **prompt injection**. Because the full-access surface has no confirmation gate, a successful injection can move real money before you notice. To reduce the risk: * Prefer the **read-only** surface unless you specifically need the agent to trade. * Only grant full access to agents and workflows you trust and control. * Be cautious about letting a full-access agent read untrusted external content in the same session it can trade. ## How to stop your agent [#how-to-stop-your-agent] You have two independent controls. Use either — or both. 1. **Stop it in the agent (fastest).** Disconnect or remove the B2Trader connector in your agent (Claude, ChatGPT, or your custom client). The agent immediately stops making new calls. 2. **Revoke the grant in B2Trader.** Open your **account console** (your broker's Keycloak account page) → **Applications**, find the connected MCP application, and **revoke** its access. This removes your consent so the agent cannot obtain a new token. There is no broker-side "kill switch" that instantly voids a token already in the agent's hands. A token the agent already holds stays valid until it expires (see [Access tokens are short-lived](#access-tokens-are-short-lived)). Revoking in the account console stops **new** tokens; disconnecting in the agent stops it using the one it has. Do both to be certain. ## You still get execution notifications [#you-still-get-execution-notifications] Every order the agent places, cancels, or closes fires the **same account notifications** you already receive for terminal activity. Your normal notification channels keep working, so a full-access agent cannot act silently — watch them to see what your agent is doing. ## Access tokens are short-lived [#access-tokens-are-short-lived] The agent's access token has a **short lifetime**. If you revoke consent in the account console, the agent can finish using its current token but cannot get a new one once it expires — so a revoked grant fully lapses within the token's short window, without any forced server-side revocation. ## Choosing read-only instead [#choosing-read-only-instead] If you do not need the agent to trade, connect the **read-only** surface (`/mcp-read-only`) instead. Its tools cannot place or change anything — the trading tools are not part of that surface at all. See [Overview](overview) for the comparison. B2Trader can expose your trading account to external AI agents through the **Model Context Protocol (MCP)** — an open standard that lets AI applications such as Claude and ChatGPT call a defined set of tools on your behalf. Once you connect an agent, it can read your market data and portfolio, and — on the full-access surface — place and manage orders directly. This is different from the **in-terminal AI Assistant chat**, which runs inside the B2Trader terminal and confirms each trade with you before it executes. An external MCP agent runs in *its own* application (Claude, ChatGPT, or your own client) and connects to B2Trader over the internet using your account sign-in. Connecting an AI agent is optional — it's your choice whether to use it. The MCP surfaces are available by default, though your broker can restrict or disable them for your platform. The MCP endpoints live on the same domain you use to open your B2Trader terminal, so wherever these pages show `https:///…`, that means your terminal address — not a separate API address. If a connection URL below doesn't work, contact your broker. ## Two surfaces [#two-surfaces] B2Trader publishes **two** separate MCP endpoints. You choose one when you connect your agent. | | Read-only | Full access | | ------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | | **Endpoint path** | `/mcp-read-only` | `/mcp-full-access` | | **What the agent can do** | View market data, your portfolio, order and position history, and analytics | Everything in read-only **plus** place, cancel, and close orders and set price triggers | | **Tools exposed** | 23 | 39 | | **Trading** | None — mutating tools are not present at all | Full trading, with **no per-action confirmation** | | **OAuth scope** | `mcp:read` | `mcp:trade` | | **Consent screen** | No extra consent | Explicit trade-scope consent (see [Full-access safety](full-access-safety)) | | **Marketplace-listed** | Yes | No — connect by URL | The **read-only** surface is the one listed in AI marketplaces (for example the Claude and ChatGPT connector directories). It is safe to connect broadly: the trading tools are **structurally absent** — the agent cannot see or call them. The **full-access** surface is connected by pasting its URL directly. It grants your agent the ability to trade with no confirmation gate. Read [Full-access safety](full-access-safety) before you connect it. ## Tool categories [#tool-categories] Both surfaces expose the same read tools; the full-access surface adds the mutating ones. | Category | Read-only | Full access | | ------------------------------------------------------------------------------ | --------- | ----------- | | Market data — B2Trader platform prices (tickers, order book, market summaries) | Yes | Yes | | Portfolio & account (balances, margin, open positions) | Yes | Yes | | Order & position history | Yes | Yes | | Analytics & reference data | Yes | Yes | | Place / cancel / close orders (single) | No | Yes | | Bulk order / position actions | No | Yes | | Set & edit price triggers, other account mutations | No | Yes | | **Total tools** | **23** | **39** | The 16 tools that the full-access surface adds are the mutating actions: single trading actions, bulk trading actions, and non-trading account mutations. ## Which surface to choose [#which-surface-to-choose] * **Choose read-only** if you want an agent to analyze markets, summarize your portfolio, or answer questions about your trading history. This is the recommended default and the safest option. * **Choose full access** only if you deliberately want your agent to trade for you without confirming each action, and you understand the risks in [Full-access safety](full-access-safety). ## Prerequisites [#prerequisites] Before connecting any agent you need: * A **B2Trader account** on a platform that offers the MCP surfaces. They are available by default; a broker can restrict or disable them. * Your account must be **active** (`bbp.spot.status = Active`) — the same status required to trade in the terminal. A non-active account can sign in, but its tool calls are rejected by the platform. * An AI application that supports MCP with OAuth — for example [Claude](connect-claude), [ChatGPT](connect-chatgpt), or a [custom agent](connect-custom-agent). ## How connecting works [#how-connecting-works] You never paste an API key or password into your agent. Connection uses **OAuth 2.1 with PKCE**: 1. You add the B2Trader MCP URL to your agent. 2. The agent discovers B2Trader's authorization server automatically — it reads the endpoint's protected-resource metadata at `/.well-known/oauth-protected-resource/mcp-read-only` or `/.well-known/oauth-protected-resource/mcp-full-access`, depending on the surface. 3. Your browser opens the sign-in page for your platform, where you sign in with the credentials you normally use. 4. For the full-access surface, you approve an explicit consent screen describing what the agent may do. 5. The agent receives a short-lived access token and is connected. No long-lived secret is stored in the agent. The sign-in page you see depends on how your broker set up your platform: either the B2Trader sign-in form, or the sign-in page of the portal you normally use to access your account, which opens automatically. If you are already signed in there in the same browser, no sign-in prompt appears. The per-client steps are covered in the connection guides: * [Connect Claude](connect-claude) * [Connect ChatGPT](connect-chatgpt) * [Connect a custom agent](connect-custom-agent) * [Full-access safety](full-access-safety) ## Global interface controls [#global-interface-controls] ### Account selection [#account-selection] The **Account select** is located in the topbar and enables you to switch between your trading accounts. Each account shows its type: `H` (Hedging) or `N` (Netting). Once you switch the account, all the widgets automatically adjust to show relevant information for the selected account. Account select #### Account status [#account-status] An account can have a status that limits what you can do with it. When a status applies, a status indicator is shown on the account, and a banner explains the restriction. Account status is managed by your administrator. The following statuses are visible to you: * **Halted**: A banner reads *Account is locked for trading. Contact your administrator.* The trading controls are disabled, but you can still deposit and withdraw funds, and your balances, positions, and history stay visible. * **Frozen**: A banner reads *Account is frozen. Contact your administrator.* The account is view-only. All controls are disabled, while your balances, positions, and history stay visible. To restore trading on an account that is Halted or Frozen, contact your administrator. Archived accounts don't appear in the account list. ### Instrument selection [#instrument-selection] The **Instrument select** is located in the topbar and enables you to switch between various markets and trading pairs. Once you change the market, all the widgets automatically adjust to show relevant information for the selected instrument. Instrument select #### Favorite markets [#favorite-markets] Mark instruments as favorites for quick access. To add or remove a market from favorites, click the **star icon** next to the market name in the instrument selection list. Favorite markets can be accessed in two ways: * **Favorites tab** in the instrument selection panel — filters the list to show only your favorite markets. * **Favorites dropdown** in the topbar — provides quick access to favorite markets from anywhere in the terminal. ### Settings [#settings] Use this control to access interface and system settings. Refer to [Settings](settings) for details. Settings ### Other controls [#other-controls] * **Introduction tour**: Access the interactive platform walkthrough. Introduction tour * **Alerts**: View new system notifications. Unread alerts * **Analytics**: Open the **Account Analytics** view with the **Equity Curve** chart — your account balance and equity dynamics over time (Margin Balance, Equity, Total Equity, Unrealized PnL, Deposits / Withdrawals) for a selected period and granularity. The data updates hourly. Click **Back to Trading** to return to the terminal. Analytics * **Log out**: Log out of the system to securely terminate the session. After that you’re navigated to the Login page. Log out ## Working with widgets [#working-with-widgets] > For more information about available widgets, refer to the **Widgets** section of this guide. ### Add widgets to your workspace [#add-widgets-to-your-workspace] **To add a new widget**: 1. Click the **Add Widget** button. 2. Browse the available widgets. 3. Click any widget to add it to your workspace. Add Widget **To add widgets to existing panels**: 1. Look for the **+** button next to the tabs in a panel's header. 2. Click it to open the widget catalog. 3. Select a widget to add it as a new tab to that panel. Add widget tabs ### Move and position widgets [#move-and-position-widgets] **To move a widget**: 1. Click and hold the **move handle** in the top-right corner of the panel header. 2. Drag it to desired location on the page. 3. Drop it. Move widgets **To rearrange widget tabs within a panel**: 1. Click and hold any widget tab. 2. Drag it left or right to reorder. 3. Release to set the new position. ### Resize widgets [#resize-widgets] **To resize a widget panel**: * **Single edge**: Hover over any edge until you see the resize cursor, then drag. * **Corner resize**: Drag a corner to adjust both width and height simultaneously. * **Precision**: Use edge dragging for fine-tuned sizing. Resize widgets ### Remove widgets and tabs [#remove-widgets-and-tabs] **To remove a tab**: 1. Click the **×** button in the top-right corner of the widget tab. 2. The tab will be removed immediately. 3. When you remove the last tab from a panel, the entire panel disappears. Remove tabs and widget panels ### Link panels to a group [#link-panels-to-a-group] Each panel header has a **Link to group** button — the circle icon **next to the move handle** in the top-right corner. Linking panels to the same colored group keeps them in sync: when you select an instrument in one linked panel, the other panels in the same group switch to it automatically. **To link a panel to a group**: 1. Click the **Link to group** button (next to the move handle) in the panel's top-right corner. 2. Select one of the color groups (Group 1–5). 3. Repeat for other panels, choosing the same group to keep them synchronized. Link to group ### Customize widget content [#customize-widget-content] Certain widgets let you customize which columns to display and their order: Look for the **column settings** button in the widget header. **To customize columns**: 1. Click the **column settings** button. 2. **Show/hide columns**: Check or uncheck boxes (grayed-out columns are required). 3. **Reorder columns**: Drag and drop items in the list. 4. **Reset**: Click *Reset to default* to restore original settings. Configure columns ## Managing workspaces [#managing-workspaces] ### Create new workspaces [#create-new-workspaces] **To create a workspace**: 1. Click the **+** tab next to your existing workspaces. 2. Choose a template: * **Pre-built templates**: Start with common widget combinations. * **Empty**: Build completely from scratch. 3. Enter a name for your workspace. 4. Start customizing. Add a new workspace ### Workspace management [#workspace-management] **To rename or delete a workspace**: 1. Click the menu icon on the workspace tab. 2. Select **Rename** or **Remove**. Workspace menu **To reorder workspaces**: 1. Click and hold any workspace tab. 2. Drag it left or right to reorder. 3. Release to set the new position. ## Market info panel [#market-info-panel] Click the **info icon** next to a market symbol in widgets to view: * Detailed market information. * Trading session schedules. * Leverage details (for CFD and PF markets). * Fee details. * Funding details (for PF markets). Market info ## Pro tips [#pro-tips] ### Efficient layout building [#efficient-layout-building] * Start with a template that is close to your needs, then customize. * Group related widgets in tabs to save screen space. * Use larger panels for charts, smaller ones for order books. ### Layout best practices [#layout-best-practices] * **Save multiple workspaces** for different trading strategies. * **Test your layout** during low-activity periods. * **Keep essential widgets visible** (account info, positions, alerts). Guest mode lets you open the Trading terminal and look around without an account. You get the real interface with live market data, so you can judge the platform and its market coverage before you sign up. Everything that would move money or show someone's balance stays behind login. You do not switch Guest mode on. Open the terminal URL without a session and it loads in Guest mode on its own — there is no redirect to a login page first. On your first visit a short disclaimer appears, stating that the page is for information only and that the instruments actually available for trading are determined by current legislation. Click **OK** to dismiss it; it is remembered in your browser and does not appear again. Your broker can turn the disclaimer off. ## What you can do as a guest [#what-you-can-do-as-a-guest] * Browse the full list of instruments your broker offers, and filter, group, and search it exactly as a logged-in trader would. * Follow live prices, the [Order book](../widgets/order-book), and [Market depth](../widgets/market-depth). * Work with the [Price chart](../widgets/price-chart): change the instrument, change the timeframe, and use the chart tools. * Open the [AI Assistant](../widgets/ai-assistant) widget for market analysis. * Fill in the [Place order](../widgets/place-order) form — order type, side, quantity, price, stop loss, take profit, time in force. The fields behave the same as they do for a logged-in trader, so you can see exactly what placing an order involves. ## What needs logging in [#what-needs-logging-in] In the [Place order](../widgets/place-order) widget the order submit button is replaced by a **Log In** button. You can fill in the whole form and see the calculated figures, but there is no way to submit an order as a guest. Account-related widgets are not hidden either. Each is covered by an overlay with a padlock icon, the message *Log in to unlock all features*, and a **Log In** button, so you can see where your own data will appear once you have an account. The affected widgets are: * [Assets](../widgets/assets) * [Margin](../widgets/margin) * [Open orders](../widgets/open-orders) * [Open positions](../widgets/open-positions) * [Closed positions](../widgets/closed-positions) * [Order history](../widgets/order-history) * [Stop orders](../widgets/stop-orders) * [Messages](../widgets/messages) * [Price control](../widgets/price-control) ## Your guest workspace [#your-guest-workspace] Guest mode opens with a workspace laid out by your broker. It is the same on every visit and it is not saved: rearranging widgets as a guest does not carry over to your next visit, and it never becomes your workspace after you log in. ## Logging in from Guest mode [#logging-in-from-guest-mode] Use **Log In** in the terminal topbar, or the **Log In** button on any account widget overlay or in the Place order widget — they all do the same thing. After you log in, the terminal reloads into the full trading experience and opens your saved workspace. On a first login, when you have no saved workspace yet, it opens the default one. If you are already logged in to your broker's client portal in the same browser, the terminal detects that session on load and takes you straight into the full trading experience — no second login. ## Logging out [#logging-out] Logging out returns you to Guest mode on the same address, not to a login page, so you can keep watching the markets. Your account data is cleared from the browser first, so no balances, positions, orders, or history remain visible. Access settings by clicking the **gear icon** in the topbar of the Trading terminal. Settings Settings are organized into tabs: * [Interface](#interface): Configure language, time display, and visual theme. * [Widgets](#widgets): Customize widget display options. * [Action Confirmation](#action-confirmation): Choose which actions require additional confirmation. * [Account margin](#account-margin): Manage collateral assets for margin trading. * [Trading report](#trading-report): Generate comprehensive trading and account reports. * [API token management](#api-token-management): Generate and manage tokens for accessing the Trading API. * [TradingView Webhooks](#tradingview-webhooks): Configure TradingView webhook alerts for automated order execution. ## Interface [#interface] Configure global interface preferences: **Language** Select the interface language from the dropdown menu. **24 hour mode** * Enable: Display time in 24-hour format. * Disable: Display time in 12-hour format with AM/PM. **Dark theme** * Enable: Apply dark color scheme. * Disable: Apply light color scheme. ## Widgets [#widgets] Configure display options for the following widgets. ### Price chart [#price-chart] **Display positions** When enabled, open positions are shown on the chart along with: * Position size and current PnL. * Quick access to edit price triggers and close positions. * Color coding: Long positions (green), Short positions (red). **Display orders and triggers** When enabled, the following orders and triggers are displayed on the chart: * Active Limit and Stop orders with order type, price, and amount. * Stop loss, Take profit, and Trailing stop triggers. * Quick access to edit triggers and cancel orders. * Color coding: Buy orders (green), Sell orders (red). **Display executed orders** When enabled, executed orders are shown on the chart with order type indicators: * Green `B` tag for Buy orders. * Red `S` tag for Sell orders. Clicking `B` or `S` will open details of one or more orders that were executed during the candle interval. **Market quick trade panel** When enabled, a panel is displayed on the chart for placing Market orders with: * Quick amount selection from preset values. * Leverage ratio input (when applicable). Amount presets can be configured in the corresponding field displayed when the option is enabled. **Limit quick trade panel** When enabled, a panel is displayed on the chart for placing Limit orders with: * Quick amount selection from preset values. * Leverage ratio input (when applicable). Amount presets can be configured in the corresponding field displayed when the option is enabled. ## Action Confirmation [#action-confirmation] Choose which trading actions require an additional confirmation dialog before execution. **Cancel orders** * Enable: A confirmation dialog is displayed before canceling orders. * Disable: Orders are canceled immediately without confirmation. This setting applies to single and bulk order cancellations from the **Open Orders** widget and the **Price chart**. The confirmation dialog includes a **"Don't ask again"** checkbox. To skip the confirmation for future order cancellations, check this box. **Full Close Positions** * Enable: A confirmation dialog is displayed before closing positions. * Disable: Positions are closed immediately without confirmation. This setting applies to single and bulk position closures from the **Open Positions** widget. **Limit order cross-TOB warning** * Enable: A confirmation dialog is displayed before a Limit order is submitted if its price crosses the current top-of-book — that is, when a Buy price is at or above the best ask, or a Sell price is at or below the best bid. The dialog shows the entered price and the current best bid/ask, and includes a **Do not show this warning again** checkbox. * Disable: Crossing Limit orders are submitted immediately without the warning. The warning is enabled by default. The dialog checkbox and this toggle share the same global setting and stay in sync. The warning is informational only — it does not block the order. If you confirm, the order is submitted with the original price. The warning applies only to standard Limit orders; Stop-limit, Take-profit-limit, IOC, FOK, and other order types are not affected. If best bid or best ask data is unavailable (empty book or disconnected feed), the order is submitted without the warning. ## Account margin [#account-margin] Control which assets can be used as collateral for margin trading. ### Asset list [#asset-list] The following information is provided about each asset: **Asset** The alphabetical code of the asset. The first asset in the list is the **root asset** of the platform. *** **Caption** The asset name. *** **Available** The balance available for trading, calculated as *Total – Halted*, where *Halted* represents funds locked for pending Limit orders. *** **Total** The complete asset balance including locked funds. *** **Margin ratio** The percentage of asset value that can be used as collateral for margin trading. *** **Use as margin** Enable this toggle to use the asset as collateral for margin trading. Configure which assets can be used as collateral for margin trading by toggling the **Use as margin** setting for each asset. Only assets with **Margin ratio** greater than 0 (zero) can be enabled. The platform root asset is enabled by default and can't be disabled. ### Filtering options [#filtering-options] Click the **funnel icon** to configure the asset list display: * **Show/Hide zero balances**: Control visibility of assets with zero balance. By default, hidden. * **Show/Hide assets unused as margin**: Control visibility of assets with disabled margin usage. * **Show/Hide assets with zero margin ratio**: Control visibility of assets that can't be used as collateral. By default, hidden. ## Trading report [#trading-report] Generate comprehensive reports containing: * **Trade history** * Closed positions * Executed orders * Individual trades * **Transfers history** * All account transfers * **Account statistics** * Total balance * Realized PnL * Position swaps * Position funding * Commissions To generate a report: 1. Select a custom period of time (UTC time), or generate a report for your entire account history using the **All data** range. The following timeframe presets have been implemented for your convenience: * **Today** * **Current**: week, month, quarter * **Previous**: week, month, quarter * **All data**. 2. Click **Download**. Once generated, the report will be automatically downloaded to your computer as a zipped CSV file. ## API token management [#api-token-management] Generate tokens for accessing the [Trading API](https://api-docs.b2trader.b2broker.com/): * **Limit**: 10 tokens per account * **Validity**: 1 year * **Management**: Can be revoked or deleted at any time To generate a token: 1. Click **+ Create new**. 2. In the **New API token** popup, fill in a **Name** for the token, to help you identify it later. 3. Click **Create**. The newly generated token will be displayed and available for copying, along with its name and expiration date. The token only reveals once in the creation popup. Copy and store it securely before closing the popup. The token can't be retrieved again after closing. ## TradingView Webhooks [#tradingview-webhooks] Use TradingView Webhooks to automatically execute orders on your trading account based on alerts from TradingView. When a TradingView alert triggers, it sends a webhook request to B2TRADER, which places an order according to the parameters specified in the alert message. This feature supports all market types: Spot, CFD, and Perpetual Futures. ### Set up the webhook [#set-up-the-webhook] #### Step 1: Create a webhook API key [#step-1-create-a-webhook-api-key] To create a webhook API key in the Trading terminal: 1. Click the **gear icon** in the topbar to open Settings. 2. Navigate to the **TradingView Webhooks** tab. 3. Click **+ Create new**. 4. In the popup, fill in a **Name** for the key. 5. Click **Create**. The popup displays the generated API key and the webhook URL. Copy both values and store them securely. The API key is shown only once at creation. It can't be retrieved after closing the popup. The following limits apply: * Maximum 10 active keys per user * Each key is valid for 1 year from creation * Keys can be revoked at any time #### Step 2: Configure the alert in TradingView [#step-2-configure-the-alert-in-tradingview] 1. In TradingView, create a new alert or edit an existing one. 2. In the **Notifications** section, enable **Webhook URL**. 3. Paste the webhook URL copied from the terminal. 4. In the **Message** field, enter the alert body in JSON format (see [Alert message format](#alert-message-format)). 5. Save the alert. When the alert triggers, TradingView sends the message to B2TRADER, and the order is placed automatically. ### Alert message format [#alert-message-format] The alert message is a JSON object with the following fields: | Field | Required | Description | | ----------------- | ----------- | -------------------------------------------------------------------------- | | `apiKey` | Yes | Webhook API key generated in the terminal | | `accountId` | Yes | Trading account ID | | `symbol` | Yes | Market symbol with type prefix (see [Symbol format](#symbol-format)) | | `side` | Yes | Order side: `buy` or `sell` | | `quantity` | Yes | Order quantity in base asset | | `orderType` | No | `market` (default), `limit`, `stop`, or `stop_limit` | | `price` | Conditional | Limit price. Required for `limit` and `stop_limit` orders | | `stopPrice` | Conditional | Stop price. Required for `stop` and `stop_limit` orders | | `leverage` | No | Leverage ratio. Applicable to CFD and Perpetual Futures markets only | | `takeProfit` | No | Take profit trigger price | | `stopLoss` | No | Stop loss trigger price | | `timeInForce` | No | `gtc` (default), `ioc`, `fok`, or `day` | | `comment` | No | Custom comment, up to 256 characters | | `deduplicationId` | No | UUID for idempotency. Duplicates within 5 minutes return a cached response | #### Symbol format [#symbol-format] The symbol must include a market type prefix: | Market type | Prefix | Example | | ----------------- | ------- | --------------- | | Spot | `spot.` | `spot.btc_usdt` | | CFD | `cfd.` | `cfd.eur_usd` | | Perpetual Futures | `perp.` | `perp.btc_usdt` | #### Examples [#examples] **Market buy order (Spot):** ```json { "apiKey": "wh_key_your_api_key_here", "accountId": "your_account_id", "symbol": "spot.btc_usdt", "side": "buy", "quantity": "0.01" } ``` **Limit sell order with TP/SL (CFD):** ```json { "apiKey": "wh_key_your_api_key_here", "accountId": "your_account_id", "symbol": "cfd.eur_usd", "side": "sell", "orderType": "limit", "price": "1.0900", "quantity": "1000", "leverage": "10", "takeProfit": "1.0800", "stopLoss": "1.0950", "timeInForce": "gtc" } ``` ### Manage webhook API keys [#manage-webhook-api-keys] To view or manage your webhook API keys, navigate to **Settings** > **TradingView Webhooks**. The following information is provided about each key: | Column | Description | | ----------- | ----------------------------------------------- | | **Name** | The name assigned to the key at creation | | **Status** | Current key status: Active, Revoked, or Expired | | **Created** | The date and time the key was generated | | **Expires** | The date and time the key expires | To revoke a key, click the **Revoke** button next to the key entry. ### Rate limits [#rate-limits] Webhook requests are limited to 5 requests per second per user. If this limit is exceeded, the request returns a `429` error code and the order isn't placed. ### Troubleshooting [#troubleshooting] The following table describes common error scenarios and their solutions: | Issue | Cause | Solution | | -------------------------------- | ------------------------------------------------------------ | --------------------------------------------------- | | `Invalid API key` | The API key is incorrect or wasn't copied in full | Generate a new key and update the TradingView alert | | `API key expired` | The key has passed its 1-year validity period | Generate a new key | | `API key revoked` | The key was manually revoked | Generate a new key | | `Invalid symbol format` | The symbol is missing a market type prefix | Add the prefix: `spot.`, `cfd.`, or `perp.` | | `Price required for limit order` | A `limit` or `stop_limit` order is missing the `price` field | Add the `price` field to the alert message | | `Rate limit exceeded` | More than 5 requests were sent within 1 second | Reduce the alert frequency in TradingView | | `Account not found` | The `accountId` doesn't exist or isn't accessible | Verify the account ID in the terminal | A market can be assigned one of the following statuses: * **Open**: The market is operating properly and accepts orders via Trading terminal and API. Market data for charts is persisted. * **Paused**: The market stops accepting incoming orders via Trading terminal and API (previously placed Limit orders still await execution). Market data for charts is persisted. * **Halted**: The market stops accepting incoming orders via Trading terminal and API. All open Limit orders will be cancelled. Market data for charts is persisted. * **Disabled**: The market stops accepting incoming orders via Trading terminal and API. All open Limit orders will be cancelled. Market data for charts is not persisted. * **Archived**: The market is retired from regular operations. It doesn't accept trading activity, isn't included in market synchronization responses, and its historical chart data is deleted. ## Market and Limit orders [#market-and-limit-orders] Orders can be assigned one of the following statuses: * **Started**: The order has passed preliminary checks. * **Pending**: For Limit orders: the order is waiting for a price trigger. * **Working**: The order is being executed. * **Completed**: The order has been executed in its full amount. * **Cancelled**: The order has been cancelled by a trader. * **Rejected**: The order has been rejected by the system and has never been assigned the *Working* status. * **Expired**: The order has been cancelled due to [Time in force](time-in-force) settings. Some part of it may have already been executed. The status is applicable for GTD and Day orders only. ## Stop orders [#stop-orders] Orders can be assigned one of the following statuses: * **Waiting for activation**: The order awaits the Activation price trigger. * **Activated**: The Activation price has been reached, a new Market or Limit order has been placed. * **Rejected**: The Activation price has been reached, but an issue occurred with placing of a new Market or Limit order. The following order types are supported: * **Market**: An instruction to instantly buy or sell a certain asset amount at a currently best price on the market. Such orders are not listed in the order book. * **Limit**: An instruction to buy or sell a certain asset amount at a specified price. Limit orders are placed in the order book and executed only after the market price reaches the specified limit price (or at a better price). * **Stop Market**: Such an order is not placed unless the current market price meets a specified stop (or trigger) price, after which the order is placed as a regular Market order due to be executed or cancelled, depending on its Time in force. * **Stop Limit**: The order is similar to the Stop Market order in the sense that you need to indicate the stop price at which the order must be placed, after which it becomes a regular Limit order awaiting execution at a specified limit price. For Stop buy orders, the stop price should be above the best ask price; for Stop sell orders, the stop price should be below the best bid price (otherwise, the orders will be activated instantly). Stop Market and Stop Limit orders are accepted while a market is closed according to its trading calendar. The order is stored with the standard **Waiting for activation** status and is evaluated against the first available price when the session opens. Market and Limit orders are still rejected while the market is closed. The market's own status must still be Open — a Paused or Halted market rejects every order type. Refer to [Time in force](time-in-force) to learn about execution parameters that can be specified for different order types. When trading on CFD or Perpetual markets, the following triggers can be enabled to manage investments and mitigate risks: * **Take profit**: A take-profit order is used to sell or buy an asset automatically once it hits a predefined price, ensuring the trader locks in profits. For example, if a trader buys ETH at $2,000 and sets the Take profit at $2,100, the platform will sell the ETH automatically when the market price reaches $2100, securing the trader's profit. * **Stop loss**: A stop-loss order is a tool to limit potential losses. It automatically sells an asset when its price falls to a predetermined level. For example, if a trader buys ETH at $2,000 and sets the Stop loss at $1,900, the asset will be sold if the price drops to $1,900, capping the loss to $100 per ETH. * **Trailing stop**: A trailing-stop order allows a trader to set a Stop price that dynamically adjusts as the market price moves. It's different from a regular stop-loss order because the Stop price isn't stationary but follows the market price by a specified percentage. When the asset price moves favorably, the Stop price updates, securing potential gains. However, if the price falls, the Stop price stays fixed to protect profits or limit losses. For example, a trader buys ETH at $2,000 and sets the Trailing stop at $1900 with a 10% adjustment. If ETH rises to $2,200, the Trailing stop increases to $2,090. A drop to $2,090 triggers the sale, locking in gains. The triggers are applicable to all order types: Market, Limit, Stop Market, and Stop Limit. Multiple triggers can be applied simultaneously. The triggers can be adjusted anytime until a position is fully closed. The Take profit, Stop loss, and Trailing stop always operate with the current position volume. For **buy** orders, the triggers are activated by the top-of-the-book **bid** price. For **sell** orders, the triggers are activated by the top-of-the-book **ask** price. Triggers do not activate if a position is in the *Stop out* state. However, if the position persists after the *Stop out*, triggers can then be activated. The following time-in-force settings can be specified for orders: * **FOK** (fill-or-kill): Such orders are either filled instantly or killed (cancelled). In other words, a fill-or-kill order must be fulfilled instantly or not executed at all. FOK orders are used when partial delivery of assets isn't acceptable for any reason. * **IOC** (immediate-or-cancel): This setting implies that any part of an order that can't be filled instantly must be cancelled. Upon placing an IOC order, an attempt will be made to instantly execute it (in full or in part) at the best possible price, after which any remaining, unfilled part will be cancelled. If no amount is available at a specified price upon placing such order, it's cancelled instantly. * **GTC** (good-‘til-cancelled): The default setting applied to all limit orders. Open GTC orders are awaiting execution until they are cancelled explicitly by a trader or filled. * **GTD** (good-‘til-date): Can be applied to limit and stop limit orders. Such orders remain listed in the order book until a specified date or until they are cancelled by a trader. By that time the order can be partially executed. * **DAY**: Can be applied to limit and stop limit orders. Such orders remain listed in the order book until 23:59 of the current day or until they are cancelled by a trader. By that time the order can be partially executed. * **Retry**: Can be applied to market orders only. A Retry order aims to fill your full volume by repeatedly filling the unfilled remainder at current market prices. The average price may be worse than shown, and in thin markets a remainder may stay unfilled. The order expiration time is defined by the time settings specified for the BP, without taking into account the time settings of the devices from which the BP is accessed. ## iOS v1.35 [#ios-v135] This version includes: * **Account Analytics** A new **Account Analytics** screen displays an equity curve and detailed trading statistics for your account. Select a time period and granularity level to filter performance data, and switch between accounts using the built-in account selector. * **AI Assistant** A new **AI Assistant** widget provides AI-powered market analysis for each instrument, including trade recommendations, market sentiment, signal drivers, suggested actions, and key metrics. * **Quick order from the chart** You can now place orders directly from the **Price chart** by tapping a price pin. The **Quick Order** panel opens pre-filled at the selected price level for faster order placement. * **Customizable workspace** You can now reorder and show or hide bottom tabs in **Settings**, allowing you to tailor the terminal layout to your trading preferences. * **Adaptive interface by market type** Tabs, **Margin Level**, and perpetual funding indicators are now automatically hidden for accounts that do not have access to the corresponding market types, providing a cleaner and more focused interface. * **Landscape mode for the chart** Tapping the **Expand** button on the **Price chart** now automatically rotates the chart to landscape mode for a wider view. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.34 [#ios-v134] This version includes: * **Drag Take Profit and Stop Loss on the chart** **Take Profit** and **Stop Loss** levels can now be adjusted by dragging their lines directly on the **Price chart**. Changes are applied to the order immediately, with automatic rollback if an error occurs. * **Demo accounts** Demo trading accounts are now supported, allowing you to practice trading strategies and explore the platform without risking real funds. * **Favourite markets** You can now mark markets as favourites for quick access. Favourite markets appear as chips in the market list and are indicated with an icon in the terminal. * **Credit in margin details** A dedicated **Credit** row has been added to the margin details section, providing visibility into credit amounts allocated to your trading account. * **Comments for orders, positions, and trades** You can now add a comment when placing an order or managing a position. The comment is visible throughout the trading lifecycle — on open orders, open positions, and in trade history. * **Margin Level display** When **Margin Level** data is unavailable, the field now displays "–" instead of 0% for clearer data visibility. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.33 [#ios-v133] This version includes: * **Navigate to market from alerts** You can now open the market chart directly from the **All Alerts** screen, providing faster access to price data for monitored instruments. * **Quick market navigation from trading widgets** Tapping a market name in **Open orders**, **Stop orders**, **Order history**, **Open positions**, or **Closed positions** now switches to that market directly, enabling faster navigation between instruments. * **Hide zero balances settings relocated** The **Hide zero balances** toggle has been moved to the **Assets** tab for more intuitive access. * **Improved backend error messages** Backend error messages are now mapped to user-friendly descriptions, providing clearer feedback when issues occur. * **Improved RAT rounding** All Rate to RAT and margin-related values now display according to the root asset scale rules, ensuring consistent and accurate financial data across the app. * **Corrected Stop Market order calculations** **Value** and **Amount** calculations for **Stop Market** orders have been updated for improved accuracy. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.32 [#ios-v132] This version includes: * **Quick close button for open positions** The **Open positions** widget now features a quick **Close** button on each position card, allowing you to close individual positions with a single tap without opening position details. * **Quick cancel button for open orders** The **Open orders** widget now features a quick **Cancel** button on each order card, enabling faster order cancellation directly from the list view. * **Click-to-fill price from Order book** Tapping a price level in the **Order book** widget now automatically fills the selected price into the **Place order** form, streamlining the order placement process. * **Hide zero balances** A new **Hide zero balances** toggle has been added to the **Assets** widget, allowing you to filter out assets with zero balance for a cleaner portfolio overview. * **Deposit and transfer options** A new **Deposit** button has been added to the account screen, providing quick access to deposit and transfer options. The available actions depend on your platform configuration. * **Redesigned account selection header** The account selection section in the terminal header has been redesigned for improved navigation and a cleaner appearance. * **Updated closed positions design** The **Closed positions** widget has been updated with a refreshed layout for better readability and consistency with other trading widgets. * **Confirmation bottom sheet** Order and position actions now display a confirmation bottom sheet, helping to prevent accidental trades and providing a clearer review step before execution. * **Settings button relocated** The **Settings** button has been moved from the **Price chart** widget to the terminal header for easier access across all views. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.31 [#ios-v131] This version includes: Experience an advanced trading workflow with the introduction of our new **tiered leverage system**, offering dynamic leverage based on position size and enhanced margin visibility. This update also brings improved commission transparency with a dedicated Fees tab, enhanced market info, a new deposit shortcut, and updated screens for tiered commissions. We've also refined formatters to respect your selected app language for a more consistent experience. *** ## iOS v1.30 [#ios-v130] This version includes: * **Notifications widget** A new **Notifications** widget has been implemented providing quick access to system notifications related to price changes, Margin calls, Stop outs, Take profit and Stop loss triggers. * **Closing open positions from the Price chart** Open positions can now be closed directly on the **Price chart** screen ensuring quick reaction to volatile market conditions and efficient trade management. This feature is available if the **Display positions** setting is activated for the Price chart. * **Closing all open positions** The **Open positions** tab now features the **Close all** button that liquidates all open positions at once. This allows you to react immediately to sharp price moves, limiting losses, and removes the necessity to close positions individually. * **Canceling all active orders** The **Open orders** tab now features the **Cancel all** button allowing to close all *Pending* and *Working* orders at once. This reduces reaction time in volatile markets and removes the necessity to close orders individually. * **Market details in Place order** The market name and last price values have been added to the **Advanced** mode of the **Place order** widget. The price is updated in real time. * **Asset balance in RAT** The **Assets** list now displays **Available** and **Total** balance equivalents in RAT for better portfolio overview and value tracking. * **Simplified Markets list** The market full names have been removed from the **Markets** list for cleaner appearance. * **Trading session status** The **Trading session status** in the **Position details** is now accompanied by an info icon and an explanatory tooltip. * **Automatic horizontal scrolling for tabs** The horizontal auto scroll has been added to tabs. Active tabs are now automatically centered for optimal visibility and better accessibility to all available tabs. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.29 [#ios-v129] This version includes: * **Perpetual Futures (PF) trading now available in the app** PF trading is now supported in the app, introducing a new market type and expanding trading opportunities. To support this, the following features have been added for perpetual markets: * The **Funding**/**Countdown** information, including a countdown timer and current funding rate, helping traders stay informed about upcoming settlements. * A new **Funding** tab that displays the current funding rate, a historical chart, and detailed rate and settlement information. * **Updated account creation process** When creating a trading account in the app, the **account type** can now be selected: **Hedging** or **Netting**, enabling traders to plan and adjust their trading strategies to maximize profit or reduce risk. Depending on the platform settings, the option may be prefilled or require manual selection. The account type can’t be changed after the account is created. * **Support for Take Profit, Stop Loss, and Trailing Stop** The **Take Profit**, **Stop Loss**, and **Trailing Stop** triggers are now supported in the app for CFD and PF trading. They can be applied to Market, Limit, and Stop orders, as well as to currently open positions. * **Support for price alerts** Price alerts are now fully supported in the app: * Multiple alerts can be added to monitor different price levels for any instrument. * Configure alerts based on a fixed price or a percentage change. * View a list of all configured alerts for each instrument. * Adjust or delete existing alerts as needed. * Triggered alerts are automatically removed to keep the list up to date. * **Enhanced Price chart widget** Several visual enhancements have been added to the Price chart widget to provide greater clarity and deeper trading insights: * Active **Limit** and **Stop orders** that aren’t yet in final status are now visually represented using horizontal lines – green for buy orders and red for sell orders. This enables traders to view active orders in real time on the chart, relative to current market price movements. This feature can be turned on or off in the Price chart settings. * **Executed orders** are now visually represented using arrow icons – green for buy orders and red for sell orders. This feature is available for the **Line** and **Candles** chart display options and can also be turned on or off in the Price chart settings. * **Stop Loss** (SL) and **Take Profit** (TP) levels are now visually displayed as color-coded horizontal lines, labeled with their abbreviations. Tap on a line to reveal the exact price on the Y-axis and access the option to delete the level. * **Improved filtering** To help traders quickly find the necessary data, advanced filtering options have been added to the following widgets: **Open positions**, **Closed positions**, **Open orders**, **Stop orders**, and **Order history**. New filters include: * **Market options**, such as All Markets, Current Market, Spot, CFD, and Perpetual. * **Time period** selectors specific to each widget. * **Status** filters for the Order history widget. * **Admin-managed orders and positions** On the **Open positions**, **Closed positions**, and **Order history** widgets, if BP Admins have managed positions or orders, this is now indicated in the **Reason** field within the position or order details. Admins may manage these to assist traders upon request, address suspicious activity, mitigate risks, or resolve outstanding positions before account termination. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## iOS v1.28 [#ios-v128] This version includes: * **Performance upgrade** Streamlined top-of-the-book ask and bid prices in the Place Order widget are now received through a dedicated socket for faster obtaining and display. * **Mobile and Web Consistency** Unified colors and naming for a consistent experience across platforms. * **User experience enhancements** Placeholders are now displayed for empty fields and widgets for improved UX clarity. * **Internal improvements** Enhanced system logs for better diagnostics. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. ## Android v2.12.0 [#android-v2120] This version includes: * **AI Assistant** A new **AI Assistant** provides AI-powered market analysis for each market, including trade recommendations, a 12-month price forecast, market sentiment, signal drivers, suggested actions, and key metrics. * **Account Analytics** A new **Account Analytics** screen displays an equity curve and detailed trading statistics for your account. * **Account status indicators** Account statuses such as **Halted** and **Frozen** are now shown with badges and a warning banner, and the related trading actions are restricted accordingly. * **Quick order from the chart** You can now place orders directly from the **Price chart**, enabling faster reaction to market movements. * **Take Profit / Stop Loss on the chart** **Take Profit** and **Stop Loss** levels can now be set by dragging their lines directly on the **Price chart**, with support for trailing Stop Loss. * **Cross-price limit order warning** A warning is now displayed before you place a **Limit** order whose price crosses the top of the **Order book**. This warning can be enabled or disabled in **Settings**. * **Customizable trading terminal** You can now customize the trading terminal layout and tab order from the new **Workspace** settings. * **Adaptive interface by market type** Margin- and perpetual-related tabs and indicators are now hidden for accounts with access to **Spot** markets only, providing a cleaner interface tailored to the account type. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## Android v2.11.0 [#android-v2110] This version includes: * **Comment field in Place Order** An optional **Comment** field has been added to the **Place order** form in **Advanced Mode**. The field supports up to 100 characters and is available for all order types across Spot, CFD, and Perpetual markets. * **Full-screen chart mode** The **Price chart** widget now supports full-screen mode. Tap the **Expand** button to switch to a landscape view for a more detailed chart analysis. * **Credit information in margin details** A **Credit** row has been added to the margin section, providing visibility into credit amounts allocated to trading accounts. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## Android v2.10.0 [#android-v2100] This version includes: * **Quick close button for open positions** The **Open positions** widget now features a quick **Close** button on each position card, allowing you to close individual positions with a single tap without opening position details. * **Demo accounts** Demo trading accounts are now supported in the app, allowing you to practice trading strategies and explore the platform without risking real funds. * **Favourite markets** You can now mark markets as favourites for quick access. Favourite markets are synchronized between the web and mobile terminals. * **Click-to-fill price from Order book** Tapping a price level in the **Order book** widget now automatically fills the selected price into the **Place order** form, streamlining the order placement process. * **Hide zero balances** A new **Hide zero balances** toggle has been added to the **Assets** widget, allowing you to filter out assets with zero balance for a cleaner portfolio overview. * **Deposit and transfer options** A new **Deposit** button has been added to the account screen, providing quick access to deposit and transfer options. The available actions depend on your platform configuration. * **Navigate to market from alerts** You can now open the market chart directly from the **All Alerts** screen, providing faster access to price data for monitored instruments. * **Quick market navigation from trading widgets** Tapping a market name in **Open orders**, **Stop orders**, **Order history**, **Open positions**, or **Closed positions** now switches to that market directly, enabling faster navigation between instruments. * **Improved RAT rounding** All Rate to RAT and margin-related values now display according to the root asset scale rules, ensuring consistent and accurate financial data across the app. * **Improved market status display** The **Market Closed** label is now automatically removed once live data starts updating, providing a more accurate representation of market availability. * **Corrected Stop Market order calculations** **Value** and **Amount** calculations for **Stop Market** orders have been updated for improved accuracy. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ## Android v2.9.0 [#android-v290] This version includes: This update introduces the new **tiered leverage system**, enhanced fee transparency and fully redesigned Fees tab, quick Deposit/Trade shortcuts on account cards for faster navigation and various UI improvements across the app. *** ## Android v2.8.0 [#android-v280] This version includes: * **Asset balance in RAT** The **Assets** list now displays **Available** and **Total** balance equivalents in RAT for better portfolio overview and value tracking. * **Simplified Markets list** The market full names have been removed from the **Markets** list for cleaner appearance. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. *** ## Android v2.7.0 [#android-v270] This version includes: * **Key position parameters on the TP/SL editing** Key position parameters, such as **Name**, **Side**, **Amount**, **Open price**, **Current price**, and **Leverage** are displayed at the top of the Take Profit/Stop Loss configuration screen to give you immediate, accurate context and reduce input errors. Values are updated in real time. * **Closing positions on the Price chart** You can now close positions directly on the **Price chart** widget, by tapping a position indicator. * **Canceling all active orders** The **Open orders** widget now features the **Cancel all** button allowing to close all *Pending* and *Working* orders at once. This reduces reaction time in volatile markets and removes the necessity to close orders individually. * **Closing all open positions** The **Open positions** widget now features the **Close all** button allowing to liquidate all open positions at once. This allows you to react immediately to sharp price moves, limiting losses, and removes the necessity to close positions individually. * **Closed position details** The **Order type** and **Time in force** values are now displayed for every closed position to improve trade execution transparency. * **Price chart settings saved** The **Price chart** widget now remembers your preferred timeframe and chart type settings. Each time you open the terminal, it displays the chart with your last selected settings. * **Market details in Place order** The market name and last price values have been added to the **Advanced** mode of the **Place order** widget. The price is updated in real time. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. *** ## Android v2.6.0 [#android-v260] This version includes: * **Perpetual Futures (PF) trading now available in the app** PF trading is now supported in the app, introducing a new market type and expanding trading opportunities. To support this, the following features have been added for perpetual markets: * The **Funding/Countdown** information, including a countdown timer and current funding rate, helping traders stay informed about upcoming settlements. * A new **Funding** tab that displays the current funding rate, a historical chart, and detailed rate and settlement information. * **Improved filtering** To help traders quickly find the necessary data, advanced filtering options have been added to the following widgets: **Open positions**, **Closed positions**, **Open orders**, **Stop orders**, and **Order history**. New filters include: * **Market options**, such as All Markets, Current Market, Spot, CFD, and Perpetual. * **Time period** selectors specific to each widget. * **Status** filters for the Order History widget. * **Enhanced Price chart widget** Several visual enhancements have been added to the Price chart widget to provide greater clarity and deeper trading insights: * Active **Limit** and **Stop orders** that aren’t yet in final status are now visually represented using horizontal lines – green for buy orders and red for sell orders. This enables traders to view active orders in real time on the chart, relative to current market price movements. This feature can be turned on or off in the Price chart settings. * **Executed orders** are now visually represented using arrow icons – green for buy orders and red for sell orders. This feature is available for the **Line** and **Candles** chart display options and can also be turned on or off in the Price chart settings. * **Stop Loss** (SL) and **Take Profit** (TP) levels are now visually displayed as color-coded horizontal lines, labeled with their abbreviations. Tap on a line to reveal the exact price on the Y-axis and access the option to delete the level. * Expanded capabilities for account administration and risk management for Brokers have been added. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. *** ## Android v2.5.0 [#android-v250] This version includes: * **Stop Loss and Take Profit on the Price chart widget** * Introduction of Stop-Loss (SL) and Take-Profit (TP) lines on the Price chart for enhanced trading insights. * TP and SL are displayed as color-coded lines with only abbreviations visible. * Tap to view prices on the Y-axis and access deletion options. * **Full support for price alerts in the app** * Alerts can be set for specific price levels. * Alerts can be configured based on either a set price or a percentage change. * A list of configured alerts is available for each instrument. * Options to delete or adjust alerts are provided. * Triggered alerts are automatically removed from the list. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. *** ## Android v2.4.0 [#android-v240] This version includes: * **New mobile features** * Introduction of Take Profit, Stop Loss, and Trailing Stop functionalities in the Mobile app. * Support for Netting accounts in the Mobile app. * **Mobile and Web consistency** Unified colors and naming for a consistent experience across platforms. * **User experience enhancements** For order lists, the All/Spot/CFD filter is only displayed when there are both Spot and CFD orders, for improved UX clarity. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. ## June 10, 2026 [#june-10-2026] ### New features [#new-features] #### Guest mode [#guest-mode] A new **Guest mode** lets you explore the Trading terminal without signing in. As a guest you can browse markets and market categories, follow live price streams and interactive charts, and open the **AI Assistant** widget for market analysis. A dedicated guest workspace is provided, and the [Place order](../widgets/place-order) panel opens in the advanced view by default. A **Sign in** action is always available so you can switch to a full trading session at any time. ## June 2, 2026 [#june-2-2026] ### Improvements [#improvements] #### Full account history in Trading reports [#full-account-history-in-trading-reports] You can now generate [Trading reports](../get-started/settings) for your entire account history. The previous **92-day** limit has been removed, and a new **All data** range has been added to the report period selector alongside the existing presets. #### Stop orders during closed market sessions [#stop-orders-during-closed-market-sessions] You can now place **Stop** orders while a market is closed according to its trading schedule. The order is accepted and activates automatically once the market reopens, instead of being rejected at placement. #### More accurate unrealized PnL [#more-accurate-unrealized-pnl] Unrealized PnL is now calculated using the correct order book side for each position direction, improving the accuracy of the PnL shown across your widgets. #### Limit price crossing warning [#limit-price-crossing-warning] When you place a limit order at a price that crosses the current top of book, the terminal now shows a warning, helping you avoid an unintended immediate execution. ## April 9, 2026 [#april-9-2026] ### New features [#new-features-1] #### Trading credit [#trading-credit] Your broker can now grant you **trading credit** — a promotional bonus balance you can use for trading. Credit appears as a separate **Credit Balance** alongside your own funds and becomes available for placing trades immediately upon issuance. You are notified when credit is granted or revoked. Trading credit is a trading-only bonus and cannot be withdrawn as cash, so it is excluded from your withdrawable balance. *** ### Improvements [#improvements-1] #### Fee-aware 100% allocation [#fee-aware-100-allocation] The **100%** button in the [Place order](../widgets/place-order) widget now accounts for commissions and margin requirements when allocating funds, so the calculated amount reflects what is actually available for the trade. #### Faster price updates [#faster-price-updates] The price update frequency in terminal widgets has been increased, providing more responsive market data across your workspace. ## March 18, 2026 [#march-18-2026] ### New features [#new-features-2] #### Webhook API for TradingView alerts [#webhook-api-for-tradingview-alerts] A new **Webhook API** has been added, enabling you to connect **TradingView** alerts to your trading workflow. You can generate and copy authentication tokens directly from the Trading terminal to configure webhook-based alerts in **TradingView**. *** ### Resolved issues [#resolved-issues] There have been no customer-facing issues reported in this release. ## March 3, 2026 [#march-3-2026] ### New features [#new-features-3] #### Long-term trading data history [#long-term-trading-data-history] The three-month limit on trading data history has been removed. You can now access the full history of your orders, positions, and trades without time restrictions, enabling deeper analysis of past trading activity. #### AI Assistant widget [#ai-assistant-widget] A new **AI Assistant** widget is now available in the Trading terminal. The widget provides AI-powered market analysis for the selected instrument, including: * A recommendation gauge displaying a score from **Strong Sell** to **Strong Buy** * A 12-month price forecast with target price and percentage change * A market sentiment bar showing the bullish/bearish ratio * Signal drivers section with technical, on-chain, and sentiment factors * Suggested trading actions and key market metrics The widget can be added to any workspace like other terminal widgets. *** ### Improvements [#improvements-2] #### Updated order cancellation confirmation [#updated-order-cancellation-confirmation] The order cancellation confirmation dialog now includes a **Don't ask again** checkbox when canceling triggers from the **TradingView** chart. This allows you to skip the confirmation step for future trigger cancellations, streamlining the trading workflow. *** ### Resolved issues [#resolved-issues-1] There have been no customer-facing issues reported in this release. ## February 25, 2026 [#february-25-2026] ### New features [#new-features-4] #### Redesigned Market Depth widget [#redesigned-market-depth-widget] The [Market Depth](../widgets/market-depth) widget has been completely redesigned with an updated visual layout. Bid and ask labels are now displayed when hovering over a price level, providing better visibility into the order book at a glance. #### Redesigned widget adding experience [#redesigned-widget-adding-experience] The process of adding widgets to workspaces has been redesigned with a more intuitive and streamlined flow. The new interface makes it easier to customize your trading workspace layout by providing a clearer visual selection of available widgets. #### Order and position comments [#order-and-position-comments] A new **Comment** field has been added to orders, positions, and trades throughout the Trading terminal. You can now attach notes directly to your trading activities, making it easier to annotate trading decisions and keep records of your reasoning. #### Favorites [#favorites] You can now mark instruments as favorites for quick access across the Trading terminal. The [Favorite markets](../get-started/customizing-your-terminal#favorite-markets) feature integrates with the instrument selection panel, making it faster to locate and trade your preferred instruments. #### Multi-language support [#multi-language-support] The Trading terminal now supports additional languages: **Chinese (Simplified)**, **Spanish**, **Portuguese**, **French**, **Turkish**, and **Farsi**. Existing translations have also been updated to reflect the latest interface changes. *** ### Improvements [#improvements-3] #### Updated order calculations [#updated-order-calculations] The **Value** and **Amount** calculation logic has been improved for more accurate order handling: * For **Stop Market** orders, the estimated values are now calculated using updated formulas that align with the actual execution logic. * For **Spot** market orders, the **Slippage Rate** is now correctly applied only to buy orders and has been removed from sell order calculations. * The **Slippage Rate** attribute has been removed from **CFD** and **PF** market forms and information displays, as it is not applicable to these market types. #### Improved TP/SL trigger management [#improved-tpsl-trigger-management] Removing Take Profit and Stop Loss triggers is now easier in the TradingView charting widget. Instead of opening a dialog and unchecking the trigger, you can now click the close button directly on the trigger to remove it immediately. #### Updated default columns [#updated-default-columns] The default columns displayed in the [Open positions](../widgets/open-positions) and [Open orders](../widgets/open-orders) widgets have been updated to show the most relevant information by default, reducing the need for manual customization. #### Account margin value formatting [#account-margin-value-formatting] Account margin values such as **Balance**, **Equity**, **Margin**, and **Free margin** in the [Margin](../widgets/margin) widget are now formatted according to the **Root Asset Scale**. This ensures that numerical precision matches the asset's defined scale, eliminating misleading decimal places. #### Updated Settings experience [#updated-settings-experience] The [Settings](../get-started/settings) experience has been improved: * The **Action Confirmation** section text has been rewritten for clarity. The description now reads: "Choose which actions will require additional confirmation," making the toggle behavior immediately clear. * The **One-click trading** configuration has been updated with improved toggle controls and clearer options for enabling or disabling confirmation dialogs on trading actions. #### Improved order validation [#improved-order-validation] Order validation logic has been updated across the Trading terminal, providing clearer feedback on invalid inputs and reducing errors during order placement and management. #### Workspace tab styling [#workspace-tab-styling] Visual improvements have been applied to workspace tabs: gaps have been added between tabs for better visual separation, tab padding has been corrected, and hovered tabs now display a proper card-style fill matching the updated design system. ## December 19, 2025 [#december-19-2025] ### New features [#new-features-5] #### Volume-based tiered commissions [#volume-based-tiered-commissions] You can now benefit from **volume-based commission tiers** that automatically reduce your trading fees as your monthly volume grows. **Key points**: * **Trade more, pay less**: For markets with tiered fees, your 30‑day trading volume (in the root asset, for example USD) is tracked across all markets included in the same group. As you move into higher tiers, your commission percentage decreases. * **Clear fee overview**: Open [Market info](../get-started/customizing-your-terminal#market-info-panel) and switch to the **Fees** tab to see your **Current volume** for the month, the configured **Min. fee**, and the full **Commission tiers** table with volume ranges and fee %. A check mark highlights the tier you are currently in. * **Grouped volume**: Your traded volume is aggregated across markets to which the dynamic commission is applied. * **No surprises**: Orders on markets without tiered fees continue to use the existing flat commission model. Tiered markets simply adjust your fee according to the tier that matches your current trading volume. #### New settings [#new-settings] The [Settings](../get-started/settings) menu has been enriched with the following configuration options: * **Widgets**: This updated section now provides access to multiple widgets’ display settings. Along with existing [Price chart](../widgets/price-chart), you can now configure: * One-click trading for [Open positions](../widgets/open-positions): When enabled, single and bulk position closing are executed immediately, without going through additional confirmation dialogs. * One-click trading for [Open orders](../widgets/open-orders): When enabled, single and bulk order cancellations are executed immediately, without going through additional confirmation dialogs. * **API token management**: This new section allows you to generate and manage tokens for accessing the [Trading API](https://api-docs.b2trader.b2broker.com/). Up to 10 tokens can be generated per account. The validity period for each token is one year. The tokens can be revoked or deleted anytime. *** ### Improvements [#improvements-4] #### Responsive widget layout [#responsive-widget-layout] Widget content now adapts dynamically to the available space, ensuring that key information such as primary values, titles, and critical actions remains visible even when widgets are resized or minimized. Layouts have been refined to avoid unnecessary empty areas while preventing clipping of important elements, delivering a more readable and informative experience across all widget sizes. #### Clearer margin level display [#clearer-margin-level-display] The [Margin](../widgets/margin) widget has been updated to provide a clearer signal. Now, whenever no margin is used (for example, when you have no open positions), the **used margin** value displays **–** instead of 0%. This aligns with common brokerage practices and helps you better understand the current risk state at a glance. #### Smarter default filters for Assets and Account margin [#smarter-default-filters-for-assets-and-account-margin] Certain default filters are now applied automatically when the Trading terminal is opened for the first time. In the [Assets](../widgets/assets) widget, **Hide zero balances** is enabled by default, so assets with zero balance are not shown. In the [Account margin](../get-started/settings#account-margin) settings, **Hide zero balances** and **Hide assets with zero margin ratio** are enabled by default, hiding assets that carry no margin or balance. If you change any of these filters, the platform remembers their states. #### Improved quick trade panels [#improved-quick-trade-panels] The **Market quick trade panel** has been moved not to cover the important controls of the [Price chart](../widgets/price-chart). Additionally, it now displays the **cross icon** to quickly close the panel if needed. *** ### Resolved issues [#resolved-issues-2] There have been no customer-facing issues reported in this release. ## November 7, 2025 [#november-7-2025] ### New features [#new-features-6] #### Tiered leverage system [#tiered-leverage-system] With this release, we're excited to introduce the **tiered leverage system** that provides more sophisticated leverage options based on your position sizes, offering better risk management. **Key points:** * **Dynamic leverage tiers**: Markets can now offer tiered leverage where your maximum available leverage decreases as your position size increases. This allows you to access higher leverage on smaller positions while maintaining appropriate risk controls on larger trades. * **Enhanced market information**: Markets with tiered leverage now display comprehensive leverage information in the **Market info** panel. A new **Leverage** tab shows all available tiers, including the notional value ranges and maximum leverage for each tier. * **Improved position tracking**: Your open positions now display both the leverage you selected when opening the position (**Requested leverage**) and the actual leverage being applied (**Leverage**). Detailed tooltips explain how these values are calculated, giving you better visibility into your margin usage. * **Smart leverage selection**: When placing orders on markets with tiered leverage, the system automatically calculates your margin requirements across all applicable tiers. You can see the exact margin required before placing your order. **How it works** For markets with dynamic leverage, your position is allocated across different tiers based on its notional value. Each tier has its own maximum leverage limit, typically starting with higher leverage for smaller positions and decreasing as position size grows. This allows you to maintain appropriate risk management. **Order placement** When trading on tiered markets, you can still select your preferred leverage (up to the maximum allowed for the first tier), and the system will automatically apply the appropriate leverage limits. The margin calculator shows you the exact requirements before you place your order. All existing positions continue to operate normally with no changes to your current trading experience. Markets without tiered leverage continue to work exactly as before. *** ### Improvements [#improvements-5] #### Improved documentation experience [#improved-documentation-experience] The documentation window is now fully resizable, allowing traders to adjust both vertical and horizontal dimensions independently. All screenshots can now be zoomed, making detailed interface elements clearly visible. #### Streamlined market selection [#streamlined-market-selection] The market selection control is now displayed as the **chevron icon** directly next to the market name in widgets. The magnifying glass icon has been removed. Both the market name and chevron are now clickable and open the market selector. #### Reorganized market information access [#reorganized-market-information-access] The market info popover has been relocated under the **info icon** in the widget header to maintain accessibility while keeping the market name area focused solely on selection functionality, creating a cleaner and more consistent user interface. #### Enhanced workspace tab design [#enhanced-workspace-tab-design] A clear distinction between active and inactive workspace tabs has been achieved due to intuitive styling. Workspace option buttons are now hidden by default to reduce visual clutter and only appear when tabs are active or being hovered over. This applies to both default and custom workspace tabs, creating a cleaner interface while maintaining full functionality when needed. *** ### Resolved issues [#resolved-issues-3] There have been no customer-facing issues reported in this release. ## October 9, 2025 [#october-9-2025] ### New features [#new-features-7] #### Placing orders from the Price chart [#placing-orders-from-the-price-chart] The [Price chart](../widgets/price-chart) widget now supports direct order placement with two new quick trading panels. The **Market quick trade panel** provides a persistent interface for instant buy/sell orders, while the **Limit quick trade panel** allows hover-based order placement at specific price levels. When enabled through **Price chart settings**, both panels offer configurable amount presets and leverage ratio selection for margin trading (when applicable), creating a seamless trading experience without leaving the chart view. #### Bulk order canceling [#bulk-order-canceling] The [Open orders](../widgets/open-orders) widget introduces a **Cancel all** button that closes all active orders simultaneously. This feature provides better risk management capabilities during volatile market conditions. #### In-platform documentation [#in-platform-documentation] User documentation is now integrated directly within the Trading terminal interface. This eliminates the need to switch between applications when accessing help materials or reference guides, keeping essential information readily available during trading sessions. #### New market subtype [#new-market-subtype] The new **Commodities** subtype has been added for CFD markets, enhancing the market categorization system. *** ### Improvements [#improvements-6] #### Enhanced position tracking [#enhanced-position-tracking] A new **Direction** column has been added to **Trades** info in the [Open positions](../widgets/open-positions) and [Closed positions](../widgets/closed-positions) widgets. It indicates whether a position size increased (In) or decreased (Out) as a result of each trade. This enhancement provides clearer visibility into position movement patterns. #### Cross rates calculation precision [#cross-rates-calculation-precision] Accuracy for cross-rate calculations has been improved by introducing a new cross-rate scale parameter. It has a default value of 8 and can be adjusted in configuration files. This addresses the previous limitation where cross rates were rounded to the root asset type scale (typically 2 decimal places), causing incorrect zero values in certain scenarios. The improvement ensures accurate cross-rate calculations across all currency and cryptocurrency pairs, regardless of their relative values. #### Redesigned Settings interface [#redesigned-settings-interface] The **Settings** menu has been restructured with a new tabbed popup interface. Related configuration options are now logically grouped, making settings easier to navigate and manage. #### Pre-filled Limit order price [#pre-filled-limit-order-price] Limit order placement now includes automatic price pre-population using the best bid or ask price from the order book. This static pre-fill reduces manual entry requirements and helps prevent pricing errors during order submission. #### Updated sorting of open positions [#updated-sorting-of-open-positions] [Open positions](../widgets/open-positions) are now sorted chronologically with the newest positions displayed at the top, improving visibility of recent trading activity. #### Improved messages [#improved-messages] User communications have been updated throughout the platform, including improved Introduction tour messaging for better onboarding and clearer system notifications. #### UI enhancements [#ui-enhancements] UI improvements for this release include: * **Support for dynamic resizing of the trading interface layout**: The trading interface now features a responsive layout system that dynamically adjusts to browser window resizing. Widgets automatically scale and reposition to maintain optimal viewing regardless of screen size changes. * **Loader**: [Order history](../widgets/order-history) and [Closed positions](../widgets/closed-positions) widgets now display loading indicators when fetching additional data. * **Improved PnL representation**: When displayed on charts, the PnL values are now accompanied by "+" or "–" signs for immediate profit/loss recognition. * **Improved scrollbars**: Scrollbar positioning has been refined to prevent overlay of table content, ensuring all data remains visible and accessible. *** ### Resolved issues [#resolved-issues-4] There have been no customer-facing issues reported in this release. ## July 2, 2025 [#july-2-2025] ### New features [#new-features-8] #### Trading reports [#trading-reports] We've implemented a new feature enabling you to generate trading reports for a specific period of time and download them as zipped CSV files to your computer. The report includes a detailed information on: * **Trade history** * Closed positions * Executed orders * Trades * **Transfers history** * **Account statistics** * Total balance * Realized PnL * Swaps * Funding * Commissions The data is available for any period within the last **92 days** (UTC time). The following timeframe presets have been implemented for your convenience: * Today * Current: week, month, quarter * Previous: week, month, quarter Access the new **Trading report** menu under the **Settings** icon on the topbar of the Trading terminal. *** ### Improvements [#improvements-7] #### Admin-managed orders and positions [#admin-managed-orders-and-positions] In the [Open positions](../widgets/open-positions), [Closed positions](../widgets/closed-positions), and [Order history](../widgets/order-history) widgets, if BP Admins have managed positions or orders, this is now indicated in the Reason field within the position or order details. Admins may manage these to assist traders upon request, address suspicious activity, and mitigate risks. *** ### Resolved issues [#resolved-issues-5] There have been no customer-facing issues reported in this release. ## May 30, 2025 [#may-30-2025] ### New features [#new-features-9] #### PF trading [#pf-trading] We are excited to introduce **Perpetual Futures (PF) trading** on our platform. These contracts feature a funding fee mechanism based on the Mark price and Funding rate. A positive rate means Long positions pay Shorts, and a negative rate means the reverse. You can see the countdown to the next funding fee settlement in the [Market summary](../widgets/market-summary) widget. This update also includes a new market type — Perpetual — enhancing your trading opportunities. *** ### Improvements [#improvements-8] #### Price chart setting [#price-chart-setting] The [Price chart](../widgets/price-chart) widget now supports displaying of open positions, as well as open and executed orders. Click the **gear icon** in the topbar to access Price chart settings and enable desired options. #### Close all positions [#close-all-positions] The [Open positions](../widgets/open-positions) widget now features a new **Close all** option, offering enhanced management capabilities. This update provides a more efficient way to handle multiple positions by allowing you to simultaneously close: * All open positions * All open positions with positive PnL * All open positions with negative PnL #### Enhanced price control [#enhanced-price-control] The following enhancements have been implemented for the [Price control](../widgets/price-control) widget: * **Editable price alerts**: You can now adjust existing price alerts by clicking a price. * **Enhanced market additions**: Price and percentage fields now automatically open for editing when a new market is added to the widget. * **Visual indicators**: Arrows near price triggers aren’t shown if the price feed is unavailable, reducing clutter and potential confusion. #### Historical data limits [#historical-data-limits] The [Order history](../widgets/order-history) and [Closed positions](../widgets/closed-positions) widgets now provide historical data with a limit of **92 days**. *** ### Resolved issues [#resolved-issues-6] There have been no customer-facing issues reported in this release. ## April 17, 2025 [#april-17-2025] ### New features [#new-features-10] #### Netting account type [#netting-account-type] With this release, a new **Netting** account type has been enabled. It intelligently consolidates all orders placed on the same market into a single position. Previously, the system supported only Hedging, where each order opens a separate position. **Key points of netting** * **Reduced margin requirements**: Instead of calculating margin requirements separately for each position, netting combines them, lowering overall capital needs. * **Lower trading costs**: By holding opposing positions, traders often incur double position swaps. Netting treats these positions as one, reducing unnecessary costs. * **Streamlined position management**: Managing multiple positions manually can become complicated, especially when balancing between different trade sizes, directions, leverages and margin requirements. Netting helps with it by combining positions into a single one. **Netting VS Hedging** Netting may sometimes lack the flexibility required for complex hedging strategies. In contrast, hedging excels by allowing traders to hold both long and short positions simultaneously without offsetting them. This enhances the ability to track and adjust individual trades easily while permitting precise margin management for separate positions. The Hedging type is perfectly suited for traders seeking detailed control over their positions. On the other hand, the Netting type ensures simplicity and reduced margin requirements, making it the perfect choice for straightforward trading strategies. **Workflow changes** When opening a new trading account, you must now choose its type: either Hedging or Netting. This choice is permanent and influences all future trades in the account. In the account selection interface, each account displays its type: `H` for Hedging or `N` for Netting. All existing accounts are automatically assigned to the Hedging type. *** ### Improvements [#improvements-9] #### Improved widget control [#improved-widget-control] With this release, you now have enhanced control over the viewing experience: * **Configuring widget columns**: Certain widgets allow you to configure widget columns in a way that best suits your needs, offering you the flexibility to select which columns you wish to display or hide. Additionally, you can arrange the order of these columns for your convenience, ensuring that the information you prioritize is always at your fingertips. * **Rearranging widget tabs**: All widgets now feature drag-and-drop functionality for rearranging tabs effortlessly. This user-friendly feature offers a more customized and organized interface, making it easier than ever to personalize your widget experience. #### Enhanced Order book [#enhanced-order-book] The Order book widget has been upgraded with new customizable settings. This update introduces intuitive controls, empowering you to adjust the widget view according to your preference: * **Full view**: Shows both buy and sell orders along with the market spread. * **Buy only view**: Displays only buy orders and the market spread. * **Sell only view**: Displays only sell orders and the market spread. *** ### Resolved issues [#resolved-issues-7] There have been no customer-facing issues reported in this release. ## January 15, 2025 [#january-15-2025] ### New features [#new-features-11] #### Take profit, Stop loss, Trailing stop [#take-profit-stop-loss-trailing-stop] With this release, the following new triggers for open positions have been implemented on the platform: * **Take profit**: A take-profit trigger is used to close a position automatically once the market hits a predefined price, ensuring the trader locks in profits. * **Stop loss**: A stop-loss order is a trigger to limit potential losses. It automatically closes a position when its price changes to a predetermined level. * **Trailing stop**: A trailing-stop order allows a trader to set a Stop price that dynamically adjusts as the market price moves. It's different from a regular stop-loss order because the Stop price isn't stationary but follows the market price by a specified value. When the asset price moves favorably, the Stop price updates, securing potential gains. However, if the price falls, the Stop price stays fixed to protect profits or limit losses. These settings can be used when trading on CFD markets and can be applied to Market, Limit, and Stop orders, as well as for currently open positions. The new settings can be enabled when placing an order via the [Place order](../widgets/place-order) widget (Advanced mode). Until a position is fully closed, they can also be adjusted or canceled via the [Open positions](../widgets/open-positions) widget. The information about applied settings is also available in the corresponding widgets: [Closed positions](../widgets/closed-positions), [Open orders](../widgets/open-orders), and [Order history](../widgets/order-history). *** ### Resolved issues [#resolved-issues-8] There have been no customer-facing issues reported in this release. *** ## Past releases [#past-releases] ### December, 2024 [#december-2024] #### New features [#new-features-12] ##### CFD trading [#cfd-trading] With this release, we're excited to announce the support for CFD (Contract for Difference) trading on our brokerage platform. This empowers you to trade with dynamic leverage, using your funds as collateral to secure positions confidently. Enjoy the flexibility to go both long and short, capitalizing on both bullish and bearish markets. Our CFD trading support boasts an intuitive interface, robust risk management tools, and real-time data. ##### Innovative market approach and instrument picker [#innovative-market-approach-and-instrument-picker] * **Market type**: Markets are now classified into Spot and CFD, reflecting their differing parameters. A panel indicating CFD or Spot is now included in all widgets. * **Market parameters and trading schedule**: Click a market name to access its key parameters and scheduled trading sessions. * **Market categories**: Now accessible via the top bar, offering a hierarchical view for easier selection and switching between markets. ##### Account margin settings [#account-margin-settings] Access the new [Account margin settings](../get-started/settings) to monitor your balances and configure assets to be used as collateral for CFD trading. ##### Reworked Place order widget [#reworked-place-order-widget] Place any order with a [single widget](../widgets/place-order) now. Choose Quick IOC Market or Stop with adjusted leverage — all conveniently in one place, along with an order summary. ##### Positions [#positions] Discover two new widgets for position monitoring: * [Open positions](../widgets/open-positions): Offers real-time monitoring of currently open positions with price changes, PnL, used margin, and other parameters. * [Closed positions](../widgets/closed-positions): Provides historical data on position details, prices, and realized PnL. ##### Risk management [#risk-management] You now have three essential widgets to maintain control: * [Margin](../widgets/margin): Monitor your margin account parameters in real time and respond swiftly to changes. * [Price control](../widgets/price-control): Set price alerts tailored to your specific needs and parameters. * [Messages](../widgets/messages): Receive system notifications and price alerts directly. ##### Market data [#market-data] Two new widgets have been introduced to enhance market monitoring: * [Market summary](../widgets/market-summary): Provides detailed information and updates on price changes for a specific market. * [All markets](../widgets/all-markets): Displays price change statistics across all markets simultaneously. #### Improvements [#improvements-10] * Performance has increased significantly, allowing each trader to hold up to 1,000 CFD positions open. * Limits have been increased to 3,000 requests per second. #### Resolved issues [#resolved-issues-9] There have been no customer-facing issues reported in this release. *** ### June 20, 2024 [#june-20-2024] #### Improvements [#improvements-11] * Account selection is now available from the topbar of the Trading terminal. Once you change your account, all the widgets will automatically adjust to show relevant information for the selected account. * Tabs are now available in the Trading terminal. You can place up to 10 tabs to open multiple workspaces simultaneously for better information organization. You can utilize pre-configured layouts for your workspaces or create custom ones. *** ### June 13, 2024 [#june-13-2024] #### New features [#new-features-13] ##### iOS mobile application [#ios-mobile-application] With this release, our team is thrilled to announce the launch of the brand-new iOS mobile app. The mobile app is closely integrated with B2CORE mobile. Along with single sign-on implemented, it allows you to seamlessly navigate between the apps, without re-entering credentials. In the mobile app, just like in the web version of the Trading terminal, you can access all of your BP accounts, place orders, monitor market data, and so on. For your convenience, it all can be done in a very similar way as in the web version. A consistent and user-friendly interface makes using the app easy and intuitive. Among the key features and services that the new BP mobile offers: * The account list with detailed balances, to always keep your funds under control. Creation and renaming of accounts, to keep your funds well organized. * Asset balances screen, with the amounts of free and frozen funds specified and with the possibility to hide assets with zero balances. * The Order book and price chart, to monitor and analyze trading data and make buy or sell decisions, with a quick and easy jump to the order placing screen. * Candles and line charts, with easy switching and the possibility to scroll the data for historical values. * Limit & Market order placing, with all time in force options supported in the Web version (Market: IOC, FOK; Limit: IOC, FOK, GTC, GTD, Day). * Open and history orders lists, with easy access to order parameters and details, quick canceling or repeating an order. * Light and dark themes and many more. ### October 18, 2023 [#october-18-2023] #### New features [#new-features-14] With this initial release, our team is happy to announce the launch of our new Trading terminal. ##### Placing orders [#placing-orders] The platform currently supports placing Market, Limit, Stop Market, and Stop Limit orders (refer to [Order types](../knowledge-base/order-types)). You can also choose from various [Time in force](../knowledge-base/time-in-force) options such as FOK, IOC, GTC, GTD, and DAY. ##### Widgets [#widgets] The platform provides you with enhanced widgets that are specifically designed for convenient trading. These widgets allow you to easily place orders, access the Order book, monitor open orders and order history, and much more. Refer to [Place order](../widgets/place-order) and the other pages of the Widgets section for more information. ##### Dashboard [#dashboard] The customizable dashboard allows you to personalize the layout to suit your needs and keep you focused on what's important. Refer to [Interface overview](../get-started/customizing-your-terminal) to learn more about workspace customization. ## Summary [#summary] This widget provides AI-powered market analysis and trading recommendations for the selected market. AI Assistant The widget is organized into the following sections: * [AI Recommendation](#ai-recommendation): Overall recommendation score. * [Forecast](#forecast): Price target and market sentiment. * [Signal Drivers](#signal-drivers): Technical, on-chain, and sentiment signals. * [Suggested Actions](#suggested-actions): AI-generated trading suggestions. * [Key Metrics](#key-metrics): Market data overview. ## AI Recommendation [#ai-recommendation] Displays a numeric score from 0 to 100 representing the overall AI assessment of the market, along with a label such as **Strong Buy**, **Buy**, **Neutral**, **Sell**, or **Strong Sell**. A higher score indicates a more favorable outlook. ## Forecast [#forecast] **1Y Price Target** The forecasted price in one year and the expected percentage change from the current price. *** **Market Sentiment** A visual bar showing the ratio between bullish and bearish sentiment among market participants. ## Signal Drivers [#signal-drivers] Signals that influence the AI recommendation, categorized into three types: * **Technical**: Signals based on technical analysis indicators such as RSI and Moving Averages. * **On-Chain**: Signals based on blockchain data such as ETF inflows, active addresses, and total value locked (TVL). * **Sentiment**: Signals based on community and analyst opinions. Each signal includes a description and an impact assessment: **Bullish**, **Bearish**, or **Neutral**. ## Suggested Actions [#suggested-actions] A list of AI-generated trading suggestions based on the current market conditions. These are informational recommendations, not automated trading signals. ## Key Metrics [#key-metrics] The following market data is displayed: **All-Time High** The highest price ever recorded for the asset (in USD) and the percentage difference from the current price. *** **All-Time Low** The lowest price ever recorded for the asset (in USD) and the percentage difference from the current price. *** **24h Volume** The total trading volume over the last 24 hours in USD. *** **Market Cap** The total market capitalization of the asset in USD. ## In Guest mode [#in-guest-mode] The widget works in Guest mode too, with the same sections, so you can read the analysis for any instrument your broker offers before you have an account. AI-generated insights are for informational purposes only. The AI Assistant widget can be enabled or disabled by the platform administrator. If the widget isn't available in the **Add Widget** menu, contact your broker. ## Summary [#summary] Use this widget to monitor price data on all markets available on the platform. The widget is dynamic and is continuously updated in real time. All markets ## Fields [#fields] The following information is provided about each market: **Market** The market type (Spot, CFD, or Perpetual), market ticker and full name of the market. *** **Current price** The current market price, in the quote asset and in the platform root asset. This value is green if the price is rising and red if it's falling. *** **24h change** The price change over the last 24 hours, in absolute and percentage values. This value is calculated as *Current price* – *Price 24h ago*. This value is green if the price is rising and red if it's falling. A dash in this field means that there is no *Price 24h ago* data available. ## Summary [#summary] This widget displays the list of all asset balances on your account. Assets ## Settings [#settings] ### Hide zero balances [#hide-zero-balances] Use this option to hide all assets with zero balances from the list. It's enabled by default. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ## Fields [#fields] The following information is provided about each asset: **Asset** The alphabetical code of the asset. The first asset in the list is the **root asset** of the platform. *** **Caption** The asset name. *** **Available** The balance at your disposal, meaning the difference between your total assets and a sum of all limit orders placed by this time. This value is calculated as *Total – Halted*, where *Halted* is the asset amount frozen on the account for execution of placed Limit orders. *** **Available, \{RAT}** The available balance, in conversion to the platform root asset. *** **Total** The overall amount of the asset available in your wallet, including locked funds. *** **Total, \{RAT}** The total balance, in conversion to the platform root asset. ## Summary [#summary] This widget displays a list of your closed positions on the selected account. The entire history of your closed positions is available. Closed positions The widget lists only closed positions. For a list of currently open positions, use the [Open positions](open-positions) widget. ## Settings [#settings] ### Adjust the time period [#adjust-the-time-period] By default, the widget lists closed positions for the last three months. To display positions closed during a specific time period, use the **Select date range** field. The most recently closed positions appears at the top of the list. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ### View related orders [#view-related-orders] Click the **chevron icon** in a position row to expand a list of position-closing orders. As positions can be partially closed, there may be more than one line. For each executed position-closing order, a separate line is added. ## Fields [#fields] The following information is provided about each position: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Position ID** The position identifier. *** **Side** The position side: Buy or Sell. *** **Order type** The [order type](../knowledge-base/order-types). *** **Time in force** The [Time in force](../knowledge-base/time-in-force). *** **Pos. closed size** The closed volume, in lots, which is equivalent to the corresponding filled order volume. *** **Open price** The volume-weighted average price (VWAP) at which the position was opened. *** **Close price** The volume-weighted average price (VWAP) of trades related to a position-closing order. *** **Close order ID** The identifier of an order closing the position. *** **Realized PnL, \{RAT}** The actual profit or loss earned, in conversion to the platform root asset. For **Long** positions, this value is calculated as *Position size* × (*Close price* – *Open price*). For **Short** positions, this value is calculated as *Position size* × (*Open price* – *Close price*). *** **\{RAT} notional** The equivalent of the closed volume in the platform root asset. *** **History rate to \{RAT}** The rate to the platform root asset at the moment of position closing. *** **Reason** The reason for closing a position. Possible values: * **Trader**: The position was closed by you. * **Admin**: The position was closed by an Admin. * **Stop-out**: The position was automatically closed by the system, as a result of Stop out. * **Stop loss**: The position was closed by the [Stop loss](../knowledge-base/price-triggers) trigger. * **Take profit**: The position was closed by the [Take profit](../knowledge-base/price-triggers) trigger. * **Webhook alert**: The position was closed via a [TradingView webhook](../get-started/settings#tradingview-webhooks). *** **Comment** The text note inherited from the opening order. Up to 100 characters. The comment can't be edited after the order is placed. *** **Open date, time** The date and time when a position was opened. *** **Closed date, time** The date and time when a position-closing order was last updated (fully executed). ## Summary [#summary] This widget helps you monitor margin parameters and statistics. Margin ## Fields [#fields] All values are in displayed in conversion to the platform root asset: **Your margin level** The ratio of your funds to a used collateral, in percents. This value is calculated as *Equity* / *Used margin* × 100%. Possible values: * **Empty**: No open positions. * **Low risk**: Everything is ok. * **Margin call**: Your margin level fell below the set Margin call value. You received a notification urging you to increase the margin level to avoid a Stop out. Remember that if you ignore this warning, the margin level may continue to decrease. During the Margin call, you can only close existing positions; opening new positions isn’t possible. * **Stop out level**: Your margin level fell below the set Stop out value; the platform started a process of liquidating your positions. This process continues until the margin level exceeds this required value. **ANY** currently open position can be closed regardless of its side and volume. *** **Margin balance** The total amount of your funds that can be used as a collateral for CFD trading. It’s calculated as Σ(*TotalAmountX* × *MarginRatioX* × *Rate X/RAT*), where: * *TotalAmountX* is the the total amount of the asset X, including both available and locked funds. * *MarginRatioX* is the Margin ratio set for the asset X. * *Rate X/RAT* is the constantly updated rate of the asset X to the platform root asset. The Margin balance is continually recalculated based on price fluctuations. An increase in the prices of assets boosts available Balance & Free margin. Conversely, a decrease in asset prices may reduce the available Balance and Free margin. Additionally, a decline in the prices of assets with open positions may trigger Margin calls and Stop outs. *** **Credit** A promotional bonus granted by your broker for margin (CFD and Perpetual) trading, shown in the platform root asset (RAT). When you have no credit, this row shows 0. Credit increases your Equity and Free margin and can be used as collateral to open positions. It becomes available immediately when granted and never expires. However, credit cannot be withdrawn as cash, so it is excluded from your withdrawable balance. Your broker can revoke credit at any time, and the row updates in real time when this happens. The row includes an info tooltip that reads: *Promotional credit for margin trading only. Cannot be withdrawn.* *** **Equity** The potential balance of your account if all your positions were closed right now. This value is calculated as *Margin balance* + *Credit* + *Unrealized PnL*. *** **Used margin** The amount of funds that is used for maintaining all your open positions. Is opposed to the *Free margin*. The Used margin for positions on a specific market is calculated using the maximum value between the total margin of long positions and the total margin of short positions: MAX(*MarketPositionLong*, *MarketPositionShort*). **Example** **Step 1: Initial balance** * Margin balance: $10,000 * Opened positions: 0 * Free margin: $10,000 * Used margin: $0 **Step 2: Open a long position (Leverage 1:100)** * Market: CFD EUR/USD * Position size: 1 lot (100,000 units) * Current price: $1.001 * Required margin: $(100,000 × 1.001) / 100 = $1,001 * After opening: * Free margin: $8,999 * Used margin: $1,001 **Step 3: Open a long position (Leverage 1:20)** * Market: CFD EUR/USD * Position size: 1 lot (100,000 units) * Current price: $1.001 * Required margin: $(100,000 × 1.001) / 20 = $5,005 * After opening: * Free margin: $3,994 * Used margin: $6,006 **Step 4: Open a short position (Leverage 1:100)** * Market: CFD EUR/USD * Position size: 9 lots (900,000 units) * Current price: $1 * Required margin: $(900,000 × 1.001) / 100 = $9,009. The system verifies that upon opening this position, the MarketUsedMargin remains valid by satisfying the condition: **MarketUsedMargin** = MAX(*MarketPositionLong*, *MarketPositionShort*) = MAX(6,006, 9,009) = 9,009. Since the condition is met, the position opens. * After opening: * Free margin: $991 * Used margin: $9,009 As a result, you can open multiple opposite positions without significantly increasing the Used margin. Furthermore, closing positions never increases the Used margin. *** **Free margin** The amount of funds that can be used for opening new positions. *** **Unrealized PnL** The total potential profit or loss earned from all open positions. This value is calculated as *Σ(Unrealized PnL for Long positions + Unrealized PnL for Short positions)*, where: * *Unrealized PnL for Long positions* = *Position size* × (*Current price* – *Open price*) * *Unrealized PnL for Short positions* = *Position size* × (*Open price* – *Current price*) ## Summary [#summary] Use this widget to assess the current market depth indicating the actual liquidity of an asset, which is evaluated based on the number of currently open orders to buy and sell it as well asset prices and volumes at various price levels. Market depth The widget is dynamic and is continuously updated in real time. The widget displays a chart indicating the overall volume of buy (green) and sell (red) orders at various price levels awaiting execution at the moment. You can hover the mouse pointer over the chart to learn the exact price and volume of an asset traded at a specific price level. ## Settings [#settings] ### Select a market [#select-a-market] The current market is displayed in the widget header. To change the market, click the market symbol and select a different one from the list. ## Summary [#summary] Use this widget to monitor statistics on a specific instrument. The widget is dynamic and is continuously updated in real time. Market summary To monitor multiple instruments at a time, use the [Watch list](watch-list) widget. ## Settings [#settings] ### Select a market [#select-a-market] The current market is displayed in the first column. To change the market, click the market symbol and select a different one from the list. ## Fields [#fields] The following information is provided about each instrument: **Market** The market type (Spot, CFD, or Perpetual), market ticker and full name of the market. *** **Current price** The current top-of-the-book price, in the quote asset. *** **Current price, \{RAT}** The current top-of-the-book price, in conversion to the platform root asset. *** **24h change** The price change over the last 24 hours. This value is calculated as *Current price* – *Price 24h ago*. This value is green if the price is rising and red if it's falling. A dash in this field means that there is no *Price 24h ago* data available. *** **24h change, %** The price change over the last 24 hours, in percents. This value is calculated as ((*Current price* – *Price 24h ago*) / *Current price*) × 100. This value is green if the price is rising and red if it's falling. A dash in this field means that there is no *Price 24h ago* data available. *** **24h high** The highest trade price over the last 24 hours. This value is always green. *** **24h low** The lowest trade price over the last 24 hours. This value is always red. *** **Info icon** Click this icon to view market details and trading sessions schedule. ## Summary [#summary] This widget displays a list of received notifications, both system and configured via the [Price control](price-control) widget. Messages ## Settings [#settings] ### Mark as read [#mark-as-read] Unread alerts are marked with a red dot in the list: * Click the dot to mark the notification as read. * Click **Mark all as read** to mark all new notifications as read at once. * Click the **three dots** icon in the upper right corner of the widget to access the **Hide read notifications option**. The counter of unread alerts is also displayed on the **bell icon** in the topbar. ## Summary [#summary] This widget displays a list of Limit orders that have been placed from this specific account and are currently open and assigned one of the following [statuses](../knowledge-base/order-statuses): *Started*, *Pending*, or *Working*. Open orders The widget lists only open orders, that are currently not filled or partially filled. For a list of orders in the final statuses, use the [Order history](order-history) widget. ## Settings [#settings] ### Adjust the time period [#adjust-the-time-period] By default, the widget lists the orders for all the time. To display orders for a specific time period, use the **Select date range** field. The most recent order appears at the top of the list. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ## Fields [#fields] The following information is provided about each order: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Side** The order side: Buy or Sell. *** **Order type** The [order type](../knowledge-base/order-types). *** **Time in force** The [Time in force](../knowledge-base/time-in-force). *** **Amount** The order amount, in the base currency. *** **Filled** The order amount that has been filled so far. *** **Fee** The total commission paid for executing an order and the currency in which the commission was paid. *** **Remaining** The order amount that hasn’t yet been filled. *** **Limit price** For Limit orders, the Limit price set when placing the order. *** **Avg execution price** The order execution price, as an average price of all trades executed while filling the order. *** **Take profit** The [Take profit](../knowledge-base/price-triggers) value, if set. *** **Stop loss** The [Stop loss](../knowledge-base/price-triggers) value, if set. *** **Used leverage** For margin trading, the leverage ratio used when placing an order. *** **Status** The current order [status](../knowledge-base/order-statuses): *Started*, *Pending*, or *Working*. *** **Created at** The date and time when an order was placed. *** **Updated at** The date and time of the latest update to the order. *** **Valid until** The date and time when an order expires. *** **Order ID** The system identifier of an order. *** **Comment** The text note attached to the order when it was placed. Up to 100 characters. The comment can't be edited after the order is placed. *** **Reason** The reason for placing the order: * **Trader**: The order was placed by you. * **Admin**: The order was placed by an Admin. * **Stop-out**: The order was placed by the system, to close positions as a result of Stop out. * **Webhook alert**: The order was placed via a [TradingView webhook](../get-started/settings#tradingview-webhooks). ## Cancel orders [#cancel-orders] To cancel an order, click the **×** in the corresponding row. To cancel all active orders at once, click the **Cancel all** button in the widget header. ## Summary [#summary] This widget displays a list of your positions currently open on the selected account. Open positions The widget lists only open positions. For a list of closed positions, use the [Closed positions](closed-positions) widget. ## Settings [#settings] ### Adjust the time period [#adjust-the-time-period] By default, the widget lists open positions for all the time. To display positions opened during a specific time period, use the **Select date range** field. The most recent position appears at the top of the list. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ### View related trades [#view-related-trades] Click the **chevron icon** in a position row to expand a list of related trades. ### Close positions [#close-positions] To close a position, hover over it and click the **CLOSE** button that appears. To close all/multiple positions at once, click **Close all** and select the desired option: close all positions or close positions with positive/negative PnL. ## Fields [#fields] The following information is provided about each position: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Position ID** The position identifier. *** **Side** The position side: Buy or Sell. *** **Position size** The current position volume, in lots. *** **Open price** The volume-weighted average price (VWAP) at which the position was opened. *** **Current price** The current market price of the base asset: bid for Long positions and ask for Short positions. *** **Stop loss** The [Stop loss](../knowledge-base/price-triggers) value, if set when placing the order. If the value wasn't set, you can use the **Add** button to configure it. *** **Take profit** The [Take profit](../knowledge-base/price-triggers) value, if set when placing the order. If the value wasn't set, you can use the **Add** button to configure it. *** **Unrealized PnL, DAY, \{RAT}** The potential profit or loss earned for a current day, in conversion to the platform root asset. For **Long** positions, this value is calculated as *Position size* × (*Current bid price* – *First bid price for today*). For **Short** positions, this value is calculated as *Position size* × (*First ask price for today* – *Current ask price*). If a position was opened today, then the *Open VWAP* is used instead of the *First price for today*. *** **Unrealized PnL, DAY, %** The potential profit or loss earned for a current day, in percents. *** **Unrealized PnL, Total, \{RAT}** The potential profit or loss earned for the entire period from the moment the position was opened, in conversion to the platform root asset. For **Long** positions, this value is calculated as *Position size* × (*Current bid price* – *Open VWAP*). For **Short** positions, this value is calculated as *Position size* × (*Open VWAP* – *Current ask price*). *** **Unrealized PnL, Total, %** The potential profit or loss earned for the entire period from the moment the position was opened, in conversion to the platform root asset, in percents. *** **Used margin, \{RAT}** The amount of your funds used for maintaining a position, in conversion to the platform root asset. *** **Leverage** The actual leverage ratio used for opening a position. *** **Req. leverage** The leverage ratio you requested when opening a position. *** **\{RAT} notional** The current position size equivalent in the platform root asset. *** **Rate to \{RAT}** The current exchange rate of a quote asset to the platform root asset. *** **Open date, time** The date and time when a position was opened. *** **Updated date, time** The date and time of the latest position-related trade. *** **Reason** The reason for opening a position: * **Trader**: The position was opened by you. * **Admin**: The position was opened by an Admin. * **Webhook alert**: The position was opened via a [TradingView webhook](../get-started/settings#tradingview-webhooks). *** **Comment** The text note inherited from the opening order. Up to 100 characters. The comment can't be edited after the order is placed. ## Summary [#summary] This widget displays a list of currently open buy and sell limit orders for a selected asset along with the current bid-ask spread. Order book The widget is dynamic and is continuously updated in real time. It provides three different sections displaying the following information: * Open sell orders are highlighted in red and listed in the top section. The best ask, which is the sell order with the lowest price, is displayed at the bottom of this list. * Open buy orders are highlighted in green and listed in the bottom section. The best bid, which is the buy order with the highest price, is displayed at the top of this list. * The middle section displays the current bid-ask spread indicating the gap between the best ask and bid prices declared for an asset. ## Settings [#settings] ### Select a market [#select-a-market] The current market is displayed in the widget header. To change the market, click the market symbol and select a different one from the list. ### Display only asks/bids [#display-only-asksbids] In the upper part of the widget, you can choose how to display the Order book: * Full view. * Buy orders only + spread. * Sell orders only + spread. ## Fields [#fields] Each row of the Order book provides the following information about a selected market: **Price, \{QUOTE}** The price, in the quote asset. *** **Amount, \{BASE}** The total amount of the base asset available at a corresponding price level. *** **Total** The total amount, in the quote asset, required to fully execute the orders at a corresponding price level. In addition, you can use the [Market depth](market-depth) widget to evaluate the liquidity of a specific asset based on the overall volume of orders traded at various price levels. For Spot markets, hover over Order book rows to view additional information and buy or sell assets in click: **Average price** The average price, in the quote asset. *** **Total volume** The total amount of the base asset available at a corresponding price level. *** **Grand total** The total amount, in the quote asset, required to fully execute the orders at a corresponding price level. *** **Buy** / **Sell** Click the button to instantly place a Market order to buy or sell the asset at the selected price level. ## Summary [#summary] This widget provides up-to-date information about the orders executed on a selected market partially or in full, as well as the orders that were canceled, rejected, and expired. The entire order history of your account is available. Order history The widget lists only the orders to which final statuses are assigned. For a list of orders that are still being executed, use the [Open orders](open-orders) widget. ## Settings [#settings] ### Adjust the time period [#adjust-the-time-period] By default, the widget lists the orders with the *Completed* status for the last three months. To display orders for a specific time period, use the **Select date range** field. To display orders with specific statuses, select one or more from the dropdown above the list. The most recent order appears at the top of the list. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ## Fields [#fields] The following information is provided about each order: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Side** The order side: Buy or Sell. *** **Order type** The [order type](../knowledge-base/order-types). *** **Time in force** The [Time in force](../knowledge-base/time-in-force). *** **Amount** The order amount, in the base currency. *** **Filled** The order amount that has been filled. *** **Fee** The total commissions paid for executing an order and the currency in which the commission was paid. *** **Remaining** The order amount that wasn't filled. *** **Avg execution price** The order execution price, as an average price of all trades executed while filling the order. *** **Used leverage** For CFD trading, the leverage ratio used when placing an order. *** **Status** The current order [status](../knowledge-base/order-statuses): *Completed*, *Cancelled*, *Rejected*, or *Expired*. *** **Created at** The date and time when an order was placed. *** **Updated at** The date and time of the latest update to the order. *** **Order ID** The system identifier of an order. *** **Comment** The text note attached to the order when it was placed. Up to 100 characters. The comment can't be edited after the order is placed. *** **Reason** The reason for placing the order: * **Trader**: The order was placed by you. * **Stop-out**: The order was placed by the system, to close positions as a result of Stop out. * **Stop loss**: The order was placed by the [Stop loss](../knowledge-base/price-triggers) trigger. * **Take profit**: The order was placed by the [Take profit](../knowledge-base/price-triggers) trigger. * **Webhook alert**: The order was placed via a [TradingView webhook](../get-started/settings#tradingview-webhooks). ## Summary [#summary] Use this widget to place new orders. Place order The widget has two states: ### The PRO toggle is disabled [#the-pro-toggle-is-disabled] In this state, you can quickly place **IOC Market** and **GTC Limit** orders by selecting the order side (Buy/Sell) and type (Market/Limit), and specifying the order size (in lots) and price (for Limit orders). You can also place orders on CFD markets with the maximum leverage automatically applied. ### The PRO toggle is enabled [#the-pro-toggle-is-enabled] In this state, you get access to more precise order settings, such as: * **Stop orders** * **Time in force** * **Leverage** * **Take profit, Stop loss, Trailing stop** * **Comment** * **Complete order information** The **Comment** field allows you to attach a text note to the order (up to 100 characters). The comment is inherited by the resulting position and can't be edited after the order is placed. ## Settings [#settings] ### Select a market [#select-a-market] The market on which the order will be placed is displayed in the widget header. To change the market, click the market symbol and select a different one from the list. ### Place an order [#place-an-order] To place an order, fill in the parameters, review order details and preliminary calculated values, and then confirm the order by clicking the **Place** button. For a Limit order whose price crosses the current top-of-book — Buy at or above the best ask, or Sell at or below the best bid — the platform shows a confirmation dialog before submission. The dialog shows the entered price and the current best bid/ask, and lets you confirm or cancel the order. This warning is enabled by default; you can disable it from the dialog (**Do not show this warning again**) or from the **Limit order cross-TOB warning** toggle in [Settings](../get-started/settings#action-confirmation). ### Set price triggers [#set-price-triggers] If using **Take profit, Stop loss, Trailing stop**, set the prices in consideration of the current highest market bid/ask or a specified Limit price: These values can be adjusted any time until the position is fully closed via the [Open positions](open-positions) widget. During non-trading hours, according to the trading calendar schedule, you can place only Stop Market and Stop Limit orders. The **Place** button stays enabled when the order type is Stop and is disabled for Market and Limit. A Stop order placed outside trading hours is accepted immediately and starts watching for its stop price when the market reopens. For details, see [Stop orders](stop-orders). The order controls are disabled when the selected account is Halted or Frozen. For more information, see [Account status](../get-started/customizing-your-terminal#account-status). You will not be able to place an order if the execution of the order causes your margin level to fall below the *Margin call* level. The same conditions apply to withdrawal operations. ## Summary [#summary] This widget displays a price chart showing fluctuation of prices for a selected market over a certain time period. Price chart The horizontal axis (X-axis) represents the time scale, and the vertical axis (Y-axis) indicates the price level. ## Settings [#settings] ### Select a market [#select-a-market] The current market is displayed in the widget header. To change the market, click the market symbol and select a different one from the list. ### Customization [#customization] Multiple customization options are provided, allowing you to configure the chart according to your preferences. You can switch between bar, candle, Heikin Ashi, line, area and baseline views, as well as specify the time period for which data should be displayed. The chart supports numerous financial indicators, such as moving averages and regressions, and can feature a variety of custom shapes, including arrows and lines, pitchforks, and various ranges, allowing you to perform an in-depth market analysis. ### Display options [#display-options] The widget supports displaying of open positions, price triggers, open and executed orders. Click the **gear icon** in the topbar and access [Price chart settings](../get-started/settings#price-chart) to enable desired options. ## Placing orders [#placing-orders] ### Enable placing orders [#enable-placing-orders] To enable placing orders directly from the Price chart, you need to activate the corresponding settings: 1. Click the **gear icon** in the topbar and access [Price chart settings](../get-started/settings#price-chart). 2. Activate the **Market quick trade panel** or **Limit quick trade panel** toggle, or both. 3. If needed, adjust the amount presets. These amounts will be available for quick selection when placing an order. ### Market quick trade panel [#market-quick-trade-panel] If the corresponding setting is activated, the draggable **Market quick trade panel** is constantly displayed on the Price chart. ### Limit quick trade panel [#limit-quick-trade-panel] If the corresponding setting is activated, the **+** will appear when hovering over price levels on the chart. Clicking it will open the **Limit quick trade panel**: * in the upper half of the chart — to sell; * in the lower half of the chart — to buy. ### Place a new order [#place-a-new-order] To place a new Market or Limit order from the Price chart, when a corresponding panel is displayed: 1. Select the **amount** from configured presets. 2. Select a **leverage** ratio, if trading on CFD or PF markets. 3. Click **Buy** or **Sell**. The order will be placed according to the selected type. ## Summary [#summary] Use this widget to configure alerts that will be delivered to the [Messages](messages) widget when an instrument price reaches the specified level. Price control ## Settings [#settings] ### Configure a new alert [#configure-a-new-alert] To configure a new alert: 1. Click the **Add market** button to select a required market from the list. 2. Click the **+** icon below the instrument name to add a new alert trigger. 3. In the displayed fields, specify the exact price or the price change in percents (positive or negative). The other value will be calculated automatically. 4. Click the **check mark icon** to add the trigger. Now you will receive a notification in the [Messages](messages) widget, once the instrument price hits the specified level. You can configure multiple triggers for each instrument. ### Edit alerts [#edit-alerts] Click the price to edit the existing alert. ### Remove alerts [#remove-alerts] Click the **×** button on the trigger panel to remove it and stop receiving corresponding notifications. Click the **×** button in the instrument row to remove it from the list and stop monitoring. ## Summary [#summary] This widget displays a list of untriggered Stop orders created on the selected account. Once a market price reaches your predetermined Stop price, the Stop order is activated and submitted as either a Market or Limit order. It's then removed from this widget. You can now find it in either the [Open orders](open-orders) or [Order history](order-history) widget, depending on its current status. Stop orders ## Stop orders outside trading hours [#stop-orders-outside-trading-hours] You can place Stop Market and Stop Limit orders while a market is closed according to its trading calendar, so you can prepare an entry or a protective level before the session opens. This applies to every channel: the Trading terminal, the REST API, the FIX API, and TradingView. An order placed this way behaves as follows: * It is accepted right away and appears in this widget with the standard **Waiting for activation** status. No new status was introduced for orders placed outside trading hours. * It is validated at placement against the price and amount scales and the market minimum amount. The stop price is also checked against the best bid and ask whenever a price is available — while the market is closed there may be no live price to check it against. * No balance or margin is reserved at placement. The margin check happens when the order triggers. * It stays Waiting for activation across sessions until it triggers, you cancel it, or it expires under its [Time in force](../knowledge-base/time-in-force). A Stop order placed on Friday evening is still there on Monday, and an unexpected holiday does not cancel it. * You can view and cancel it while the market is still closed. When the session opens, the order is evaluated against the first available price. If the market gapped past your stop price while it was closed, the order triggers at the open. For an order placed while no price was available, the first incoming price is used to finalise the order's internal pricing before it can trigger, so activation can take one extra price update. If the margin check fails when the order triggers, the order is cancelled and you receive the failure reason — it is never dropped silently. Market and Limit orders are still rejected while the market is closed. Only the two Stop order types are accepted — and the market itself must still be Open: a Paused or Halted market accepts no orders at all, Stop orders included. ## Settings [#settings] ### Adjust the time period [#adjust-the-time-period] By default, the widget lists the Stop Market and Stop Limit orders for all the time. The most recent order appears at the top of the list. To display orders for a specific time period, use the **Select date range** field. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ## Fields [#fields] The following information is provided about each order: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Side** The order side: Buy or Sell. *** **Order type** The [order type](../knowledge-base/order-types): Stop Market or Stop Limit. *** **Time in force** The [Time in force](../knowledge-base/time-in-force). *** **Amount** The order amount, in the base currency. *** **Stop price** The stop price specified when creating an order. When the market reaches this price, the Stop order will be placed (as a Market or Limit order. *** **Limit price** The price of a Limit order that will be placed when the Stop price is triggered. *** **Used leverage** For CFD trading, the leverage ratio used when placing an order. *** **Created at** The date and time when an order was placed. *** **Updated at** The date and time of the latest update to the order. *** **Comment** The text note attached to the order when it was placed. Up to 100 characters. The comment can't be edited after the order is placed. *** **Order ID** The system identifier of an order. ## Summary [#summary] Use this widget to monitor statistics on multiple instruments at a time. The widget is dynamic and is continuously updated in real time. Watch list ## Settings [#settings] ### Add/remove instruments [#addremove-instruments] Click the **Add market** button to select a required market from the list. Click the **×** button in the instrument row to remove it from the list and stop monitoring. ### Configure columns [#configure-columns] Click the **Configure columns** button in the widget header to adjust the displayed information: * **Mark or unmark column checkboxes**: To display or hide them; the column checkboxes highlighted in grey can’t be unmarked. * **Drag and drop the columns**: To adjust their order in the table. ## Fields [#fields] The following information is provided about each instrument: **Market** The market type (Spot, CFD, or Perpetual) and market ticker. *** **Full name** The market full name or description. *** **Last price** The price of the last trade. *** **24h change, %** The price change over the last 24 hours, in percents. This value is calculated as ((*Current price* – *Price 24h ago*) / *Current price*) × 100. This value is green if the price is rising and red if it's falling. A dash in this field means that there is no *Price 24h ago* data available. *** **24h low** The lowest trade price over the last 24 hours. *** **24h high** The highest trade price over the last 24 hours. 欢迎使用 **B2TRANSLATE**,这是一款与 B2BROKER 产品集成的综合在线本地化工具。 该工具可帮助您高效地将产品的 Web 用户界面(WebUI)翻译成多种语言,确保您的应用程序能够面向全球用户。 B2TRANSLATE 采用清晰的层级结构来组织翻译,让复杂本地化项目的管理变得直观易懂: 1. **项目类型**:您的 B2BROKER 产品。 2. **项目**:每个产品中的独立 WebUI,例如测试和生产网站。 3. **键和翻译**:特定的 UI 元素及其本地化文本。 让我们更详细地了解各个组成部分。 ## 项目类型 [#project-types] **项目类型** 直接对应于您购买的 B2BROKER 产品。 它们会自动添加到您的 B2TRANSLATE 中。 如果您拥有多个产品,为方便起见,您可以在单个页面上访问所有产品。 每个产品可以拥有一个或多个 WebUI,例如当您有多个实例时。 在这种情况下,项目类型包含代表这些 WebUI 的不同 **项目**。 如果您需要调整项目类型,请联系您的客户经理。 ## 项目 [#projects] **项目** 是您产品的独立 WebUI。 每种项目类型都包含一个 **DEMO** 项目,其中提供完整的类别、语言和翻译集。 该项目中的键不与任何特定 WebUI 关联,仅用于演示。 虽然您无法修改 DEMO 项目中的翻译,但可以将其复制到其他项目中。 除 DEMO 外,每种项目类型还包含一个或多个“实际”项目。 这些项目与您产品的 WebUI 关联,并完全由您控制。 您可以为这些项目中的键设置和编辑翻译。 如果您需要调整项目,请联系您的客户经理。 ## 键和翻译 [#keys-and-translations] **键** 是引用特定 UI 元素的标识符。 **翻译** 是分配给这些键的各种语言的文本字符串。 例如,可以为键 `MyProject.CreateNewDeposit` 分配英文翻译“Deposit funds”,它将显示为 WebUI 中相关 UI 元素的标题。 键列表因产品而异,并且可能会随着产品版本发布而更新。 B2TRANSLATE 提供灵活的筛选器来检测新增键和空键,确保您的 WebUI 保持最新。 有关更多信息,请参阅 [筛选键](../user-guide/filter-keys)。 ### 默认翻译和自定义翻译 [#default-and-custom-translations] 每个键具有以下翻译字段: * **Source**(只读):由 B2TRANSLATE 提供的预定义英文翻译。此字段无法编辑。 * **B2TRANSLATE**(只读):由 B2TRANSLATE 提供的所选语言的预定义翻译(如果该语言不同于英语)。此字段无法编辑。 * **Custom translation**(用户可编辑):用户提供的所选语言的自定义翻译。该值初始为空,可随时编辑。有关自定义翻译的更多信息,请参阅 [添加或修改翻译](../user-guide/manage-translations/add-or-modify-translations)。 ### WebUI 中的显示逻辑 [#display-logic-in-webui] B2TRANSLATE 使用智能回退系统来显示翻译: 1. 自定义翻译(如存在) ↓(如为空) 2. 所选语言的默认翻译(如存在) ↓(如为空) 3. 源英文翻译 ↓(如被明确设为空) 4. 无翻译(空白) * **键**:`MyProject.Button.BuyNow` * **语言**:西班牙语 * **源英文翻译**:Buy Now * **默认西班牙语翻译**:Comprar Ahora * **自定义西班牙语翻译**:¡Comprar Ya! → **显示结果**:¡Comprar Ya!(自定义西班牙语翻译) *** * **键**:`MyProject.Button.BuyNow` * **语言**:西班牙语 * **源英文翻译**:Buy Now * **默认西班牙语翻译**:Comprar Ahora * **自定义西班牙语翻译**:– → **显示结果**:Comprar Ahora(默认西班牙语翻译) *** * **键**:`MyProject.Button.BuyNow` * **语言**:西班牙语 * **源英文翻译**:Buy Now * **默认西班牙语翻译**:– * **自定义西班牙语翻译**:¡Comprar Ya! → **显示结果**:¡Comprar Ya!(自定义西班牙语翻译) *** * **键**:`MyProject.Button.BuyNow` * **语言**:西班牙语 * **源英文翻译**:Buy Now * **默认西班牙语翻译**:– * **自定义西班牙语翻译**:– → **显示结果**:Buy Now(源英文翻译) ### 类别 [#categories] **类别** 代表产品的不同功能模块,用于对键进行分组。 您可以按特定类别筛选键。 每个项目都包含 **default** 类别,其中包含在整个产品中使用的键,例如错误消息或 UI 元素名称。 这些键会被翻译成英语以及购买期间选择的任何其他语言。 类别集合取决于产品,且无法编辑。 ## 主要功能 [#main-features] B2TRANSLATE 为您提供全面的工具集,以实现高效的翻译管理。 ### 进度跟踪和质量控制 [#progress-tracking-and-quality-control] * **完成情况监控**:按语言或项目跟踪翻译进度。 * **智能筛选**:即时识别新增键和缺失的翻译。 * **质量保证**:确保所有 WebUI 元素均得到完整覆盖。 ### 效率和自动化工具 [#efficiency-and-automation-tools] * **翻译复用**:在项目之间复制翻译,减少重复工作。 * **AI 驱动的翻译**:与 ChatGPT 集成,以获得自动翻译协助(请联系您的客户经理以获取访问权限)。 * **批量操作**:通过 CSV 导出/导入,支持大规模编辑工作流程。 ### 高级本地化功能 [#advanced-localization-features] * **复数形式处理**:支持复杂语法规则,确保翻译准确。 * **实时更新**:更改会立即反映在已连接的 WebUI 中。 * **协作工作流程**:适合多用户翻译项目的团队友好型界面。 ### 支持和反馈 [#support-and-feedback] * **集成反馈系统**:直接在平台内提交建议和报告问题。 * **专属支持**:联系您的客户经理以获取技术协助。 准备开始翻译了吗?探索 **用户指南**,掌握 B2TRANSLATE 的翻译管理功能。 您在 B2TRANSLATE 中的个人控制项分为两个位置: * **账户**页面,可通过侧边栏中的齿轮图标打开,您可以在此更改密码并管理个人 API 令牌。 * 侧边栏底部的控制栏,您可以在此切换界面语言、打开通知以及退出登录。 包含导航项、账户入口和底部控制项的 B2TRANSLATE 侧边栏 ## 打开账户设置 [#open-your-account-settings] 要打开账户设置,请点击侧边栏中的**账户**(齿轮图标)。随即会打开包含两个选项卡的**设置**页面: * **个人 API 令牌** — 创建和撤销用于以编程方式访问 API 的令牌。 * **更改密码** — 更新您用于登录的密码。 这些设置仅适用于您自己的账户。 ## 更改密码 [#change-your-password] ### 打开密码表单 [#open-the-password-form] 前往**账户** > **更改密码**。 ### 输入密码 [#enter-your-passwords] 输入您的**当前密码**,然后输入并确认您的**新密码**。强度指示器会显示新密码的强度。 ### 保存更改 [#save-the-change] 点击**保存**。下次登录时,您需要使用新密码。 新密码必须满足以下要求: * 至少包含八个字符 * 至少包含一个字母、一个数字和一个特殊字符 * 与当前密码不同 如果您输入的**当前密码**不正确,B2TRANSLATE 会报告错误,且不会更改密码。 设置页面上的更改密码选项卡 ## 管理个人 API 令牌 [#manage-personal-api-tokens] 个人 API 令牌是一种用于以编程方式访问 B2TRANSLATE API 的身份验证方法,适用于集成和自动化工作流。令牌会代表您执行操作,因此您无需共享登录凭据。 个人 API 令牌已从原先的个人资料菜单移至**账户** > **个人 API 令牌**。 列出现有令牌的个人 API 令牌选项卡 ### 创建令牌 [#create-a-token] ### 打开令牌选项卡 [#open-the-tokens-tab] 前往**账户** > **个人 API 令牌**,然后点击**创建令牌**。 ### 为令牌命名并设置过期时间 [#name-the-token-and-set-the-expiration] 输入一个**令牌名称**,以便您识别令牌的使用位置。使用日历设置**过期日期**,或者点击快捷选项之一 — **30 天**、**60 天**或**90 天**。 ### 复制令牌 [#copy-the-token] 点击**创建令牌**。令牌值只会显示一次。请复制并将其存储在安全的位置。 令牌值仅显示一次,之后无法再次获取。如果您丢失了它,请删除该令牌并创建一个新令牌。 创建令牌对话框,包含名称字段和过期日期 ### 撤销令牌 [#revoke-a-token] 要撤销不再需要的令牌,请在**个人 API 令牌**选项卡的列表中找到它,然后点击**删除**。使用该令牌的任何集成都会立即停止工作。 ## 查看通知 [#view-your-notifications] B2TRANSLATE 会通过侧边栏底部的通知铃铛,向您告知后台事件 — 例如已完成的 AI 翻译、已准备好的导出或已完成的导入。 * 铃铛上的红色徽章显示未读通知的数量。 * 要查看最近的通知,请点击铃铛。 * 将通知标记为已读即可清除它,或者点击**全部标记为已读**以一次性清除所有通知。 * 当通知数量超过五条时,请点击**所有通知**以打开完整历史记录。 除了应用内铃铛外,通知还可以发送至**电子邮件**、**Slack**或**Telegram**。工作区管理员会配置这些投递渠道,并选择每种事件的接收者。 从侧边栏铃铛打开的通知面板 ## 更改界面语言 [#change-the-interface-language] B2TRANSLATE 提供多种语言。要更改界面语言,请点击侧边栏左下角的语言选择器(地球图标),然后从列表中选择一种语言。您的选择会保存,并在下次登录时继续生效。 ## 退出登录 [#sign-out] 要退出登录,请点击侧边栏底部的退出图标。B2TRANSLATE 会结束您的会话并返回**登录**页面。 购买的产品设置完成后,您将收到用于登录 B2TRANSLATE 的凭据。 要访问您的 B2TRANSLATE 账户,请前往 **登录** 页面,输入您的电子邮件地址和密码,然后点击 **登录**。 如果您忘记了密码,请点击 **忘记密码?** 链接并按照说明操作。 **双重身份验证 (2FA)** 出于安全考虑,所有 B2TRANSLATE 账户都必须使用身份验证器应用生成的代码进行 2FA 验证。 * 如果您的 B2TRANSLATE 账户已启用 2FA,请输入来自应用的 2FA 代码以完成登录流程,例如 **Google Authenticator** 或 **Twilio Authy**。 * 如果您的账户尚未启用 2FA,系统将在登录期间提示您进行设置。请按照屏幕上的说明在手机上安装身份验证器应用,并将其设置为生成用于 B2TRANSLATE 的 2FA 代码。 要筛选键,请在 **Translations** 页面中点击页面右上角的 **Filters** 按钮。 筛选条件 您可以按以下参数筛选键: **筛选方式** 选择以下选项之一: * **空键**:筛选已保存空翻译的键。对于此类键,WebUI 中会显示空字符串。 * **无翻译**:筛选没有自定义翻译的键。对于此类键,WebUI 中会显示默认翻译。 * **过去 2 周内的新键**:筛选在过去 2 周内添加的键。 * **过去 4 周内的新键**:筛选在过去 4 周内添加的键。 *** **创建时间范围** 选择一个日期范围,以筛选在该时间段内添加的键。 *** **更新时间范围** 选择一个日期范围,以筛选在该时间段内修改的键。 *** **类别** 选择一个类别,以筛选其中包含的键。 *** **键** 输入键标识符或关键词,以筛选标识符匹配的键。 *** **源文本** 输入翻译文本或关键词,以筛选默认英文翻译匹配的键。 *** **自定义翻译** 输入翻译文本或关键词,以筛选自定义翻译匹配的键。 *** 点击 **Apply** 以筛选键。 要重置筛选条件,请点击 **Clear all**。 应用筛选条件 在此页面上,您可以查看项目可用的语言列表。 Languages 查看每种语言的以下信息: **语言** 语言的名称。 *** **代码** 根据 ISO 639-1 标准的语言双字母代码。 *** **项目** 已添加并使用该语言的项目数量。 ## 项目列表 [#project-list] 在此页面上,您可以查看项目列表。 项目按项目类型分组,并以标签页形式显示在项目列表上方。 Projects 以下是每个项目提供的信息: **名称** 项目名称。 点击名称可导航至项目类别列表。 *** **语言** 项目中可用的语言数量。 *** **所有密钥** 项目中的密钥总数,包括已翻译和未翻译的密钥。 *** **UUID** 项目的系统标识符,采用 UUID 格式。 *** **操作** 点击项目行中的**三个点**,即可访问[下载和上传翻译](manage-translations/download-and-upload-translations)功能。 ## 翻译 [#translations] 要打开项目的翻译视图,请在项目列表中点击其名称。 Keys and translations ### 可用控件 [#available-controls] 在表格上方,您可以找到: * **环境**下拉菜单:对于 *Customer* 角色,仅可使用 `production`。 * **语言**下拉菜单:使用它可在您的项目可用语言之间快速切换。 * **快速搜索**字段:点击**放大镜图标**,可按标识符或翻译内容搜索密钥。 * **筛选器**按钮:点击它可打开筛选面板。有关详细信息,请参阅[筛选密钥](filter-keys)。 对于某些项目类型,表格上方会显示平台,例如 *Web*、*iOS*、*Android* 等。 在页面右上角,您可以找到: * **导入密钥**按钮:使用它可[从另一个项目复制翻译](manage-translations/copy-translations)。 * **上传 CSV**按钮:使用它可[将翻译作为 CSV 文件上传](manage-translations/download-and-upload-translations)。 * **设置**按钮:使用它可选择翻译视图中显示哪些语言(**语言**)及其显示顺序(**语言顺序**)。 页面底部提供分页控件和**行数**选择器。 ### 翻译表格 [#translations-table] 表格中的每一行代表一个密钥及其翻译: **密钥** * **类别**徽章。 * **密钥标识符**。 * **复制**按钮,用于快速将密钥标识符复制到剪贴板。 * **创建时间** / **更新时间**信息:密钥创建日期;或者,在其**自定义翻译**被编辑后,最后修改日期。 Key *** **翻译** * **源语言**:预定义的英文翻译。此列为只读,可帮助您理解密钥的含义和上下文。 * **B2TRANSLATE**:预定义的所选语言翻译(若其不同于英语)。此列为只读。 * **自定义翻译**:所选语言的自定义翻译。此字段最初为空,且可随时编辑。对于包含复数形式的密钥,此值会显示[Other 形式](manage-translations/handle-plural-forms#the-other-form)。 每一列都会显示带有相应语言代码的徽章。 请参阅[WebUI 中的显示逻辑](../get-started/introduction-to-b2translate#display-logic-in-webui),以了解翻译优先级。 有关管理翻译的分步说明,请参阅本指南中的[管理翻译](manage-translations)部分。 Translations *** **操作** * **使用 AI 翻译**:使用 ChatGPT 将源英文翻译为所选语言。有关详细信息,请参阅[使用 AI 翻译](manage-translations/translate-with-ai)。 * **重置为源翻译**:将自定义翻译恢复为预定义翻译——恢复为所选语言(如果提供了该语言的默认翻译)或英语。 * **保存为空**:明确将此密钥的翻译设置为空。 * **显示历史记录**:查看翻译的更改历史记录。 保存明确为空的自定义翻译会导致 WebUI 中不显示任何文本。 请谨慎使用此选项,并仅在确实需要此行为时使用。 Actions *** **详细信息** 点击**三个点**以打开详细信息: * **信息**标签:适用于所有密钥,包含有关自定义翻译何时添加及最后修改时间的信息。 * **复数形式**标签:适用于包含复数形式的密钥。请参阅[处理复数形式](manage-translations/handle-plural-forms),了解如何根据所选语言的语法要求正确配置依赖数量的内容。 Details On this page, you can view a full list of bonuses credited to clients, monitor bonus statuses, and manually credit bonuses to clients as needed. For details of the process of awarding bonuses to clients, refer to [Introduction to bonuses](./#introduction-to-bonuses). ## General information [#general-information] The following information is provided about each bonus: **ID** The bonus identifier. *** **Client ID** The client identifier. *** **Client name** The client’s name. *** **Client email** The client’s email address. *** **Tags** The tags assigned to a client, which are used to sort the client list displayed to [Back Office administrators](../system/users/users). *** **Account** The number of a trading account to which a bonus is credited. *** **Current amount** The current bonus amount. *** **Initial amount** The initial bonus amount. *** **Bonus name** The bonus name, displayed to a client in the B2CORE UI. For temporary bonuses, the default name is the name of a temporary bonus program from which a bonus was claimed. To display a different name in the B2CORE UI, enter the desired name in the **Caption** field within the [bonus details](#details). For manually credited bonuses, the bonus name is the value specified in the **Caption** field when [manually adding bonuses to clients](../../how-to-articles/manage-bonuses/how-to-manually-credit-bonuses-to-clients). *** **State** The bonus status: * `Queued` — a bonus was awarded to a client trading account, but hasn’t yet been added to the account as credit. * `Pending` — a bonus was added to a client trading account as credit, and the required volume that must be traded by the client was calculated. * `Processing` — a bonus is currently being processed for burning. * `Completed` — bonus requirements were successfully met, indicating that the required volume was achieved by the client within the specified number of days, and the bonus credit has been received on the account balance. * `On completing` — the bonus credit is being added to the account balance. * `Expired` — bonus requirements weren’t met, resulting in the bonus credit being revoked from the account. * `Error` — an error occurred while processing a bonus. *** **Created by** The email address and ID of a Back Office user who created a bonus for a client. Clicking the ID opens the profile of the respective Back Office user. *** **Created at** The date and time when a bonus was credited to a client trading account. To view bonus details, click view-button (**View**). If any transaction related to crediting or deducting a specific bonus on the client's trading account fails, the respective bonus row is highlighted, and the **exclamation** icon appears next to the **View** button. You can view the bonus transaction history on the [Bonus transactions tab](#bonus-transactions) in the bonus details. *** **Expired at** The date and time when a credited bonus is scheduled to expire or has already expired. ## Details [#details] The details page is divided into two tabs: * [Bonus details](#bonus-details) * [Bonus transactions](#bonus-transactions) ### Bonus details [#bonus-details] On the details tab, you can view the bonus setting and requirements that a client must meet to receive a bonus credit on their account balance. Additionally, you can reactivate bonuses that have the `Expired` status and revoke bonuses with the `Pending` status. To do this, click the **Actions** button in the upper-right page corner and select the appropriate option in the dropdown. The following information is provided on the tab: **Created at** The date and time when a bonus was credited to a client trading account. *** **Amount** The bonus amount. *** **State** The bonus status. *** **Volume closed** The volume of closed positions counted towards the required volume that a client must achieve to receive a bonus credit on their account balance. *** **Temporary Bonus**\ *Applicable for temporary bonuses only* The name of a temporary bonus program from which a bonus was claimed. *** **Activated at** The date and time when a bonus amount was added to a client trading account as credit. *** **Client** The client’s email address. *** **Account** The number of a trading account to which a bonus was credited. *** **Fictive Volume** This field is used for reactivation of the expired bonus. *** **Caption** The bonus name, displayed to a client in the B2CORE UI. If this field is empty: * For temporary bonuses, the name of a temporary bonus program from which a bonus was claimed will be displayed to the client in the B2CORE UI. * For manually credited bonuses, the name of the platform associated with the account receiving a bonus will be displayed to the client in the B2CORE UI. *** **Lifetime (days)** The number of days to fulfill the bonus requirements. After the bonus amount is added to a client trading account as credit, the client must trade the required volume within the specified number of days to receive the bonus credit on the account balance. *** **Lot per unit** The ratio applied to the bonus amount to determine the volume that must be traded by a client to receive the bonus credit on their account balance: `Required volume = Bonus amount / Lot per unit` Suppose that the bonus amount is 100 USD and the **Lot per unit** option is set to 2. In order to receive the bonus credit of 100 USD to their account balance, a client must trade the following volume: `100 / 2 = 50 lots`. *** **Set credit immediately** * If **Enabled**, when a client claims bonuses from multiple programs at a time using the same trading account, all claimed bonuses are immediately added to their account as credit, enabling the client to use credit funds for trading. * If **Disabled**, when a client claims bonuses from multiple programs at a time using the same trading account, the claimed bonuses are added to their account one after another. Only after the first claimed bonus is processed and assigned the final status (`Completed` or `Expired`), the second claimed bonus is added to the client trading account as credit, and so on. *** **Ignored open/close interval (sec)** The minimum duration, in seconds, for which a client must keep a position open for it to be counted towards the traded volume of the bonus program. *** **Autoenable trading if balance > 0** When the account balance changes from zero or negative to positive, the permission named `Trade Enabled` is either automatically restored for the account or not, depending on this setting: * If **Enabled**, when the account balance becomes positive, the `Trade Enabled` permission is automatically restored, enabling the client to resume trading on their account, including the use of the bonus credit. * If **Disabled**, when the account balance becomes positive, the `Trade Enabled` permission isn’t automatically restored. *** **Ignored symbol groups** One or more symbol groups in which trades aren't counted towards the traded volume of the bonus program. For cTrader, individual symbols must be selected in this field instead of symbol groups, even though symbol groups are available on the cTrader platform. This field is optional and can be empty. ### Bonus transactions [#bonus-transactions] On the transactions tab, you can view the history of transactions related to crediting or deducting a specific bonus on the client's trading account, check their statuses, and retry failed transactions if necessary. For failed transactions with the `Error` status, retry button (**Retry**) is displayed. Click the button to attempt processing the transaction again. The **Retry** button is available only to the Back Office users who are assigned the [permission](../system/users/groups) to `Retry bonus operation`. If you don't have this permission, the button will be hidden. To update the transaction information displayed on the tab, click refresh button (**Refresh**) displayed in the upper-right corner. The following information is provided on the tab: **Operation ID** The identifier assigned to the bonus transaction. *** **Oder ID** The identifier of the order associated with the bonus transaction, if applicable. *** **Amount** The bonus amount. *** **Status** The transaction status: * `New` — the transaction has been initiated. * `In progress` — the transaction is being processed. The `New` and `In progress` statuses are intermediate and appear only for a very brief moment. * `Success` — the transaction was successfully executed. * `Error` — the transaction failed due to an issue. *** **Num of attempts** The number of attempts made to execute the transaction. *** **Last attempt date** The date and time of the most recent attempt to process the transaction. *** **Comment** A description identifying the transaction: * **Credit accrued** — the bonus amount is added to the client’s trading account as credit. * **Credit cleared** — the credited bonus is deducted from the account once the bonus requirements have been met. This occurs just before adding the bonus amount to the account balance. * **Balance accrued** — the credited bonus is added to the account balance after the bonus requirements have been met. * **Credit expired** — the credited bonus has expired and is deducted from the account. * **Bonus cancelled** — the credited bonus is revoked when funds are withdrawn from the account. *** **Error message** For transactions with the `Error` status, this field displays details about the error. *** **Creation date** The date and time when the transaction was initiated. **See also** [How to manually credit bonuses to clients](../../how-to-articles/manage-bonuses/how-to-manually-credit-bonuses-to-clients) [How to automatically credit bonuses to clients upon deposits](../../how-to-articles/manage-bonuses/how-to-automatically-credit-bonuses-to-clients-upon-deposits) On this page, you can manage existing bonus presets and create new ones. **Bonus presets** include pre-configured settings that streamline bonus configuration in the following scenarios: * for temporary bonus programs, eliminating the need to manually specify all bonus program settings (for details, refer to [How to create a temporary bonus program](../../how-to-articles/manage-bonuses/how-to-create-a-temporary-bonus-program)) * for manual bonuses when the admin awards bonuses to clients on the [Bonus distribution](bonus-distribution) page (for details, refer to [How to manually credit bonuses to clients](../../how-to-articles/manage-bonuses/how-to-manually-credit-bonuses-to-clients)) * for the automatic process of crediting bonuses to clients upon deposits (for details, refer to [How to automatically credit bonuses to clients upon deposits](../../how-to-articles/manage-bonuses/how-to-automatically-credit-bonuses-to-clients-upon-deposits)) ## General information [#general-information] The following information is provided about each preset: **ID** The identifier of a bonus preset. *** **Platform** The [trading platform](../products/platforms) to which a bonus preset can be applied. *** **Name** The name of a bonus preset. *** **Priority** The priority index assigned to the bonus preset. Multiple presets can be created for each trading platform that supports bonuses, such as **MT4/5** and **cTrader**. The preset with **lowest** index, created for a specific platform, will be used for automatic crediting of bonuses to clients upon deposits. *** **Lifetime** The number of days within which a client must fulfill the bonus requirements. After a bonus amount is added to a client trading account as credit, the client must trade the required volume within the specified number of days to receive the bonus credit on the account balance. *** **Lot per unit** The ratio applied to a bonus amount to determine the volume that must be traded by a client to receive the bonus credit on their account balance: `Required volume = Bonus amount / Lot per unit` Suppose that the bonus amount is 100 USD and the **Lot per unit** option is set to 2. In order to receive the bonus of 100 USD on their account balance, a client must trade the following volume: `100 / 2 = 50 lots`. *** **Set credit immediately** * If **Enabled**, when a client claims bonuses from multiple programs at a time using the same trading account, all claimed bonuses are immediately added to their account as credit, enabling the client to use credit funds for trading. * If **Disabled**, when a client claims bonuses from multiple programs at a time using the same trading account, the claimed bonuses are added to their account one after another. Only after the first claimed bonus is processed and assigned the final status (`Completed` or `Expired`), the second claimed bonus is added to the client trading account as credit, and so on. *** **Ignored open/close interval** The minimum duration, in seconds, for which clients must keep positions open for them to be counted towards the traded volume. *** **Ignored symbol groups** One or more symbol groups in which trades aren't counted towards the traded volume. For cTrader, individual symbols must be selected in this field instead of symbol groups, even though symbol groups are available on the cTrader platform. This field is optional and can be empty. *** **Autoenable trading if balance > 0** When the account balance changes from zero or negative to positive, the permission named `Trade Enabled` is either automatically restored for the account or not, depending on this setting: * If `Enabled`, when the account balance becomes positive, the `Trade Enabled` permission is automatically restored, enabling the client to resume trading on their account, including the use of the bonus credit. * If `Disabled`, when the account balance becomes positive, the `Trade Enabled` permission isn’t automatically restored. ## Details [#details] On the details page, you can modify parameters of a selected bonus preset and apply restrictions to it. To apply restrictions, click the **Actions** button in the upper-right page corner. The following types of restrictions can be applied to the bonus preset, either individually or in combination: * **Country restrictions** — to make the preset available only to client from specific countries. * **Client type restrictions** — to make the preset available only to clients of selected types, such as Corporate or Individual. * **Verification level restrictions** — to make the program available only to clients with specific verification levels. * **Jurisdiction restrictions** — to make the preset available only to clients under selected jurisdictions. * **Introducing broker restrictions** — to make the preset available only to clients who are referrals of the specified IBs. * **Product restrictions** — to make the preset available for use only with specific [products](../products/products). For example, you can use this restriction to prevent a preset from being applied to products that manage cent trading accounts. If the preset is used for automatic bonuses upon deposits, these bonuses won’t be credited to cent accounts. However, the preset can still be applied to other products that meet the restriction criteria. If a client or product doesn't meet the restriction criteria, the preset can't be used to credit bonuses. This also applies to the [automatic process of crediting bonuses upon deposits](../../how-to-articles/manage-bonuses/how-to-automatically-credit-bonuses-to-clients-upon-deposits) if the preset is used for automatic bonuses. **See also** [How to create a bonus preset](../../how-to-articles/manage-bonuses/how-to-create-a-bonus-preset) ## Introduction to bonuses [#introduction-to-bonuses] Bonuses offer additional financial incentives and benefits to clients actively involved in trading. They can also serve as a tool for attracting new clients, retain existing ones, or encouraging trading using specific instruments. Bonuses are supported for **MetaTrader 4/5** and **cTrader**. The process of awarding bonuses to clients involves two steps: 1. Initially, a bonus amount is added to a client trading account as credit funds. These credit funds increase the client’s trading capital, allowing the client to trade on the account with positions of larger sizes. 2. The ultimate goal for the client is to convert the bonus amount from credit funds to their account balance, which represents real funds that can be withdrawn from the account. To achieve this, the client must fulfill specific bonus requirements and trade the required volume within a specified period. If the client fails to meet the bonus requirements, the bonus credit is revoked from the client account. On this page, you can view a list of created temporary bonus programs and create new ones. **Temporary bonus programs** are time-limited offers that are displayed to clients on the **Bonuses** page in the B2CORE UI, where clients can claim bonuses from desired programs. For details of the process of awarding bonuses to clients, refer to [Introduction to bonuses](./#introduction-to-bonuses). ## General information [#general-information] The following information is provided about each temporary bonus program: **ID** The bonus program identifier. *** **Name** The bonus program name displayed to clients in the B2CORE UI. *** **Amount** The bonus amount. *** **Currency** The bonus program currency. Only trading accounts denominated in the specified currency can be used to claim the bonus from the given program. *** **Lot per unit** The ratio applied to the specified bonus amount to determine the volume that must be traded by a client: `Required volume = Bonus amount / Lot per unit` Suppose that the **Amount** field is set to 100 USD and the **Lot per unit** option is set to 2. In order to receive the bonus of 100 USD on their account balance, a client must trade the following volume: `100 / 2 = 50 lots`. *** **Created at** The date and time when a bonus program was created. *** **Expired** The end date and time of the bonus program, after which clients are no longer able to claim bonuses from the program. To view bonus program details, click the **Edit** button. ## Details [#details] On the details page, you can view the additional program settings and requirements: **Platform** The [trading platform](../products/platforms) on which the bonus program is available. Only trading accounts opened on the specified platform can be used to claim the bonus from the given program. *** **Name** The bonus program name displayed to clients in the B2CORE UI. *** **Amount** The bonus amount. *** **Currency** The bonus program currency. Only trading accounts denominated in the specified currency can be used to claim the bonus from the given program. *** **Expired** The end date and time of the bonus program, after which clients are no longer able to claim bonuses from the program. *** **Platform Groups** One or more groups created on the trading platform, in which trades are counted towards the traded volume of the bonus program. *** **Lifetime (days)** The number of days to fulfill the program requirements. After the bonus amount is claimed and added to a client trading account as credit, the client must trade the required volume within the specified number of days to receive the bonus credit on the account balance. *** **Lot per unit** The ratio applied to the specified bonus amount to determine the volume that must be traded by a client to receive the bonus credit on their account balance. *** **Set credit immediately** * If **Enabled**, when a client claims bonuses from multiple programs at a time using the same trading account, all claimed bonuses are immediately added to their account as credit, enabling the client to use credit funds for trading. * If **Disabled**, when a client claims bonuses from multiple programs at a time using the same trading account, the claimed bonuses are added to their account one after another. Only after the first claimed bonus is processed and assigned the final status (`Completed` or `Expired`), the second claimed bonus is added to the client trading account as credit, and so on. *** **Ignored open/close interval (sec)** The minimum duration, in seconds, for which a client must keep a position open for it to be counted towards the traded volume of the bonus program. *** **Autoenable trading if balance > 0** When the account balance changes from zero or negative to positive, the permission named `Trade Enabled` is either automatically restored for the account or not, depending on this setting: * If **Enabled**, when the account balance becomes positive, the `Trade Enabled` permission is automatically restored, enabling the client to resume trading on their account, including the use of the bonus credit. * If **Disabled**, when the account balance becomes positive, the `Trade Enabled` permission isn’t automatically restored. *** **Ignored symbol groups** One or more symbol groups in which trades aren't counted towards the traded volume of the bonus program. For cTrader, individual symbols must be selected in this field instead of symbol groups, even though symbol groups are available on the cTrader platform. This field is optional and can be empty. *** To apply restrictions to a selected temporary bonus program, click the **Actions** button in the upper-right page corner. The following types of restrictions can be applied to bonus programs, either individually or in combination: * **Country restrictions** — to make the program available only to client from specific countries. * **Client type restrictions** — to make the program available only to clients of selected types, such as Corporate or Individual. * **Verification level restrictions** — to make the program available only to clients with specific verification levels. * **Jurisdiction restrictions** — to make the program available only to clients under selected jurisdictions. * **Introducing broker restrictions** — to make the program available only to clients who are referrals of the specified IBs. If a client doesn't meet the restriction criteria, the temporary bonus program won't be visible to that client in the B2CORE UI, and the client won't have the option to claim the bonus. **See also** [How to create a temporary bonus program](../../how-to-articles/manage-bonuses/how-to-create-a-temporary-bonus-program) On this page, you can find a complete list of client accounts. To view the accounts of a specific client, go to the [Accounts tab](general/accounts-tab) on the client details page. ## General information [#general-information] The following information is provided about each client account: **Account ID** The identifier of an account in the system. *** **Account number** The account number. *** **Display Number** The account number displayed to a client in the B2CORE UI. *** **Client ID** The identifier of an account owner. *** **Client name** The name of an account owner. *** **Client status** The [current status](../references/client-statuses) of an account owner’s profile in the B2CORE UI. *** **Email** The email address of an account owner. *** **Tags** The tags assigned to an account owner that are used to navigate the client list displayed to [Back Office administrators](../system/users/). *** **Country** The account owner’s [country](../system/countries). *** **Company** The account owner’s company. *** **Product** The [product](../products/products) specified for an account. *** **Platform** The [platform](../products/platforms) on which an account is opened. *** **Type** The account type: * **Personal** * **Trade** * **Demo** * **Partner** * **External** *** **Currency** The account currency. *** **Leverage** The account leverage. *** **Balance** The total balance on an account, in the account currency. *** **Balance (USD)** The total balance on an account, in USD. *** **Balance (EUR)** The total balance on an account, in EUR. *** **Credit** The credit funds available on an account. *** **Hold amount** The amount of locked funds on an account. *** **Free funds** The amount of available funds on an account. *** **Equity** For MetaTrader accounts, the account equity. *** **Equity (excl. Credit)** For MetaTrader accounts, the account equity excluding credit funds. *** **Equity (excl. Credit) in USD** For MetaTrader accounts, the account equity excluding credit funds, in USD. *** **Free margin** For MetaTrader accounts, the account available margin. *** **Created** The date and time when an account was created. *** **Internal client type** For internal use: the internal category assigned to a client. *** **Client verification level** The verification level obtained by an account owner. ## Actions [#actions] To create a new account for a client, click the **Create** button in the upper-right corner of the page. *** To deposit funds to multiple client accounts at once, click the **+Update balances** button in the upper-right corner of the page, and then upload a CSV file including the required data (for details, refer to [How to update balances](../../how-to-articles/manage-finances/how-to-update-balances)). *** To export data from the page, click the **Export** button in the upper-right corner of the page, and then select the desired file format. The exported file will reflect your current visibility settings as well as any applied sorting and filtering criteria. Balances of both live and demo trading accounts may not be as up-to-date as those shown on the respective trading platforms. To view the account details, select an account and click the **Edit** button. ## Details [#details] The detail page contains the following tabs: * **Account** — on this tab, you can find the details about an account, assigned access permissions and the account owner * **Transactions** — on this tab, you can filter transactions by their type (the fields displayed on this tab are described in the corresponding sections of this guide) To learn about transactions made on a specific client account, go to the [Transactions tab](general/transactions-tab) on the client details page. On this page, you can create, view, and manage jurisdictions to which clients can be automatically assigned after registration. Jurisdictions help segment clients by region or regulatory needs, ensuring efficient operations and compliance. Jurisdiction-based restrictions can be used to control access to specific products, deposit and withdrawal methods, or verification levels, making them available to clients from certain jurisdictions while restricting access for others. Jurisdictions are assigned to clients based on a combination of the client’s **country** and **client type**. ## Key points [#key-points] * If a client registers with a country and client type that match an existing jurisdiction, the jurisdiction is assigned to the client automatically. * If no matching country and client type combination is found during registration, the jurisdiction isn’t assigned to the client. * If a client isn’t required to select their country during registration, the jurisdiction is assigned automatically after the country is set through the KYC process, taking the client type into account. * When the client’s country changes, the jurisdiction is automatically updated if a matching one exists, taking the client type into account. * Jurisdictions can also be manually assigned or changed in the client details without changing the country. The following information is provided about each jurisdiction: **ID** The jurisdiction identifier. *** **Caption** The jurisdiction name. *** **Description** The description providing additional details about the jurisdiction. *** **Countries** The list of countries included in the jurisdiction. *** **Client types** The list of [client types](types) associated with the jurisdiction. *** **Tags** One or more [client tags](../system/users/client-tags) associated with the jurisdiction. These tags are automatically assigned to clients along with the respective jurisdiction. **See also** [How to create a jurisdiction](../../how-to-articles/manage-clients/how-to-create-a-jurisdiction) [How to edit a jurisdiction](../../how-to-articles/manage-clients/how-to-create-a-jurisdiction#how-to-edit-a-jurisdiction) On this page, you can find a list of all managers and add new ones. Managers are users with access to the Back Office, responsible for organizing work and communicating with clients registered in B2CORE. Upon registration, clients are automatically distributed among the existing managers according to country restrictions. Additionally, you can configure managers to view only specific clients, for example, those assigned to them using [client tags](../system/users/client-tags). ## General information [#general-information] The following information is provided about each manager: **Name** The manager’s name. *** **Email** The manager’s email address. *** **Title** The manager’s title (such as `Mr` or `Mrs`). *** **Enabled** The status of a manager’s profile. Clients can be assigned only to `Enabled` managers. *** **Default** If a manager is set as the default, all new clients will automatically be assigned to that manager, considering country restrictions. Only one manager can be set as the default at a time. It is also possible to have no default manager. In this case, new clients will be assigned to existing managers sequentially, still considering country restrictions. If no manager meets the country restrictions for a client, the client won't be assigned a manager. For more information on the assignment process, refer to [Example](#Example) below. To view details of the manager's profile, click the **Edit** button. ## Details [#details] On the details page, you can additionally view the manager's phone number and edit their profile. To apply country restrictions to a selected manager, click the **Actions** button in the upper-right page corner and select **Country restrictions** in the dropdown: * **Deny only** — the manager can be assigned to all clients, except for those from the selected countries. * **Allow only** — the manager can only be assigned to clients from the specified countries. * **Rules** — a list of countries to which either the **Deny only** or **Allow only** rule is applied. ## Example [#example] This example illustrates the process of assigning new clients to managers. Suppose we have the **Default manager** with the country restriction **Allow only** set to `Vietnam`, meaning that the **Default manager** can be assigned only to clients from Vietnam. In addition to the **Default manager**, there are two non-default managers: * **Manager 1** with the country restriction **Deny only** set to `Germany`, meaning that this manager can be assigned to all clients except for those from Germany. * **Manager 2** without country restrictions. The assignment process works as follows: A client from `Vietnam` — the client will be assigned to the **Default manager** since the country restriction is met in this case. A client from `Germany` — the client can't be assigned to the **Default manager** due to the country restriction and can't be assigned to **Manager 1** either due to the same reason. Therefore, the client will be assigned to **Manager 2**. A client from `China` — the client can't be assigned to the **Default manager** due to the country restriction. The client will be randomly assigned to **Manager 1** or **Manager 2**. In this case, suppose the client is assigned to **Manager 1**. A client from `UAE` — the client can't be assigned to the **Default manager** due to the country restriction. Sequentially, the client will be assigned to **Manager 2** as the previous client was assigned to **Manager 1**. **See also** [How to add a manager](../../how-to-articles/manage-system-settings/how-to-add-a-manager) When your client creates a new request, it appears in the request list. All incoming requests are assigned the **Pending** status and must be resolved on an individual basis (approved or rejected). By default, only pending requests are listed on this page. The **bell** icon displayed in the top panel indicates the total number of pending requests. You can export page data to a CSV or XLSX file. To do this, click the **Export** button in the upper-right page corner, choose a file format, and then select whether to download the data to your computer or deliver it to an email address from your profile. The data in a resulting file matches both the current visibility settings and the applied sorting and filtering parameters. ## General information [#general-information] The following information is provided about each client request: **№** The sequence number of a request. *** **Client ID** The identifier of a client who submitted a request. *** **Client name** The name of a client who submitted a request. *** **Client email** The email address of a client who submitted a request. *** **Tags** The tags assigned to a client that are used to sort the client list displayed to [Back Office administrators](../system/users/). *** **Type** The request type: * **Account** — a request to create an account (when such a request is required for a specific product) * **Address** — a request to update the **Residential** address of an `individual` client. * **Archive** — a request to archive a trading account * **Avatar** — a request to upload a client profile picture * **Deleting Account** — a request to delete an account * **Deposit** — a request to deposit funds * **Exchange** — a request to exchange funds (when such a request is required for a specific currency pair) * **Payout** — a request to withdraw funds * **Profile** — a request to update client profile information * **Transfer** — a request to transfer funds between accounts of the same client * **Internal transfer** — a request to transfer funds from one client to another within the same B2CORE system * **Verification** — a request to update a client’s verification level based on submitted documents * **Client tests** — a request to check the results of a client accreditation test * **Introducing brokers** — a request to join an IB program * **PaymentSystem Deposit Assistance** and **PaymentSystem Withdrawal Assistance** — requests created when the status of a deposit or withdrawal initiated through [PSS-connected](../../integrations/payment-systems#payment-system-service-pss) methods can’t be determined automatically. In such cases, the transaction is assigned the `Assistance` status in the B2CORE Back Office. The admin must review the transaction details and decide whether to continue syncing the status with the external payment system or mark it as failed (for details, refer to [How to process transactions with the Assistance status](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-assistance-status)). * **Static Deposit Assistance** — a request created when the status of a deposit made through a [static deposit](../finance/static-deposit) method can’t be determined automatically *** **Internal client type** For internal use: the internal category assigned to a client. *** **Status** The current status of a request: * **Pending** — the request was submitted but has not yet been resolved by the administrator * **Approved** — the request was approved by the administrator * **Rejected** — the request was rejected by the administrator * **Canceled** — the request was canceled *** **Verification Level** The verification level obtained by a client. *** **Date** The date and time when a request was submitted. *** **Processing date** The date and time when a request was resolved (approved or rejected), helping you evaluate the processing time by comparing it to when the request was created. *** **Processed by** The email address of the [Back Office user](../system/users/users) who resolved the request. *** **Country** The client's country. *** **Account number** The identifier of a client’s account. *** **Amount** The transaction amount. *** **Currency** The transaction currency. *** **Method** The method used to [deposit](../system/deposit-system#deposit-methods) or [withdraw](../system/payout-system#payout-methods) funds. *** **Transaction ID** The transaction identifier in the system. *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **Dealing approved** An internal status indicating whether a transaction was approved by the Finance Department. *** **Compliance approved** An internal status indicating whether a withdrawal has passed a compliance check. To view request details, click the **Edit** button. ## Details [#details] In the request details, you can view all relevant information associated with the specific request type. The **Transaction monitoring** section displays the results (`green` or `red`) of the KYT check for deposits and withdrawals, performed via **SumSub**. To use this feature, you must have an active **SumSub** account with **Fraud Prevention** enabled and properly configured, along with the corresponding **SumSub** external connection enabled in the B2CORE Back Office. The following actions are available in the request details: Click the **Add comment** button to add a comment to a request. Click the **Options** button to set the color with which a request is highlighted in the list. The admins with the `Update requests` permission can also check a transaction by clicking the **Audit** button. The system will then summarize all incoming transactions on a corresponding account and show a notification if a significant discrepancy is found on the balance. For some payment systems, it is also possible to change the amount to be deposited or withdrawn directly, by editing a corresponding request. To resolve a request, click **Approve** or **Reject**. **See also** [Resolutions](../system/requests#resolutions) [How to create a request resolution type](../../how-to-articles/manage-system-settings/how-to-create-a-request-resolution-type) [How to create a request resolution](../../how-to-articles/manage-system-settings/how-to-create-a-request-resolution) [How to enable requests for exchanges in specific currency pairs](../../how-to-articles/manage-currencies/how-to-enable-requests-for-exchanges-in-specific-currency-pairs) [How to update rates in exchange requests](../../how-to-articles/manage-currencies/how-to-update-rates-in-exchange-requests) On this page, you can view and manage the categories which can be assigned to clients. The following data is provided about each client category: **ID** The category identifier. *** **Name** The category name. *** **Caption** The category description. *** **Enabled** If `Yes`, this client category is available for selection. *** **Default** If `Yes`, this is the default category that is assigned to new clients. *** **Num. of clients** The total number of clients in this category. On this page, you can view a list of available currencies, add new currencies, and configure their settings. **Code** The numeric code that is used as a unique currency identifier. *** **Caption** The currency name displayed in the B2CORE UI. *** **Alpha** The alphabetic code of a currency (which is set by an admin when adding a currency to the system). *** **Markup: Sell** The sell commission markup specified as a percentage. *** **Markup: Buy** The buy commission markup specified as a percentage. *** **Precision** The number of decimal places displayed when representing amounts in a currency. You can set the same sell/buy markup for all currencies by clicking the **Change options** button in the upper-right page corner and specifying the required values. To modify currency settings, navigate to the currency details by clicking the **Edit** button located in the currency row. **See also** [How to add a currency](../../how-to-articles/manage-currencies/how-to-add-a-currency) On this page, you can view a list of available currency pairs and add new pairs. **From currency** The alphabetic code of a base currency. *** **To currency** The alphabetic code of a quote currency. *** **Enabled for client** If `Yes`, a currency pair can be exchanged by clients in the B2CORE UI; otherwise, `No`. By default, this option is set to `Yes`. *** **Rates Custom Priority** The order in which exchange rates are obtained from exchange rate providers for this currency pair. *** **Updated** The date and time when a currency pair was last updated. *** **Max amount** The maximum allowed amount per exchange operation in a currency pair. *** **Step** The minimum increment by which an amount can be changed at a time. *** **Enabled for admin** If `Yes`, a currency pair can be exchanged via the Back Office; otherwise, `No`. By default, this option is set to `Yes`. *** **Request required** * If `Yes`, requests for admin approval are created when clients initiate exchanges in a currency pair in the B2CORE UI. After approval, exchanges are executed using the rates specified in the approved requests. * If `No`, exchanges in this currency pair are executed without admin approval. By default, this option is set to `No`. **See also** [How to add an exchange currency pair](../../how-to-articles/manage-currencies/how-to-add-an-exchange-currency-pair) [How to set priorities for exchange rate providers](../../how-to-articles/manage-currencies/how-to-set-priorities-for-exchange-rate-providers) [How to enable requests for exchanges in specific currency pairs](../../how-to-articles/manage-currencies/how-to-enable-requests-for-exchanges-in-specific-currency-pairs) This page displays the configured exchange rate providers used to ensure accurate currency conversions during transaction processing when required. ## General information [#general-information] The following information is displayed for each rate provider: **Priority** The priority index assigned to the rate provider. The order of receiving exchange rates depends on the priority indexes assigned to providers. A lower index means higher priority. For example, a provider with index `1` is used first to receive rates. You can change the priority in the rate provider details or by dragging and dropping providers into the required order. *** **Provider** The name of the rate provider: * B2BINPAY * BTC-Alpha * CBRF * CoinGecko * CoinMarketCap * Coinsbuy * CryptoCompare * CryptoWatch * ECB Rates * Fixer * WazirX * Xe * custom *** **Name** The name assigned to the exchange rate configuration, which is used in the Back Office. *** **From currencies** One or more base currencies for which the rates are configured. *** **To currencies** One or more quote currencies to which the rates apply. *** **Enabled** If **Yes**, the rate provider is enabled and can be used for supplying rates. To view the rate provider details, click the **Edit** button. ## Details [#details] On the details page, you can view and configure additional settings required for the provider. **Options** This section includes the connection settings required for establishing a connection with specific providers. *** When using the **custom** provider, the following settings are displayed: * **Rate** — the fixed rate that is used for conversions. * **Base currency** — the currency that serves as the base for all conversions using the specified fixed rate. **See also** [How to configure currency exchange rates](../../how-to-articles/manage-currencies/how-to-configure-currency-exchange-rates) On this page, you can view a list of client cryptocurrency wallets. To view the wallets of a particular client, go to the [Finance tab](../clients/general/finance-tab) on the client details page, and then select **Deposit wallets**. The following information is provided about each deposit wallet: **ID** The identifier of a wallet in the system. *** **Client ID** The identifier of a wallet owner. *** **Client** The name of a wallet owner. *** **Tags** The tags assigned to a wallet owner that are used to sort the list of wallets displayed to [Back Office administrators](../system/users/). *** **Address** The public wallet address. *** **Destination tag** Applicable only for certain currencies (XRP, XLM, BNB, and XEM). *** **Blockchain** The blockchain network on which a wallet is created. *** **Method** The link to the details of a [method](../system/deposit-system#deposit-methods) used to deposit funds. *** **Currencies** The currencies enabled for a wallet. On this page, you can view all deposits made to client accounts and wallets, which allows you to track, review, and manage deposit activity. To view deposits for a specific client, go to the [Transactions tab](../clients/general/transactions-tab) on the client details page. ## General information [#general-information] The following information is provided about each deposit: **Deposit number** The sequence number assigned to a deposit in B2CORE. Click it to open the deposit details. *** **Client ID** The client identifier. *** **Client** The client’s name. *** **Email** The client’s email address. *** **Tags** The tags assigned to a client, used to sort a list of deposits displayed to [Back Office administrators](../system/users/users). *** **Country** The client’s [country](../system/countries) (if specified during registration or KYC verification process). *** **Jurisdiction** The [jurisdiction](../clients/jurisdictions) to which the client is assigned. *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **Account number** The number of a client account or wallet to which funds are deposited. *** **Payment method** The [method](../system/deposit-system#deposit-methods) used to deposit funds. *** **Payment name** The deposit method name used in the B2CORE Back Office. *** **Groups of method** The [group](../system/deposit-system#deposit-groups) to which a deposit method belongs. *** **KYT status** The Know Your Transaction status returned by **SumSub Fraud Prevention**, indicating whether the transaction has passed compliance checks, shown as either `green` or `red`. Deposit monitoring is performed; however, because deposits are processed via external payment systems, transactions may still be completed successfully regardless of whether the SumSub response is `green` or `red`. *** **Amount** The deposit amount. *** **Currency** The currency in which a deposit amount is specified. *** **Vendor Commission** The commission charged by a broker. *** **Provider Commission** The commission charged by a payment system. *** **Commission currency** The currency in which commissions are charged. *** **Final amount** The deposit amount (less commissions), in the final currency. *** **Final currency** The currency in which a deposit amount is processed and credited to a client account or wallet. *** **Exchange rate** The actual rate used to convert a deposit amount into the final currency at the moment of transaction execution. This rate may differ from the one displayed to the client in the B2CORE UI before the transaction is submitted. The rate displayed in the B2CORE UI is indicative and may not reflect the final value applied during deposit execution. *** **Rate currency** The currency in which the deposit is processed. *** **Rate (USD)** The exchange rate applied to convert a deposit amount to USD. *** **Final amount (USD)** The deposit amount (less commissions), in USD. *** **Created** The date and time when a deposit was initiated. *** **Processed** The date and time when a deposit was processed. *** **Status** The current [transaction status](../references/transaction-statuses). *** **Fin verified** For internal use only. The result of a check made by the Finance Department. *** **Account type** The [type of a product](../products/products) based on which a client account or wallet was created. *** **Internal client type** For internal use only. The internal client profile category. *** **Invoice** The unique identifier of a payment operation in the related payment system. *** **Transaction** The unique address of a transaction on a blockchain. *** **Internal comment** For internal use only. An optional note about a deposit. To view deposit details, click the **Edit** button or the number displayed in the **Deposit number** column. ## Details [#details] The details page shows the **Trader room** tab, which contains the deposit details listed below. For deposits via [PSS-connected](../../how-to-articles/manage-payment-methods/how-to-add-deposit-and-withdrawal-methods-through-pss) methods, an additional **Payment system** tab is available and provides extended [payment details](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-assistance-status#payment-details-structure). **ID** The sequence number assigned to a deposit in B2CORE (the same as the one displayed in the **Deposit number** column). **Status** The current [transaction status](../references/transaction-statuses). *** **Invoice** The unique identifier of a payment operation in the related payment system. *** **Deposit method** The [method](../system/deposit-system) used to deposit funds. *** **Date** The date when a deposit was initiated. *** **Invoice date** The date when an invoice was created. *** **Result date** The date when a deposit was credited. *** **Fin verified** For internal use only. The result of a check made by the Finance Department. *** **Amount** The deposit amount. *** **Currency** The currency in which a deposit amount is specified. *** **Vendor Commission** The commission charged by a broker. *** **Provider Commission** The commission charged by a payment system. *** **Final amount** The deposit amount (less commissions), in the final currency in which the deposit is processed and credited to a client account or wallet. *** **Transaction** The unique address of a transaction on a blockchain. *** **Rate (USD)** The exchange rate applied to convert a deposit amount to USD. *** **Internal comment** An optional note about a deposit. Enter a note or edit the existing one, and then click **Save**. ### Info [#info] This section displays information about a client account or wallet to which funds are deposited. **Account number** The number of a client account or wallet to which funds are deposited. *** **Account balance** The current balance on an account or a wallet. *** **Account type** The [type of a product](../products/products) based on which the account or wallet is created. *** **Client** The client’s name. *** **Email** The client’s email address. ### Transaction monitoring [#transaction-monitoring] This section displays the results (`green` or `red`) of the KYT check performed via **SumSub**. To use this feature, you must have an active **SumSub** account with **Fraud Prevention** enabled and properly configured, along with the corresponding **SumSub** external connection enabled in the B2CORE Back Office. If no results are displayed, click the **Check transaction** button. This button is unavailable if the transaction has already been checked. **See also** [How to create a deposit](../../how-to-articles/manage-finances/how-to-create-a-deposit) On this page, you can view a list of exchange transactions made on client accounts. To view exchanges made on accounts of a particular client, go to the [Transactions tab](../clients/general/transactions-tab) on the client details page. The following information is provided about each exchange transaction: **Transaction ID** The identifier of an exchange transaction in the system. *** **Client ID** The client identifier. *** **Client** The client’s name. *** **Email** The client’s email address. *** **Jurisdiction** The [jurisdiction](../clients/jurisdictions) to which the client is assigned. *** **Tags** The tags assigned to a client that are used to sort a list of exchange transactions displayed to [Back Office administrators](../system/users/). *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **From account** The number of a source account from which the exchanged asset amount is withdrawn. *** **Source amount** The amount that was exchanged, in the currency of a source account. *** **Source currency** The currency in which a source account is denominated. *** **To account** The number of a destination account to which the exchanged asset amount is deposited. *** **Destination amount** The amount that was exchanged, in the currency of a destination account. *** **Destination currency** The currency in which a destination account is denominated. *** **Commission** The amount earned from an exchange transaction as a result of the markup applied to the base exchange rate. This reflects the profit generated by adding a markup percentage to the rate. *** **Rate** The final exchange rate applied to a transaction, including the added markup percentage. *** **Status** The current [transaction status](../references/transaction-statuses). *** **Created** The date and time when an exchange transaction was made. *** **Exchanged By** Indicates if an exchange was made by a client in the B2CORE UI or by an admin in the Back Office. **See also** [How to exchange funds](../../how-to-articles/manage-finances/how-to-exchange-funds) On this page, you can view all withdrawals made from client accounts and wallets, which allows you to track, review, and manage withdrawal activity. To view withdrawals for a specific client, go to the [Transactions tab](../clients/general/transactions-tab) on the client details page. ## General information [#general-information] The following information is provided about each withdrawal: **Withdrawal number** The sequence number assigned to a withdrawal in B2CORE. Click it to open the withdrawal details. *** **Client ID** The client identifier. *** **Client** The client’s name. *** **Email** The client’s email address. *** **Tags** The tags assigned to a client, used to sort a list of withdrawals displayed to [Back Office administrators](../system/users/users). *** **Country** The client’s [country](../system/countries) (if specified during registration or KYC verification process). *** **Jurisdiction** The [jurisdiction](../clients/jurisdictions) to which the client is assigned. *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **Account** The number of a client account or wallet from which funds are withdrawn. *** **Method** The [method](../system/payout-system#payout-methods) used to withdraw funds. *** **Name** The withdrawal method name used in the B2CORE Back Office. *** **Groups of method** The [group](../system/payout-system#payout-groups) to which a withdrawal method belongs. *** **KYT status** The Know Your Transaction status returned by **SumSub Fraud Prevention**, indicating whether the transaction has passed compliance checks, shown as either `green` or `red`. *** **Amount** The withdrawal amount. *** **Currency** The currency in which a withdrawal amount is specified. *** **Vendor Commission** The commission charged by a broker. *** **Provider Commission** The commission charged by a payment system. *** **Commission currency** The currency in which commissions are charged. *** **Final amount** The withdrawal amount (less commissions), in the final currency. *** **Final currency** The currency in which the withdrawal is processed. *** **Exchange rate** The actual rate applied to convert a withdrawal amount into the final currency at the moment of transaction execution. This rate may differ from the one displayed to the client in the B2CORE UI before the transaction is submitted. The rate displayed in the B2CORE UI is indicative and may not reflect the final value applied during withdrawal execution. *** **Rate currency** The currency to which a withdrawal amount is converted during processing. *** **Rate (USD)** The exchange rate applied to convert a withdrawal amount to USD. *** **Final amount (USD)** The withdrawal amount (less commissions), in USD. *** **Status** The current [transaction status](../references/transaction-statuses). *** **Created** The date and time when a withdrawal was initiated. *** **Processed** The date and time when a withdrawal was processed. *** **Account type** The [type of a product](../products/products) based on which a client account or wallet was created. *** **Internal client type** For internal use only. The internal client profile category. *** **Invoice** The unique identifier of a payment operation in the related payment system. *** **Transaction** The unique address of a transaction on a blockchain. *** **Blockchain fee** The blockchain commission. *** **Wallet** The public address of a wallet to which funds are withdrawn. *** **Destination Tag** Applicable only to XRP, XLM, BNB, and XEM. *** **Dealing approved** For internal use only. The result of a check made by the Finance Department. *** **Compliance approved** For internal use only. The result of a check made by the Legal Department. *** **Internal comment** For internal use only. An optional note about a withdrawal. To view withdrawal details, click the **Edit** button or the number displayed in the **Withdrawal number** column. ## Details [#details] The details page shows the **Trader room** tab, which contains the withdrawal details listed below. For withdrawals via [PSS-connected](../../how-to-articles/manage-payment-methods/how-to-add-deposit-and-withdrawal-methods-through-pss) methods, an additional **Payment system** tab is available and provides extended [payment details](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-assistance-status#payment-details-structure). **ID** The sequence number assigned to a withdrawal in B2CORE (the same as the one displayed in the **Withdrawal number** column). *** **Status** The current [transaction status](../references/transaction-statuses). *** **Invoice** The unique identifier of a payment operation in the related payment system. *** **Date** The date when a withdrawal was initiated. *** **Invoice date** The date when an invoice was created. *** **Result date** The date when a withdrawal was debited. *** **Method** The [method](../system/payout-system) used to withdraw funds. *** **Amount** The withdrawal amount. *** **Currency** The currency in which a withdrawal amount is specified. *** **Vendor Commission** The commission charged by a broker. *** **Provider Commission** The commission charged by a payment system. *** **Final amount** The withdrawal amount (less commissions), in the final currency in which the withdrawal is processed. *** **Transaction** The unique address of a transaction on a blockchain. *** **Exchange rate** The actual rate applied to convert a withdrawal amount into the final currency at the moment of transaction execution. *** **USD Exchange Rate** The exchange rate applied to convert a withdrawal amount to USD. *** **Internal comment** An optional note about a withdrawal. Enter a note or edit the existing one, and then click **Save**. *** **Dealing approved** For internal use only. The result of a check made by the Finance Department. *** **Compliance approved** For internal use only. The result of a check made by the Legal Department. ### Request info [#request-info] This section displays information related to a client withdrawal request that requires approval or rejection by the [Back Office administrator](../system/users/users). **Request ID** The identifier of a client request to withdraw funds. Click it to open the request details. *** **Resolution** The [request status](../references/client-request-statuses). *** **Reason** For rejected requests, the reason the request was rejected. ### Info [#info] This section displays information about a client account or wallet from which funds are withdrawn. **Account** The number of a client account or wallet from which funds are withdrawn. *** **Account balance** The current balance on an account or a wallet. *** **Account type** The [type of a product](../products/products) based on which the account or wallet is created. *** **Client** The client’s name. *** **Email** The client’s email address. ### Transaction monitoring [#transaction-monitoring] This section displays the results (`green` or `red`) of the KYT check performed via **SumSub**. To use this feature, you must have an active **SumSub** account with **Fraud Prevention** enabled and properly configured, along with the corresponding **SumSub** external connection enabled in the B2CORE Back Office. If no results are displayed, click the **Check transaction** button. This button is unavailable if the transaction has already been checked. **See also** [How to create a payout](../../how-to-articles/manage-finances/how-to-create-a-payout) On this page, you can view a list of configured reports as well as create new reports. ## General information [#general-information] The following information is provided about each report: **ID** The report identifier. *** **Interval** The report schedule. Possible options: * **Daily** — the report is run and sent every day * **Weekly** — the report is run and sent once a week * **Monthly** — the report is run and sent once a month *** **Date slice** The period for which data is included in the report, as per the Back Office server time: * **Day** — the previous day from 00:00 to 23:59 * **Week** — the previous week from Monday 00:00 to Sunday 23:59 * **Month** — the previous month from the first day of the month 00:00 to the last day 23:59 * **Curweek** — the previous 7 days from the first day 00:00 to yesterday 23:59 * **Overall** — from the very beginning to yesterday 23:59 * **Curmonth** — from the first day of the current month 00:00 to yesterday 23:59 *** **File format** The file format in which the report is generated. Possible options: * HTML * XLSX * CSV *** **Name** The name assigned to the report. *** **Mail to** The email addresses to which a link to download the report is sent. *** **Last run** The date and time when the report was last run and sent to a specified email address. *** **Active** The report status: * **Active** — indicates that the report is run and sent on schedule * **Inactive** — indicates that the report is disabled To view the report details, click the **Edit** button. ## Details [#details] The following additional fields are displayed on the details page: **Class** The report type. One or more report types can be selected. Possible options: * **Client Finance Report** — shows the amount of deposits, withdrawals and net deposits (the difference between total deposits and total withdrawals) made by each client over a specified time period, in corresponding currencies and in conversion to USD. The report includes the following fields: **Email**, **Verification Level**, **Currency**, **Deposit**, **Withdraw**, **(D - W)**, **(Deposit, USD)**, **(Withdraw, USD)** and **(Deposit - Withdrawal, USD)**. * **Transaction Finance Report** — contains detailed information on all transactions executed over a specified time period. The report includes various fields, such as **ID**, **Account ID**, **Operation ID**, **Email**, **Transaction Type**, **Method**, **Source Currency**, **Source Amount**, **Type Commission**, **Final Amount**, **Target Amount**, **Target Currency**, **Transaction Exchange Rate**, **% Markup**, **Profit Markup**, **Markup Currency** and others. * **Method Finance Report** — contains detailed information on methods used for execution of deposit and withdrawal operations over a specified time period. The data is grouped by currencies (such as fiat and crypto) and includes information about the commissions and profit earned from each operation. The report includes various fields, such as **Method**, **Currency**, **Deposit**, **Withdraw**, **Source Commission**, **Final Deposit amount**, **Final Withdrawal amount**, **Profit Markup**, **Counterparty Commission**, **Profit (Counterparty commission)** and others. * **Currency Finance Report** — shows the amount of deposits, withdrawals and net deposits (the difference between total deposits and total withdrawals) made over a specified time period in a particular currency and in conversion to USD. The report includes the following fields: **Currency**, **Deposit**, **Withdraw**, **(D - W)**, **(Deposit, USD)**, **(Withdraw, USD)** and **(Deposit - Withdrawal, USD)**. * **Balances Report** — shows balance changes on client accounts over a specified time period. The data is grouped by each currency and also includes the total balance change on all client accounts in conversion to USD. The report includes the following fields: **ID**, **Email**, **Client Name**, **Internal Client Type**, **Verification Level**, **Company Name**, **Currency**, **Balance**, **Hold**, **Rate**, **(Balance, USD)**, **Previous Balance** and **(Previous Balance, USD)**. * **User In Out** — this report is similar to the **Client Finance Report**, while also containing additional fields, such as **Transfers (D-W)** and **Manual (D-W)**. * **IB Balances Report** — shows the reward amounts earned by IB partners over a specified time period, as well as the total reward amount in conversion to USD. The report includes the following fields: **ID** (the identifier assigned to an IB partner), **Email**, **Client Name**, **Internal Client Type**, **Verification Level**, **Company Name**, **Currency**, **Balance**, **Rate** and **(Balance, USD)**. * **Balances Simplified Report** — shows balances on client accounts in each currency along with the total balance on all client accounts in conversion to USD. The report includes the following fields: **Email**, **Internal Client Type**, **Currency** and **Balance**. * **LegalEntityBalancesReport** — shows balances on all live accounts of the clients that are served by a specific legal entity. *** **Start hour** The hour at which the report is run and sent to a specified email, as per the Back Office server time. The value must be in the 0 — 23 range. *** **GMT offset** The GMT offset of the local time zone to run and send the report. **See also** [How to create a report](../../how-to-articles/manage-finances/how-to-create-a-report) **Static deposits** provide a reusable and persistent way for clients to fund their wallets in B2CORE. Unlike regular one-time deposits, static deposits allow clients to use the same **static payment details** (also called **identities**) multiple times, eliminating the need to generate new payment pages with payment details for each transaction. Currently, the **B2BINPAY v3** and **Coinsbuy v3** payment systems can be configured to use static payment details. for details, refer to [How to integrate B2BINPAY](../../how-to-articles/manage-payment-methods/how-to-integrate-b2binpay-v3). ## Difference between regular deposits and static deposits [#difference-between-regular-deposits-and-static-deposits] ### Regular deposits [#regular-deposits] A **regular deposit** is a one-time transaction initiated by a client. Each deposit requires generating a new, temporary payment page with payment details. The process for regular deposits is as follows: 1. On the **Deposit** page in the B2CORE UI, the client selects their wallet, deposit currency, specifies the deposit amount, and chooses an available deposit method. 2. The client fills in the required additional fields, depending on the selected method. 3. After initiating the deposit, the client is redirected to a payment page or shown a QR code. The page has an expiration time. 4. Once the deposit is completed or expires, the payment page and its payment details can't be reused. ### Static deposit [#static-deposit] A **static deposit** uses persistent payment details generated by a client. These details remain available for repeated use and are permanently associated with that client. This approach is especially useful for crypto and bank payments, where clients may want to reuse the same crypto address or bank requisites for multiple deposits. The process for static deposits is as follows: 1. On the **Deposit** page in the B2CORE UI, the client selects their wallet, deposit currency, and chooses a deposit method that supports static deposits. 2. The client fills in the required additional fields, depending on the selected method, and generates payment details (for example, a crypto address or bank requisites). 3. The generated payment details are saved and can be reused for future deposits with different amounts. 4. The payment details don't expire and remain active as long as they exist within the selected payment system. ### Key points [#key-points] * Static payment details can be reused multiple times to deposit different amounts. * Each set of payment details is permanently associated with a specific client. * Payment details don't expire and remain valid unless explicitly deactivated. * Multiple payment details can be generated for the same payment method, allowing the client to choose which one to use. ## Unresolved requests [#unresolved-requests] On this page, you can view a list of **unresolved requests** that are created when issues occur during **static deposit** processing and the static deposit fails to be created. These requests allow the admin to track errors, identify their causes, and take actions to resolve static deposit issues. The following information is provided about each unresolved request: ### General information [#general-information] **ID** The unique identifier of the unresolved request. *** **Status** The request status: * **Unresolved** — indicates that the static deposit couldn't be created and an unresolved request was generated. * **Resolved** — indicates that the request was reviewed and manually resolved by the admin. *** **Driver** The static deposit driver via which the deposit was initiated. *** **Error code** The reason why the unresolved request was created. The table below lists possible error codes related to static deposit processing, along with their causes and configuration scenarios in which they may occur. *** **Creation date** The date and time when the request was created. To view the request details, click the **eye** icon. ### Details [#details] The details page displays extended information about the static deposit and the related error. Once the issue has been addressed, the request can be manually closed by clicking the **Resolve** button. On this page, you can find a full list of all transactions, including deposits, withdrawals, transfers, exchanges, IB rewards, and savings payments, along with their current statuses. The following information is provided about each transaction: **ID** The transaction identifier. *** **Client ID** The client identifier. *** **Type** The transaction type: * **Deposit** — adding funds to client accounts. * **Payout** — withdrawing funds from client accounts. * **Transfer** — moving funds between accounts belonging to the same client. * **Internal transfer** — transferring funds between different clients within the same B2CORE system. * **Exchange** — exchanging one currency for another between client accounts. * **Rewards** — crediting rewards from IB programs. * **Savings Payment** — interest payments from [savings programs](../savings). If you filter the **Transactions** page by type (for example, **Deposit**, **Payout**, or **Exchange**), the resulting list will match the corresponding list in [Finance > Deposits](deposits), [Finance > Payouts](payouts), or [Finance > Exchange](exchange), provided no additional filters are applied. Filtering by **Transfer** and **Internal transfer** (if enabled) will display the same list as in [Finance > Transfers](transfers), provided no additional filters are applied. *** **Source** The identifier of the source account. *** **Source account number** The number of the source account. *** **Source currency** The currency in which the source account is denominated. *** **Source amount** The transaction amount in the source currency. *** **Source commission** The commission amount charged for a transaction, in the source currency. *** **Destination** The identifier of the destination account. *** **Destination account number** The number of the destination account. *** **Destination currency** The currency in which the destination account is denominated. **Destination amount** The transaction amount in the destination currency. *** **Destination commission** The commission amount charged for a transaction, in the destination currency. *** **Status** The current [transaction status](../references/transaction-statuses). *** **Date** The date and time when a transaction was created. **See also** [How to process transactions with the Partial status](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-partial-status) [How to process transactions with the Assistance status](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-assistance-status) On this page, you can view a list of transfers made between client accounts. To view transfers made between accounts of a particular client, go to the [Transactions tab](../clients/general/transactions-tab) on the client details page. ## General information [#general-information] The following information is provided about each transfer transaction: **Operation ID** The identifier of a transfer transaction in the system. *** **Client ID** The identifier of a client from whose account funds are transferred followed by the identifier of a client to whose account funds are transferred (for example, `296 -> 296` or `118 -> 274`). *** **Client Name** The client’s name. *** **Client Email** The client’s email address. *** **Internal client type** For internal use only. The internal client profile category. *** **Jurisdiction** The [jurisdiction](../clients/jurisdictions) to which the client is assigned. *** **Type** The type of a transfer transaction: * `Transfer` – funds are transferred between accounts of the same client. * `Internal transfer` – funds are transferred from one client to another within the same B2CORE system. *** **Tags** The tags assigned to a client that are used to sort a list of transfer transactions displayed to [Back Office administrators](../system/users/). *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **From account** The number of a source account from which funds are transferred. *** **Source platform** The [platform](../products/platforms) on which a source account is opened. *** **Source type** The [type of a product](../products/products) to which a source account belongs. *** **Source amount** The transfer amount, in the currency of a source account. *** **Source currency** The currency in which a source account is denominated. *** **To account** The number of a destination account to which funds are transferred. *** **Destination platform** The [platform](../products/platforms) on which a destination account is opened. *** **Destination type** The [type of a product](../products/products) to which a destination account belongs. *** **Destination amount** The transfer amount, in the currency of a destination account. *** **Destination currency** The currency in which a destination account is denominated. *** **Status** The current [transaction status](../references/transaction-statuses). *** **Created** The date and time when a transfer was made. *** **Processed** The date and time when a transfer was processed. To view transaction details, click the **Edit** button or the number displayed in the **Operation ID** column. ## Details [#details] The following additional information is provided about each transfer transaction: **Internal client type** For internal use only. The internal client profile category. *** **Source commission** The commission, in the currency of a source account. *** **Destination commission** The commission, in the currency of a destination account. *** The following information about a client request is provided if your clients are required to submit requests for a fund transfer, which are resolved on an individual basis (approved or rejected): **Request ID** The identifier of a client request to transfer funds. *** **Resolution** The [request status](../references/client-request-statuses). *** **Reason** The reason why a request was rejected. **See also** [How to create a transfer](../../how-to-articles/manage-finances/how-to-create-a-transfer) ## Providers [#providers] On this page, you can view a list of connections to SMTP service providers and configure new connections. It's important to select SMTP providers that offer unrestricted daily email sending, such as [Mailchimp](https://mailchimp.com/), [SendGrid](https://sendgrid.com/), or [Mailgun](https://www.mailgun.com/). **Unsuitable SMTP providers** Providers that impose daily email sending limits aren't suitable for SMTP configuration. These services are typically designed for personal or small-scale usage and can't meet the demands of extensive mailing lists. Examples of such providers include: Gmail, Yahoo Mail, Outlook (Hotmail), iCloud Mail, AOL Mail, Zoho Mail (free version), Yandex Mail, Proton Mail, GMX Mail, or Mail.ru. ### General information [#general-information] The following information is provided about each SMTP connection: **ID** The identifier assigned to the connection. *** **Caption** The named assigned to the connection in the Back Office. *** **Driver** The driver used for sending emails (smtp). *** **Host** The SMTP host. *** **Port** The SMTP port number. *** **Username** The SMTP username that is used for authentication. *** **Send from** The sender’s email address displayed to your email recipients. *** **Send from name** The sender’s name displayed to your email recipients. **See also** [How to configure SMTP](../../how-to-articles/manage-mailing-options/how-to-configure-smtp) *** **Encryption** The encryption protocol used to securely communicate with the SMTP service provider. Possible options: * TSL * SSL *** **Enabled** The connection status. If `true`, the connection is enabled; otherwise, `false`. If the only connection to an SMTP service provider is configured, it can’t be disabled. To view the connection details, click the **Edit** button. ### Details [#details] On the details page, the masked **Password** field is displayed in addition to the general information. To validate the connection settings, click the **Test connection** button. A green checkmark displayed on the button indicates that the connection has been configured properly. ## Queue [#queue] On this page, you can view the queue of unsent emails and delete them if necessary. **ID** The email identifier in the system. *** **Email** The email address. *** **Subject** The email subject. *** **Last attempt date** The date of the last attempt to send the email. *** **Next attempt date** The date of the next attempt to send the email. *** **Attempts count** The number of attempts to send the email. *** **Status** The status indicating the result of an email send attempt. *** **Reason** The reason for an unsuccessful attempt. ## Templates [#templates] On this page, you can view a list of email templates used for system mailing and override them if necessary. **Name** The template name. *** **Template ID** The template identifier in the system. *** **Recipient** The recipient type for which the template is used. *** **Enabled** Indicates whether the template is enabled. *** **Status** Indicates whether the default template is used or has been overridden. *** **Last Modified** The date and time when the template was last modified. To customize a template, click the **Override** button. ## Template Chunks [#template-chunks] On this page, you can view a list of reusable email template parts — layouts and chunks (such as the header and footer) — that are shared across email templates, and override them if necessary. **Name** The name of a layout or chunk. *** **Type** The type of the template part: `Layout` or `Chunk`. *** **Status** Indicates whether the default template part is used or has been overridden. *** **Last Modified** The date and time when the template part was last modified. To customize a layout or chunk, click the **Override** button. ## Log [#log] On this page, you can view the mailing log. **ID** The email identifier in the system. **Active queue ID** The identifier of the queue in which the email is included. **Email** The client email address. **Subject** The email subject. **Attempt date** The date and time of the last attempt to send the email. **Status** The email delivery status (the available options: IN PROGRESS, FAIL, and SUCCESS). **Reason** The reason why the email delivery failed. On this page, you can view a list of created product groups and create new ones. Product groups help organize multiple [products](products) into categories and determine how they are displayed to clients in the B2CORE UI, ensuring a structured presentation. ## General information [#general-information] The following information is provided about each product group: **ID** The identifier of the product group. *** **Priority** The priority index assigned to the product group. *** **Caption** The product group caption. This caption will be assigned to the product group in the Back Office and will be visible to clients in the B2CORE UI. To view product group details, click the **Edit** button. ## Details [#details] On the details page, you can view the following additional information: **Description** The description of the product group. *** **Type** The type of the product group. The possible types include the `Default`, `Payment account` types, and others. On this page, you can view a list of configured platforms and create new ones. Platforms in B2CORE facilitate connections to external systems and trading platforms, enabling seamless data transmission and request processing, ensuring that data in B2CORE stays synchronized with the data on the respective external platform. ## General information [#general-information] The following information is provided about each platform: **ID** The platform identifier. *** **Caption** The platform name displayed on other Back Office pages. *** **Name** The unique platform name used in the Back Office. *** **Platform** The name of the platform to which the connection is configured. *** **Status** The platform status: `Enabled` or `Disabled`. To view platform details, click the **Edit** button. ## Details [#details] The following information is provided on the details page: **Name** The unique platform name used in the Back Office. *** **Caption** The platform name displayed on other Back Office pages. *** **Short caption** The short name of the platform. This field is optional. *** **Status** The platform status: `Enabled` or `Disabled`. *** **Demo** Indicates if the platform is intended for demo or live accounts: * `Yes` — the platform is intended for *demo* accounts. Clients can open demo accounts via the B2CORE UI using the products created based on the given platform. * `No`— the platform is intended for *live* accounts. Clients can open live accounts via the B2CORE UI using the products created based on the given platform. *** **Income transfer request** Specifies if client requests for transfers to platform accounts via the B2CORE UI are enabled: * `Yes` — client requests for transfers to platform accounts via the B2CORE UI are enabled. * `No` — transfers to platform accounts via the B2CORE UI are made without requests. *** **Outcome transfer request** Specifies if client requests for transfers from platform accounts via the B2CORE UI are enabled: * `Yes` — client requests for transfers from platform accounts via the B2CORE UI are enabled. * `No`— transfers from platform accounts via the B2CORE UI are made without requests. *** Depending on the platform, either the **Settings** or **External connection** section is displayed. Both sections are used to establish connections to respective platforms. The set of connection parameters depend on the platform. **External connection** In this section, you can click the **Set connection** button to select for the platform a connection that has been previously configured in **Systems** > **External connections**, or use the **Click to edit connection** button to navigate to the connection configuration and modify the connection parameters. *** **Settings** In this section, specify the connection parameters required for the platform. *** **Test connection** Click the **Test connection** button to validate the connection settings. The green button indicates that the connection has been configured properly. The red button indicates that some connection settings aren’t valid. The errors displayed below the button specify the connection issues that need to be addressed. ## MetaTrader 4/5 [#metatrader-45] Connections to MT4 and MT5 are established within B2CORE via the internal WEBAPI service, eliminating the need to create connections in **System** > **External Connections**. The following settings must be specified in the platform details for MT4 and MT5: ### MetaTrader connection [#metatrader-connection] **Host** The IP address and port number for accessing the MT server. *** **Login** The login used to access the MT Manager. *** **Password** The password used to access the MT Manager. *** ### WEBAPI connection [#webapi-connection] The WEBAPI connection settings are provided by your account manager. **Host** The domain name and port number for accessing WEBAPI. *** **Access token** The token used to access WEBAPI. *** ### **Settings** [#settings] **Max inactivity days** The number of days after which a trading account will be archived if no activity is detected during that period. *** **Use number settings** The setting is disabled by default. *** **Web Terminal URL** The URL of the web trading terminal. When specified, the **Trade** button will appear on account cards for the respective platform in the B2CORE UI and mobile app, enabling clients to navigate to trading with a single click (for details, refer to [How to enable one-click trading access from the B2CORE UI and mobile app](../../how-to-articles/manage-platforms/how-to-enable-one-click-access-to-web-trading-terminals)). *** **Use reporting on the platform** The setting is enabled by default. If enabled, the MT4/5 account will be created with the **Send reports** option activated on the respective platform. If disabled, this option will be inactive for accounts created via B2CORE. **See also** [How to integrate MetaTrader 4/5](../../how-to-articles/manage-platforms/how-to-intergate-mt) On this page, you can view a list of all products and general information about them. Products in B2CORE define the process of creating wallets and trading accounts in B2CORE and on respective external platforms, while also specifying the settings applied to those accounts. Each product is linked to a [platform](platforms) in B2CORE, which in turn connects to an external platform, such as MetaTrader 4/5, cTrader, or other supported platforms, ensuring seamless data synchronization. ## General information [#general-information] The following information is provided about each product: **ID** The product identifier that is automatically generated by the system. *** **Name** The product name used in the Back Office. *** **Caption** The product name that is displayed in the B2CORE UI. *** **Platform** The [platform](platforms) on which the product is available. *** **Group** The [group](groups) in which the product is included. *** **Type** The type of the product. The product can be of one of the following types: * **Personal** * **Trade** * **Demo** * **Partner** * **External** *** **Currency** One or more currencies added for the product. *** **Status** The product status: * **Disabled** — the product is inactive and is not displayed in the B2CORE UI. Product-associated accounts cannot be created. All new products are assigned this status upon creating. * **Present** — the product is not displayed in the B2CORE UI. Product-associated accounts can be created only in the Back Office. * **Hidden** — the product is not displayed in the B2CORE UI. Product-associated accounts can be created only in the Back Office. * **Enabled** — the product is active. * **Default** — the product is displayed in the B2CORE UI. Product-associated accounts can be created in the Back Office or in the B2CORE UI. To view the product details, click the **Edit** button. When creating a product, you also specify the **Factory** value: set it to `100` to denominate product-associated accounts in currency subunits (for example, cents); otherwise, set it to `1`. The **Factory** value of `100` can't be used with platforms that don't support accounts in currency subunits, such as **eWallets**, **PrimeXM**, **Centroid**, and **OneZero**. ## Details [#details] The details page is grouped into three tabs: **Info**, **Currencies**, and **Detailed information**. ### Info tab [#info-tab] The tab contains general product settings: **Leverage** One or more leverage ratios assigned to the product. *** **Default leverage** The default leverage ratio assigned to product-associated accounts that are created after the **Autocreation on login** option is triggered. *** **Group rights** A group of permissions for the selected users. *** **Rights** and **Default account rights** Permissions assigned to accounts opened based on the product. The default rights are applied to accounts that are automatically created when clients sign in to the B2CORE UI for the first time. To create accounts upon initial sign-in to the B2CORE UI, enable the option **Autocreation on login**. For a list of possible permissions, refer to [Product permissions](../references/product-permissions). *** **Max accounts** The maximum number of accounts that a client can create for each currency added to the product. For example, if `USD` and `EUR` are added as currencies to a product and the **Max accounts** option is set to **1**, the client can create one account in `USD` and one account in `EUR` based on this product. * To apply no limits on the number of accounts that can be created based on the product, enter **-1**. * To forbid clients to create accounts, specify **0**. The **Max accounts** limit is applied independently to each product and doesn't overlap with limits set for other products. *** **Mail** The settings for email notifications. Possible option: * **Default** or **Send** — to automatically send email notifications to clients when new trading accounts are created, including credentials and details needed to start trading. * **Don't send** — to disable email notifications for new accounts. For example: * For **MT** products, use **Default** and the `accountCreated` template in the **Mail template** field. * For **cTrader** products use **Don't send** to prevent email notifications when creating cTrader accounts through B2CORE. This is because all cTrader accounts are linked to a single cTrader ID, with one password for that ID. *** **Mail template** The email notification template. *** **Start amount**\ *Applicable only for demo accounts* The initial balance on demo accounts. *** **Priority** The sequence number of the product in the list. *** **Agreement link** A link to a document to which a client must consent in order to open an account via the B2CORE UI. *** **Link info** A link to a resource providing additional information about a product, which a client can click when creating an account via the B2CORE UI. *** **Request required** If `Yes`, an administrator approval in the Back Office is required to open a new account in the B2CORE UI. *** **Min deposit amount (USD)** The minimum deposit amount, in USD, required for accounts opened based on the product. A client can deposit the entire amount at once or can make several deposits to add the required amount to the account. After the minimum deposit requirement is met, the account becomes available to the client. *** **Autocreation on login** If `Yes`, a product-associated account is created automatically for each client upon initial sign-in to the B2CORE UI. *** **Account number prefix**\ *Applicable only for DXtrade products* The prefix added to the beginning of DXtrade account numbers, which helps distinguish, for example, live and demo accounts or accounts belonging to different brands within one DXtrade infrastructure. The maximum prefix length is 14 characters. The prefix is applied only to new accounts created based on the product. Existing accounts remain unchanged. *** **First transfer activation**\ *Applicable only for MT5 products* If `Enabled`, MT5 accounts are created without the **Trade enabled** permission. This permission is granted to clients upon the first successful transfer to the account. *** **Agent account**\ *Applicable only for MT products* The number of the agent account associated with the product. An agent account is a special non-trading account on MT4/5 used for IB and partner commission calculations, when IB logic is managed on the MT4/5 server instead of using [B2CORE IB](https://docs.ib.b2core.b2broker.com/). When specified in the product settings, the agent account will be applied to and displayed in accounts created based on the product on the corresponding MT4/5 platform. *** **Account type**\ *Applicable only for cTrader products* The account type: Hedged or Netted. *** **Margin calculation type**\ *Applicable only for cTrader products* The type of total margin requirements per symbol applied to cTrader accounts upon creation. This type can’t be changed after the account has been created. Possible options: * **Max** — total margin requirements per symbol are the maximum margin requirements from all long and short positions of that symbol * **Sum** — total margin requirements per symbol are the sum of all margin requirements of all positions of that symbol * **Net** — total margin requirements per symbol are the difference between the margin requirements of all long and short positions of that symbol If no margin calculation type is selected, the default cTrader type will be applied. *** The fields **Min account number**, **Max account number**, and **Last number** aren't available for product configuration by default. They can be enabled upon request through your account manager and the B2CORE development team. **Min account number**\ *Applicable only for MT products* The minimum account number that can be assigned to accounts created on the corresponding MT4/5 platform via B2CORE, whether through the Back Office, B2CORE UI, or mobile app. *** **Max account number**\ *Applicable only for MT products* The maximum account number that can be created on the corresponding MT4/5 platform, via B2CORE, whether through the Back Office, B2CORE UI, or mobile app. Together, the **Min account number** and **Max account number** options define the range within which account numbers are assigned to new accounts created on the corresponding MT4/5 platform via B2CORE. *** **Last number**\ *Applicable only for MT products* Displays the number of the most recently created account on the corresponding MT4/5 platform via B2CORE. This value is updated automatically as new accounts are created through B2CORE until the specified **Max account number** is reached. Use this field to track the current position in the account numbering sequence. You can edit the **Last number** filed to specify the correct last account number if one or more accounts were created directly on the platform rather than via B2CORE. When new accounts are created via B2CORE, the account number is calculated as `Last number + 1` to avoid using an already existing number. If the generated number already exists, B2CORE will attempt to increment it by one and retry, up to **four times**. After four failed attempts, an error will be displayed, which must be resolved manually. ### Currencies tab [#currencies-tab] The tab contains a list of product currencies for multi-currency accounts: **ID** The product currency identifier. *** **Currency** The alphabetic code of the currency *** **Caption** The currency name displayed in the B2CORE UI. *** **Status** The currency status in the product: **Enabled** or **Disabled**. ### Actions [#actions] Click the **Actions** button in the upper-right page corner to set the following restrictions for the product account: **Country restrictions** Grant or restrict access to the product account by country: * Select **Type** — **Deny only** or **Allow only**. * From the **Rules** dropdown, select the name of the country from which the access to the account is allowed or restricted. * Click **Save**. *** **Client type restriction** Grant or restrict access to the product account by client type: * Select **Type** — **Deny only** or **Allow only**. * From the **Rules** dropdown, select the client type. * Click **Save**. *** **Verification Auto-Create** Grant or restrict access to the product account by the verification level: * Select **Type** — **Deny only** or **Allow only**. * From the **Rules** dropdown, select the client verification level. * Click **Save**. *** **Introducing broker restrictions** Grant or restrict access to the product for the clients of a particular IB partner: * Select **Enabled** — **Yes** or **No**. * Select **Type** — **Allow only** or **Deny only**. * In the **Rules** field, specify the client identifier assigned to the IB partner. You can add one or more clients to the list. * Click **Save**. If you select the **Allow only** option, you *grant* access to the product only to the IB clients of the specified partners. The IB clients of other partners cannot access this product. If you select the **Deny only** option, you *restrict* access to the product only for the IB clients of the specified partners. The IB clients of other partners can access this product. **See also** [How to create a wallet](../../how-to-articles/manage-products/how-to-create-a-wallet) On the **Rights** page, you can view a list of permission groups configured for products, and create new groups. A permission group includes a set of permissions that can be assigned to [products](products). When configuring product settings, select a permission group to assign the product all the permissions included in this group. ## General information [#general-information] The following information is provided about each permission group: **ID** The identifier of the permission group. *** **Name** The name of the permission group. *** **Status** If **Enabled**, the permission group can be selected in the **Group rights** field on the product details page. To view permission group details, click the **Edit** button. ## Details [#details] The following additional information is provided about each permission group: **Rights** A list of the permissions included in the permission group. On this page, you can view all configured announcements and create new ones. Announcements can be **required**, blocking further interaction with the B2CORE UI until clients perform the required action, or **optional**, which are displayed when clients clicks the **Announcements** icon in the topbar of the B2CORE UI. ## General information [#general-information] The following information is provided about each announcement: **ID** The announcement identifier. *** **Type** The announcement type indicating whether the announcement requires client action: * **Required** — an announcement includes a button and blocks further interaction with the B2CORE UI until the client clicks the button. * **Optional** — an announcement is displayed upon clicking the **Announcements** icon in the topbar of the B2CORE UI and doesn't require client action. *** **Title** The announcement title. *** **Text** The announcement body text. *** **Button Text**\ *Applicable only to announcements of the Required type* The button label. *** **Targeted Emails** A list of client email addresses to whom the announcement will be shown. *** **Enabled** If set to `Yes`, the announcement is active and displayed to targeted clients. To view the announcement details, click the **Edit** button. ## Details [#details] On the details page, you can view and edit the announcement fields, including: **Button Text** The text displayed on the button shown in the announcement. *** **Button URL** The URL to which clients are redirected after clicking the button displayed in the announcement. For announcements of the **Optional** type, the **Close** button is shown. If a button URL is specified, clients will be redirected to that URL when they click the **Close** button. *** **Due to Date** The date until which the announcement is displayed to clients. Detailed information also contains the additional **Announcement reactions** section. This section lists clients who interacted with the announcement, including: * Clients who clicked the button (for announcements of the **Required** type). * Clients who opened the announcement by clicking the **Announcements** icon in the topbar of the B2CORE UI (for announcements of the **Optional** type). * The date and time of each interaction. **See also** [How to create an announcement](../../how-to-articles/manage-advertising-options/how-to-create-an-announcement) On this page, you can view a list of configured banners and create new ones. Use banners for advertising or informing your clients about important news, events, or service updates. You can create multiple banners and display them on various pages of the B2CORE UI and in the mobile app or mobile browsers. You can add a button containing a URL to an external resource onto a banner. Upon clicking the button, the specified URL is opened. Banners can be configured to display to clients based on selected **countries**, **verification levels**, **client types**, and **jurisdictions**. ## General information [#general-information] The following information is provided about each banner: **ID** The banner identifier. *** **Caption Light** The banner title specified for the light theme. *** **Caption Dark** The banner title specified for the dark theme. Specifying banner titles is optional. You can leave these fields empty and create a banner without a title. *** **Created at** The date and time when a banner was created. *** **Created by** The email of a Back Office user who created a banner. *** **Banner URL** The URL tail defining a page on which a banner is displayed in the B2CORE UI (for example, `/dashboard`, `/wallets`, `funds/deposit`, or other). In the mobile app, all banners will be displayed at the top of the **Home** screen. *** **Banner Priority** The order in which banners are displayed in the B2CORE UI or mobile app if more than one banner is configured. *** **Banner Type** The banner type: **Desktop** or **Mobile**. *** **Enabled** If `Yes`, a banner is displayed to clients in the B2CORE UI or mobile app; otherwise, `No`. To view banner details, click the **Edit** button. ## Details [#details] On the details page, you can switch between the following tabs: **Banner** On this tab, you can adjust banner settings. The settings available for desktop and mobile banner types are different. *** **Light** On this tab, you can adjust banner settings for the light theme. *** **Dark** On this tab, you can adjust banner settings for the dark theme. To apply country or verification level restrictions to the banner, click the **Actions** button in the upper-right page corner, and then select one of the following options: * **Country restrictions** — to display the banner only to clients from specific countries. * **Verification level restriction** — to display the banner only to clients with specific verification levels. **See also** [How to create a banner](../../how-to-articles/manage-advertising-options/how-to-create-a-banner) [How to restrict banner display by country and verification level](../../how-to-articles/manage-advertising-options/how-to-create-a-banner#how-to-restrict-banner-display-by-country-and-verification-level) On this page, you can view a list of available widgets and customize their display on the **Dashboard** page of the B2CORE UI. **ID** The identifier of the widget in the system. *** **Caption** The widget name. *** **Order** The sequence number of the widget in the B2CORE UI. *** **Sort Actions** The arrow buttons in this column are used to change the order of the widgets (using sequence numbers in the **Order** column). *** **Show by default** Indicates whether a widget is displayed on the client dashboard by default. *** **Delete** If the toggle is on, the widget in the B2CORE UI has a close button to temporarily close the widget (until the page is refreshed or the **Dashboard** is reset). **See also** [How to configure the default Dashboard](../../how-to-articles/manage-advertising-options/how-to-configure-the-default-dashboard) [How to add Ticker Widget symbols to the Dashboard](../../how-to-articles/manage-advertising-options/how-to-add-ticker-widget-symbols-to-the-dashboard) On this page, you can customize the menu displayed to your clients in the B2CORE UI, including the option to add custom menu items used to redirect clients to third-party external resources or web pages for additional functionality. To view a list of available menu items, click the **eye** icon located in the **General** row. ## General information [#general-information] The following information is provided about each menu item: **ID** The identifier of a menu item. *** **Name** The menu item name used in the Back Office. *** **Caption** The menu item name displayed in the B2CORE UI. *** **Type** The type of a menu item: * **default** — a pre-defined menu item associated with specific B2CORE functionality. These items can't be removed but can be hidden from the menu in the B2CORE UI or mobile app. * **custom** — a custom menu item that redirects clients to a specified URL for additional functionality. These items can be removed or hidden from the menu in the B2CORE UI and mobile app. *** **New** If `Yes`, a menu item is marked with the "New" label in the B2CORE UI. *** **Visible** Indicates whether a menu item is visible or hidden in the B2CORE UI: * The **active toggle** means that a menu item is visible in the B2CORE UI menu. * The **inactive toggle** means that a menu item is hidden from the B2CORE UI menu. To change the order in which menu items are displayed in the B2CORE UI, drag and drop them in the required order. To view menu item details, click the **Edit** button. ## Details [#details] On the details page, you can configure the following options: **Verification level allowance** A list of [verification levels](../verification/levels), indicating that a menu item is visible only to clients that obtained the specified levels. *** **Client Type Allowance** A list of [client types](../clients/types), indicating that a menu item is visible only to clients that are assigned the specified types. **See also** [How to configure a menu in the B2CORE UI](../../how-to-articles/manage-advertising-options/how-to-configure-a-menu-in-the-b2core-ui) [How to add custom menu items](../../how-to-articles/manage-advertising-options/how-to-add-custom-menu-items) The following statuses can be assigned to client requests: * **Pending** — identifies that a request was sent by a client but hasn't yet been processed by the admin. * **Approved** — identifies that a request was approved by the admin. * **Rejected** — identifies that a request was rejected by the admin. The following statuses can be assigned to client profiles: * **Active** — identifies a normal state. A client can sign in to the B2CORE UI. * **Inactive** — identifies registration issues. A client cannot sign in to the B2CORE UI. * **Banned** — identifies that a client is prohibited to sign in to the B2CORE UI. * **Deleted** *(deprecated)* — this status is no longer in use and shouldn’t be assigned. The following is a list of pre-configured email types used to notify clients and [Back Office users](../system/users/users), such as admins or managers, about specific system events. Each type is linked to an email template that can be customized in multiple languages and is used to send notifications via email. For every email type, usage conditions are specified in the **Description** column. For email types related to notifications about events on B2COPY, refer to the [B2COPY product documentation](https://docs.b2copy.b2broker.com/admin-guide/configure-b2copy/use-email-templates-to-notify-clients-about-important-events). ## To clients [#to-clients] The following is a list of email types used to notify clients: ## To Back Office users [#to-back-office-users] The following is a list of email types used to notify Back Office users, such as admins or managers: The following is a list of event types supported for delivering [event notifications](../system/event-notifications) to [Back Office users](../system/users/) via email, SMS, Slack, or Telegram. If pre-configured templates for sending notifications via email, Slack, or Telegram are available for a specific event type, the template names are indicated in the **Template** column. For event types without pre-configured templates, custom templates should be created. Following is a list of permissions that can be assigned to [products](../products/products) when configuring product settings in the Back Office. * **Enabled** — if selected, the accounts created based on the product are enabled. * **Trade enabled** — if selected, clients can trade on the accounts. * **Deposit** — if selected, clients can make deposits to the accounts. * **Withdraw** — if selected, clients can make withdrawals from the accounts. * **Visible** — if selected, the accounts are displayed in the B2CORE UI or in the mobile app. * **Transfer deposit** — if selected, clients can transfer funds to the accounts. * **Transfer withdraw** — if selected, clients can transfer funds from the accounts. * **Exchange** — if selected, clients can make exchanges on the accounts. * **Create from TR denied** — if selected, clients can’t create accounts in the B2CORE UI or in the mobile app; however, they can use the accounts that were created automatically after their first sign in to the B2CORE UI or created for them by the admin via the Back Office. The following is a list of cryptocurrency payment methods supported in B2CORE. In method names consisting of two codes separated by a dash, such as `USDT-ETH`, the first code indicates a cryptocurrency in which transactions are made and the second code indicates a blockchain on which transactions are initiated and stored. For each method, you can find an icon that can be displayed as the icon of a deposit or payout method in the B2CORE UI. The icons are used to easily identify payment methods. To add an icon to a [deposit](../system/deposit-system#deposit-methods) or [payout method](../system/payout-system#payout-methods), enter the icon name, such as `usdt-eth`, in the **Icon** field when configuring the method. ## Coins [#coins] | Icon | Method | Icon name | | -------------------------------------------------- | -------- | ------------ | | | BCH | bch | | | BTC | btc | | | DASH | dash | | | DOGE | doge | | | ETH | eth-etherium | | | ETH-ARB | eth-arb | | | ETH-BASE | eth-base | | | LTC | ltc | | | TRX | trx | | | XLM | xlm-stellar | | | XMR | xmr | | | XRP | xrp | | | ZEC | zec | ## Stablecoins [#stablecoins] | Icon | Method | Icon name | | --------------------------------------------------- | ------------- | ------------- | | | BUSD-BSC | busd-bsc | | | BUSD-T-BSC | busd-t-bsc | | | BUSD-ETH | busd-eth | | | DAI-BSC | dai-bsc | | | DAI-ETH | dai-eth | | | USDC-ARB | usdc-arb | | | USDC-AVAX | usdc-avax | | | USDC-BSC | usdc-bsc | | | USDC-ETH | usdc-eth | | | USDC-SOL | usdc-sol | | | USDC-TRX | usdc-trx | | | USDP-BSC | usdp-bsc | | | USDP-ETH | usdp-eth | | | USDT-ARB | usdp-arb | | | USDT-AVAX | usdt-avax | | | USDT-BNB | usdt-bnb | | | USDT-BSC | usdt-bsc | | | USDT-ETH | usdt-eth | | | USDT-OMNI | usdt-omni | | | USDT-Optimism | usdt-optimism | | | USDT-SOL | usdt-sol | | | USDT-TON | usdt-ton | | | USDT-TRX | usdt-trx | | | UST-BSC | ust-bsc | | | UST-ETH | ust-eth | | | TUSD-ETH | tusd-eth | ## Tokens [#tokens] | Icon | Method | Icon name | | ------------------------------------------------ | ---------- | ---------- | | | 1INCH-BSC | 1inch-bsc | | | 1INCH-ETH | 1inch-eth | | | AAVE-ETH | aave-eth | | | AKRO-ETH | akro-eth | | | ALPHA-ETH | alpha-eth | | | ALPHA-BSC | alpha-bsc | | | AMP-ETH | amp-eth | | | AUDIO-ETH | audio-eth | | | AXS-ETH | axs-eth | | | BADGER-ETH | badger-eth | | | BAL-ETH | bal-eth | | | BAND-BSC | band-bsc | | | BAND-ETH | band-eth | | | BAT-BSC | bat-bsc | | | BAT-ETH | bat-eth | | | BZRX-ETH | bzrx-eth | | | CAKE-BSC | cake-bsc | | | CEL-ETH | cel-eth | | | CHR-ETH | chr-eth | | | CHZ-ETH | chz-eth | | | COMP-ETH | comp-eth | | | CRV-ETH | crv-eth | | | ENJ-ETH | enj-eth | | | FET-ETH | fet-eth | | | FTM-BSC | ftm-bsc | | | FTM-ETH | ftm-eth | | | FTT-ETH | ftt-eth | | | GRT-ETH | grt-eth | | | HOT-ETH | hot-eth | | | LEO-ETH | leo-eth | | | LINK-BSC | link-bsc | | | LINK-ETH | link-eth | | | LRC-ETH | lrc-eth | | | MANA-ETH | mana-eth | | | MATIC-ETH | matic-eth | | | MKR-BSC | mkr-bsc | | | MKR-ETH | mkr-eth | | | NU-ETH | nu-eth | | | OCEAN-ETH | ocean-eth | | | OMG-ETH | omg-eth | | | QNT-ETH | qnt-eth | | | RARI-ETH | rari-eth | | | REEF-BSC | reef-bsc | | | REEF-ETH | reef-eth | | | REN-ETH | ren-eth | | | REV-ETH | rev-eth | | | RSR-ETH | rsr-eth | | | SAND-ETH | sand-eth | | | SHIB-ETH | shib-eth | | | SNX-BSC | snx-bsc | | | SNX-ETH | snx-eth | | | SRM-ETH | srm-eth | | | SUSHI-BSC | sushi-bsc | | | SUSHI-ETH | sushi-eth | | | SXP-BSC | sxp-bsc | | | SXP-ETH | sxp-eth | | | TEL-ETH | tel-eth | | | UNI-BSC | uni-bsc | | | UNI-ETH | uni-eth | | | YFI-BSC | yfi-bsc | | | YFI-ETH | yfi-eth | | | ZRX-ETH | zrx-eth | The tables below list the crypto- and fiat currencies supported in B2CORE. The ISO code, Alpha code, decimal precision, and icon (if available) are specified for each currency. The icons are used for graphical representation of currencies in the B2CORE UI. ## Fiat [#fiat] | Icon | ISO code | Alpha code | Precision | Name | | ----------------------------------------------------------- | -------- | ---------------- | --------- | ---------------------------------------------------------- | | | 8 | ALL | 2 | Albanian lek | | | 12 | DZD | 2 | Algerian dinar | | | 32 | ARS | 2 | Argentine peso | | | 36 | AUD | 2 | Australian dollar | | | 44 | BSD | 2 | Bahamian dollar | | | 48 | BHD | 3 | Bahraini dinar | | | 50 | BDT | 2 | Bangladeshi taka | | | 51 | AMD | 2 | Armenian dram | | | 52 | BBD | 2 | Barbados dollar | | | 60 | BMD | 2 | Bermudian dollar | | | 64 | BTN | 2 | Bhutanese ngultrum | | | 68 | BOB | 2 | Boliviano | | | 72 | BWP | 2 | Botswana pula | | | 84 | BZD | 2 | Belize dollar | | | 90 | SBD | 2 | Solomon Islands dollar | | | 96 | BND | 2 | Brunei dollar | | | 104 | MMK | 2 | Myanmar kyat | | | 108 | BIF | 0 | Burundian franc | | | 116 | KHR | 2 | Cambodian riel | | | 124 | CAD | 2 | Canadian dollar | | | 132 | CVE | 0 | Cape Verde escudo | | | 136 | KYD | 2 | Cayman Islands dollar | | | 144 | LKR | 2 | Sri Lankan rupee | | | 152 | CLP | 0 | Chilean peso | | | 156 | CNY (alias: CNH) | 2 | Chinese yuan | | | 170 | COP | 2 | Colombian peso | | | 174 | KMF | 0 | Comoro franc | | | 188 | CRC | 2 | Costa Rican colon | | | 191 | HRK | 2 | Croatian kuna | | | 192 | CUP | 2 | Cuban peso | | | 203 | CZK | 2 | Czech koruna | | | 208 | DKK | 2 | Danish krone | | | 214 | DOP | 2 | Dominican peso | | | 222 | SVC | 2 | Salvadoran colón | | | 230 | ETB | 2 | Ethiopian birr | | | 232 | ERN | 2 | Eritrean nakfa | | | 238 | FKP | 2 | Falkland Islands pound | | | 242 | FJD | 2 | Fiji dollar | | | 262 | DJF | 0 | Djiboutian franc | | | 270 | GMD | 2 | Gambian dalasi | | | 292 | GIP | 2 | Gibraltar pound | | | 320 | GTQ | 2 | Guatemalan quetzal | | | 324 | GNF | 0 | Guinean franc | | | 328 | GYD | 2 | Guyanese dollar | | | 332 | HTG | 2 | Haitian gourde | | | 340 | HNL | 2 | Honduran lempira | | | 344 | HKD | 2 | Hong Kong dollar | | | 348 | HUF | 2 | Hungarian forint | | | 352 | ISK | 0 | Icelandic króna | | | 356 | INR | 2 | Indian rupee | | | 360 | IDR | 2 | Indonesian rupiah | | | 364 | IRR | 2 | Iranian rial | | | 365 | IRT | 2 | Iranian Toman | | | 368 | IQD | 3 | Iraqi dinar | | | 376 | ILS | 2 | Israeli new shekel | | | 388 | JMD | 2 | Jamaican dollar | | | 392 | JPY | 0 | Japanese yen | | | 398 | KZT | 2 | Kazakhstani tenge | | | 400 | JOD | 3 | Jordanian dinar | | | 404 | KES | 2 | Kenyan shilling | | | 408 | KPW | 2 | North Korean won | | | 410 | KRW | 0 | South Korean won | | | 414 | KWD | 3 | Kuwaiti dinar | | | 417 | KGS | 2 | Kyrgyzstani som | | | 418 | LAK | 2 | Lao kip | | | 422 | LBP | 2 | Lebanese pound | | | 426 | LSL | 2 | Lesotho loti | | | 430 | LRD | 2 | Liberian dollar | | | 434 | LYD | 3 | Libyan dinar | | | 440 | LTL | 2 | Lithuanian Litas | | | 446 | MOP | 2 | Macanese pataca | | | 454 | MWK | 2 | Malawian kwacha | | | 458 | MYR | 2 | Malaysian ringgit | | | 462 | MVR | 2 | Maldivian rufiyaa | | | 478 | MRO | 1 | Mauritanian ouguiya | | | 480 | MUR | 2 | Mauritian rupee | | | 484 | MXN | 2 | Mexican peso | | | 496 | MNT | 2 | Mongolian tögrög | | | 498 | MDL | 2 | Moldovan leu | | | 504 | MAD | 2 | Moroccan dirham | | | 512 | OMR | 3 | Omani rial | | | 516 | NAD | 2 | Namibian dollar | | | 524 | NPR | 2 | Nepalese rupee | | | 532 | ANG | 2 | Netherlands Antillean guilder | | | 533 | AWG | 2 | Aruban florin | | | 548 | VUV | 0 | Vanuatu vatu | | | 554 | NZD | 2 | New Zealand dollar | | | 558 | NIO | 2 | Nicaraguan córdoba | | | 566 | NGN | 2 | Nigerian naira | | | 578 | NOK | 2 | Norwegian krone | | | 586 | PKR | 2 | Pakistani rupee | | | 590 | PAB | 2 | Panamanian balboa | | | 598 | PGK | 2 | Papua New Guinean kina | | | 600 | PYG | 0 | Paraguayan guaraní | | | 604 | PEN | 2 | Peruvian Sol | | | 608 | PHP | 2 | Philippine peso | | | 634 | QAR | 2 | Qatari riyal | | | 643 | RUB | 2 | Russian ruble | | | 646 | RWF | 0 | Rwandan franc | | | 654 | SHP | 2 | Saint Helena pound | | | 678 | STD | 2 | São Tomé and Príncipe dobra | | | 682 | SAR | 2 | Saudi riyal | | | 690 | SCR | 2 | Seychelles rupee | | | 694 | SLL | 2 | Sierra Leonean leone | | | 702 | SGD | 2 | Singapore dollar | | | 704 | VND | 0 | Vietnamese đồng | | | 706 | SOS | 2 | Somali shilling | | | 710 | ZAR | 2 | South African rand | | | 728 | SSP | 2 | South Sudanese pound | | | 748 | SZL | 2 | Swazi lilangeni | | | 752 | SEK | 2 | Swedish krona/kronor | | | 756 | CHF | 2 | Swiss franc | | | 760 | SYP | 2 | Syrian pound | | | 764 | THB | 2 | Thai baht | | | 776 | TOP | 2 | Tongan pa’anga | | | 780 | TTD | 2 | Trinidad and Tobago dollar | | | 784 | AED | 2 | United Arab Emirates dirham | | | 788 | TND | 3 | Tunisian dinar | | | 800 | UGX | 0 | Ugandan shilling | | | 807 | MKD | 2 | Macedonian denar | | | 810 | RUR | 2 | Russian ruble | | | 818 | EGP | 2 | Egyptian pound | | | 826 | GBP | 2 | Pound sterling | | | 834 | TZS | 2 | Tanzanian shilling | | | 840 | USD | 2 | United States dollar | | | 858 | UYU | 2 | Uruguayan peso | | | 860 | UZS | 2 | Uzbekistan som | | | 882 | WST | 2 | Samoan tala | | | 886 | YER | 2 | Yemeni rial | | | 901 | TWD | 2 | New Taiwan dollar | | | 931 | CUC | 2 | Cuban convertible peso | | | 932 | ZWL | 2 | Zimbabwean dollarA/10 | | | 933 | BYN | 2 | Belarusian ruble | | | 934 | TMT | 2 | Turkmenistan manat | | | 936 | GHS | 2 | Ghanaian cedi | | | 937 | VEF | 2 | Venezuelan bolívar | | | 938 | SDG | 2 | Sudanese pound | | | 940 | UYI | 0 | Uruguay Peso en Unidades Indexadas (URUIURUI) (funds code) | | | 941 | RSD | 2 | Serbian dinar | | | 943 | MZN | 2 | Mozambican metical | | | 944 | AZN | 2 | Azerbaijani manat | | | 946 | RON | 2 | Romanian leu | | | 947 | CHE | 2 | WIR Euro (complementary currency) | | | 948 | CHW | 2 | WIR Franc (complementary currency) | | | 949 | TRY | 2 | Turkish lira | | | 950 | XAF | 0 | CFA franc BEAC | | | 951 | XCD | 2 | East Caribbean dollar | | | 952 | XOF | 0 | CFA franc BCEAO | | | 953 | XPF | 0 | CFP franc (franc Pacifique) | | | 955 | XBA | | European Composite Unit(EURCO) (bond market unit) | | | 956 | XBB | | European Monetary Unit (E.M.U.-6) (bond market unit) | | | 957 | XBC | | European Unit of Account 9(E.U.A.-9) (bond market unit) | | | 958 | XBD | | European Unit of Account 17(E.U.A.-17) (bond market unit) | | | 959 | XAU | 2 | Gold (one troy ounce) | | | 960 | XDR | | Special drawing rights | | | 961 | XAG | 3 | Silver (one troy ounce) | | | 962 | XPT | 2 | Platinum (one troy ounce) | | | 963 | XTS | | Code reserved for testing purposes | | | 964 | XPD | 2 | Palladium (one troy ounce) | | | 965 | XUA | | ADB Unit of Account | | | 967 | ZMW | 2 | Zambian kwacha | | | 968 | SRD | 2 | Surinamese dollar | | | 969 | MGA | 1 | Malagasy ariary | | | 970 | COU | 2 | Unidad de Valor Real (UVR) (funds code) | | | 971 | AFN | 2 | Afghan afghani | | | 972 | TJS | 2 | Tajikistani somoni | | | 973 | AOA | 2 | Angolan kwanza | | | 975 | BGN | 2 | Bulgarian lev | | | 976 | CDF | 2 | Congolese franc | | | 977 | BAM | 2 | Bosnia and Herzegovina convertible mark | | | 978 | EUR | 2 | Euro | | | 979 | MXV | 2 | Mexican Unidad de Inversion (UDI) (funds code) | | | 980 | UAH | 2 | Ukrainian hryvnia | | | 981 | GEL | 2 | Georgian lari | | | 984 | BOV | 2 | Bolivian Mvdol (funds code) | | | 985 | PLN | 2 | Polish złoty | | | 986 | BRL | 2 | Brazilian real | | | 990 | CLF | 4 | Unidad de Fomento (funds code) | | | 994 | XSU | | SUCRE | | | 997 | USN | 2 | United States dollar (next day) (funds code) | | | 999 | XXX | | No currency | ## Crypto [#crypto] | Icon | ISO code | Alpha code | Precision | Name | | --------------------------------------------------------------- | -------- | ----------------- | --------- | --------------------------------------------------------- | | | 1000 | BTC (alias: XBT) | 8 | Bitcoin | | | 1002 | ETH | 18 | Ethereum | | | 1003 | LTC | 8 | Litecoin | | | 1004 | ETC | 8 | Ethereum Classic | | | 1005 | DASH (alias: DSH) | 8 | DASH | | | 1006 | BCH | 8 | Bitcoin Cash | | | 1007 | XMR | 8 | Monero | | | 1009 | PZM | 8 | Prizm | | | 1010 | XRP | 6 | Ripple | | | 1012 | XEM | 8 | XEM | | | 1015 | TFT | 8 | ThreeFold Token | | | 1018 | ADA | 8 | ADA | | | 1019 | DOGE | 8 | Dogecoin | | | 1020 | ZEC | 8 | Zcach | | | 1021 | XLM | 7 | Stellar | | | 1022 | EOS | 8 | EOS | | | 1023 | BWK | 8 | Bulwark | | | 1025 | NSD | 8 | Nasdacoin | | | 1026 | TRX | 8 | Tron | | | 1027 | FUT | 8 | FutPlayCoin | | | 1029 | MPC | 8 | MediaPlayCash | | | 1995 | XTZ | 8 | Tezos | | | 1996 | WAVES | 8 | Waves | | | 1997 | ICX | 8 | Icon | | | 1999 | BSV | 8 | Bitcoin SV | | | 2000 | B2B (alias: B2BX) | 18 | B2BX | | | 2005 | USDT | 8 | Tether | | | 2006 | EURT | 8 | Tether EUR | | | 2007 | R | 8 | Revain | | | 2008 | OMG | 8 | OmiseGO | | | 2009 | IOST | 8 | IOSToken | | | 2010 | VIU | 8 | Viuly | | | 2011 | EOS Token | 8 | EOS Token | | | 2012 | SRNT | 18 | Serenity | | | 2014 | NEO | 8 | NEO | | | 2016 | BXN | 8 | BITTXN | | | 2018 | DTC | 8 | DateCoin | | | 2020 | OLXA | 2 | OLXA | | | 2021 | PAX | 8 | PAX | | | 2022 | TUSD | 8 | TrueUSD | | | 2023 | GUSD | 8 | Gemini Dollar | | | 2024 | USDC | 8 | USD Coin | | | 2025 | BNB | 8 | Binance Coin | | | 2030 | XGT | 8 | XGT | | | 2032 | HDP | 4 | HedPay | | | 2033 | NADM | 8 | NeoAdam | | | 2034 | NOAH | 18 | NOAHCOIN | | | 2035 | TC | 8 | Titan Coin | | | 2036 | GGC | 18 | GG World Lottery | | | 2037 | SIM | 18 | Simmitri | | | 2038 | CTC | 18 | Catholic Coin | | | 2039 | MYX | 8 | Myoho | | | 2040 | CRAFTR | 18 | CraftR | | | 2041 | XRX | 8 | Global Property Register | | | 2042 | USDQ | 18 | USDQ | | | 2043 | ELLEX | 18 | Ellex Coin | | | 2044 | ANX | 8 | COINANX | | | 2045 | BNX | 8 | BTCNEXT Coin | | | 2046 | BFCL | 18 | BFCL Token | | | 2047 | ERN | 8 | EURON | | | 2048 | NWX | 8 | NIWIX Token | | | 2049 | C3W | 8 | C3 Wallet | | | 2050 | QDAO | 18 | Q DAO | | | 2051 | SPD | 18 | SPINDLE | | | 2053 | ZTX | 18 | Zulu Republic Token | | | 2054 | ITM | 8 | ITADAKI-MASU Coin | | | 2055 | DEC | 8 | Darico Ecosystem Coin | | | 2056 | KRWQ | 8 | KRWQ Stablecoin by Q DAO v1.0 | | | 2057 | NZE | 8 | Nagezeni | | | 2058 | NIOX | 8 | NIOX | | | 2060 | VEST | 8 | VestChain | | | 2061 | BKZ | 8 | Bitkruz Token | | | 2066 | FMT | 8 | Free Market Token | | | 2068 | DAI | 8 | Dai Stablecoin | | | 2070 | AZ | 8 | AZ Token | | | 2071 | B21 | 8 | B21 Token | | | 2075 | PDATA | 8 | PDATA | | | 2077 | BUSD | 8 | Binance USD | | | 2078 | ZVC | 8 | Zeven Coin | | | 2081 | ARBIS | 8 | ARBIS | | | 2083 | BII | 8 | Bitcoin 2 | | | 2084 | BDS | 8 | Bitcoin Dollar Stable | | | 2086 | BWON | 8 | Bitcoin BWON | | | 2087 | BYUN | 8 | Bitcoin BYUN | | | 2088 | NEX | 8 | NEX | | | 2090 | TEX | 8 | TEX | | | 2106 | AKRO | 18 | Akropolis | | | 2107 | ALPHA | 18 | Alpha Finance Lab | | | 2110 | BZRX | 18 | bZx Protocol | | | 2111 | CHR | 6 | Chromia | | | 2113 | MANA | 18 | Decentraland | | | 2114 | FTT | 18 | FTX Token | | | 2115 | LRC | 18 | Loopring | | | 2117 | COMP | 18 | Compound | | | 2121 | RSR | 18 | Reserve Rights | | | 2122 | SRM | 6 | Serum | | | 2123 | SHIB | 18 | SHIBA INU | | | 2126 | SNX | 18 | Synthetix | | | 2128 | SAND | 18 | The Sandbox | | | 2132 | BAND | 18 | Band Protocol | | | 2133 | BAT | 18 | Basic Attention Token | | | 2136 | SUSHI | 18 | SushiSwap | | | 2141 | YFI | 18 | yearn.finance | | | 2146 | FTM | 18 | Fantom | | | 2147 | AXS | 18 | Axie Infinity | | | 2153 | CHZ | 18 | Chiliz | | | 2160 | 1INCH | 18 | 1inch | | | 2161 | OCEAN | 18 | Ocean Protocol | | | 2947 | CAKE | 18 | PancakeSwap | | | 2949 | CRV | 18 | Curve DAO Token | | | 2956 | REN | 18 | Ren | | | 2957 | CEL | 4 | Celsius | | | 2959 | ENJ | 18 | Enjin Coin | | | 2962 | GRT | 18 | The Graph | | | 2964 | AAVE | 18 | Aave | | | 2968 | COVIP | 8 | COVIP | | | 2969 | SCAMUNKNOWN | 8 | Scam ALERT: UNKNOWN status. Audit made by Q DeFi Rating | | | 2970 | SCAMMEDIUMRISK | 8 | Scam ALERT: Medium Risk. Audit made by Q DeFi Rating | | | 2971 | SCAMHIGH | 8 | Scam ALERT: HIGH probability. Audit made by Q DeFi Rating | | | 2972 | NOAHARK | 8 | NOAH’s DeFi ARK v.1 Governance Token | | | 2973 | FLR | 8 | Spark | | | 2974 | FXRP | 8 | Spark | | | 2975 | XYM | 8 | XYM | | | 2976 | QDEFI | 8 | Q DeFi Rating & Governance token v2.0 Token | | | 2977 | T34 | 8 | Platinum Software TECHNOLOGIES | | | 2978 | CNYQ | 8 | CNYQ Stablecoin by Q DAO | | | 2979 | JPYQ | 8 | JPYQ Stablecoin by Q DAO | | | 2980 | MILK2 | 8 | MILK2 Coin | | | 2981 | SHAKE | 8 | SHAKE Coin | | | 2982 | MATIC | 8 | Matic Network | | | 2983 | ERG | 8 | Ergo | | | 2984 | LTCP | 8 | Litecoin PoS | | | 2985 | ZRX | 8 | 0x | | | 2986 | BIP | 8 | Minter | | | 2987 | ATOM | 8 | Cosmos | | | 2988 | GRAM | 8 | Telegram Open Network IOU | | | 2989 | JPYQ | 8 | JPYQ | | | 2990 | NOAHP | 8 | NOAH.platinum | | | 2991 | CC | 8 | Custom Coin | | | 2993 | SPD | 8 | Spindle | | | 2994 | OWC | 8 | ODUWA Coin | | | 2995 | NCER | 0 | NIWIX Certificate | | | 2996 | NWX | 8 | NIWIX Token | | | 2997 | ERN | 8 | EURON | | | 2998 | BFCL | 8 | BFCL Token | | | 2999 | ABBC | 8 | ABBC | | | 3007 | UMA | 18 | UMA Voting Token v1 | | | 3099 | ALICE | 6 | ALICE | The following statuses can be assigned to transactions such as deposits, withdrawals, transfers, internal transfers, and exchanges: * **New** — a transaction was created but hasn’t yet been processed. * **Pending** — indicates either that a transaction request awaits approval from the admin or that some technical issues occurred. * **Hold** *(applicable for withdrawals only)* — a requested withdrawal amount is being put on hold on a client account. * **Hold failed** *(applicable for withdrawals only)* — an error occurred when putting on hold a requested withdrawal amount. * **Refund** *(applicable for withdrawals only)* — after putting on hold a requested withdrawal amount, a transaction wasn’t further processed and the amount was successfully refunded to a client. * **Refund failed** *(applicable for withdrawals only)* — a requested withdrawal amount put on hold on a client account failed to be refunded due to technical issues. * **In progress** — a transaction is being processed. * **Done** — a transaction was successfully completed. * **Partial** — transaction processing wasn’t finished due to technical issues. Such transactions need to be addressed on the [Finance > Transactions](../finance/transactions) page (for details, refer to [How to process transactions with the Partial status](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-partial-status)). * **Assistance** — indicates that the transaction status couldn't be determined automatically and the transaction requires manual action. This status may apply only to deposits and withdrawals initiated through methods connected via [PSS](../../integrations/payment-systems#payment-system-service-pss). The admin must decide whether to continue syncing the status with the external payment system used to process the transaction or mark it as failed (for details, refer to [How to process transactions with the Assistance status](../../how-to-articles/manage-finances/how-to-process-transactions-with-the-assistance-status)). * **Failed** — a transaction failed due to incorrect parameters. * **Rejected** — a transaction request was rejected by the admin. * **Canceled** — a transaction was canceled by a client. ## Introduction to Savings [#introduction-to-savings] Savings programs offer clients a way to invest their idle funds and earn interest by holding them on savings accounts. These programs provide a passive method to grow their crypto or fiat assets, similar to traditional bank savings accounts. ## Key points [#key-points] * Savings programs can operate based on `Fixed` and `Flexible` strategies. * In a `Fixed` strategy, clients must invest a predefined amount and earn a fixed interest rate throughout the program’s duration. These programs have a set period during which clients must hold their funds, and interest is accrued and paid according to the payment period set in a program. * The `Flexible` strategy allows clients to deposit the minimum required amount or more and make additional deposits. The interest rate is flexible and determined by tiers, which assign rates based on the invested amount. Programs with flexible strategies aren’t limited by time, and interests are accrued daily and paid to clients on the first day of each month. * To subscribe to a savings program, clients must have wallets denominated in the program currency. Earned interests are then paid to the same client wallets. * When clients subscribe to savings programs and invest the required amounts, individual savings plans are created for them, including lists of interest payments. * For both strategies, partial withdrawals are prohibited. Clients can only withdraw the full amount of invested funds, which leads to the termination of their respective savings plans. On this page, you can view a list of savings plans that are created for clients after they subscribe to savings programs. ## General information [#general-information] The following information is provided about each plan: **ID** The plan identifier. *** **Status** The plan status. *** **Strategy** The savings strategy: * `Fixed` — a fixed interest rate * `Flexible` — a flexible interest rate *** **Preset** The identifier of a preset containing settings of the savings program to which a client subscribed. Click the identifier to navigate to the preset details page and view the program settings. *** **Client** The client identifier. Click the identifier to navigate to the client details page and view information about the client. *** **Wallet account number** The identifier of a client wallet to which earned interest is paid. *** **Details** The essential settings (such as the currency, investment amount, admission fee, and cancellation penalty) of the savings program to which a client subscribed. *** **Created** The date and time when a client subscribed to a savings program. To view payment plan details, click view-button. ## Details [#details] On the details page, you can view settings of the savings program to which a client subscribed. Additionally, a list of interest payments is displayed. For `Fixed` strategies, the payments list includes scheduled payments as well as payments that have been already made to a client wallet. For `Flexible` strategies the list displays only payments made to a client. To view all interest payments made to all clients, go to [Finance > Transactions](../finance/transactions) and filter the **Type** column by **Savings Payment**. The payments in the **Done** status are listed in the **Transactions**. The following information is provided about each interest payment on the details page: **ID** The identifier of a payment transaction. *** **Amount** The interest amount. *** **Due date**\ *Applicable only for Fixed strategies* The date and time when a payment is scheduled to be made. *** **Status** The payment status: * `Scheduled` — indicates that a payment is scheduled but hasn’t yet been made * `Paid` — indicates that a payment has been made to a client * `Cancelled` — indicates that a payment was cancelled because the client decided to withdraw the investment amount before the end of the plan length (for `Fixed` strategies) or before the end of the penalty period (for `Flexible` strategies). *** **Paid date** Only for interest payments to which the `Paid` status is assigned. The date and time when interest was paid to a client. On this page, you can view a list of presets with savings program settings, modify them, and create new ones. Presets can’t be deleted but can be disabled by changing their status to **Inactive**. ## General information [#general-information] The following information is provided about each savings program: **ID** The identifier of a savings program. *** **Name** The unique name of a savings program, which is displayed to clients in the B2CORE UI. *** **Strategy** The savings strategy: * `Fixed` — a fixed interest rate * `Flexible` — a flexible interest rate *** **Currency** The currency of a savings program. To subscribe to the program, your clients must have wallets denominated in the program currency. *** **Status** The status of a savings program. * If **Active**, the card showing details of a savings program is displayed in the B2CORE UI, and clients can subscribe to the program. * If **Inactive**, the card of a savings program isn’t displayed in the B2CORE UI. *** **Created** The date and time when a savings program was created. *** **Last update** The date and time when a savings program was last updated. To view savings program details, click the **Edit** button. ## Details [#details] On the details page, you can view and modify the following program settings: **Name** The unique name of a savings program, which is displayed to clients in the B2CORE UI. *** **Status** The status of a savings program. * If **Active**, the card showing details of a savings program is displayed in the B2CORE UI, and clients can subscribe to the program. * If **Inactive**, the card of a savings program isn’t displayed in the B2CORE UI. *** **Admission fee** The fee amount that a client must pay for participation in a savings program. When subscribing to the program, the admission is deducted from a client wallet denominated in the program currency. The field is optional. If you don’t want to charge the admission fee, enter 0 (zero). *** **Description** The description of a savings program, which is displayed to clients in the B2CORE UI. ### Flexible Preset Details [#flexible-preset-details] **Minimum investment amount** The minimum amount of the initial investment. When subscribing to a program, clients must invest the specified minimum or more. *** **Minimum additional investment amount** The minimum amount that clients can add to the initial investment. The minimum investment and additional investment amounts can be specified as integer or decimal values. *** **Payment period** The frequency of interest payments to a client wallet. Always, `The first day of each month` and can’t be changed. *** **Penalty period (days)** The period, in days, during which a client can’t withdraw their invested funds without a penalty. *** **Penalty type** Defines how the penalty is calculated when a client withdraws invested funds before the end of the penalty period: * **Fixed** — a fixed amount is deducted as a penalty. * **Percentage** — a percentage of the total invested funds is deducted as a penalty. *** **Redeem penalty** For the **Fixed** penalty type, specifies the exact penalty amount charged to a client. The amount must be an integer or decimal value and must be lower than the minimum investment amount. For the **Percentage** penalty type, specifies the percentage of the total invested funds deducted as a penalty. Partial withdrawals *aren't* allowed. Clients are only allowed to withdraw the full amount of their invested funds, which results in the termination of their savings plans. If a client withdraws their invested funds during the the penalty period, the amount that the client can return to their wallet is calculated as follows: `Total invested amount - Penalty amount` ### Tiers [#tiers] In this section, you can view the number of added tiers that are used to apply flexible interest rates. For each tier, the following parameters are specified: **Tier from** The minimum amount that clients must invest to get an interest rate assigned to that tier. This amount indicates the tier’s starting point and the previous tier’s end point. *** **Annual percentage rate** The annual interest rate, in percentage, applied to the tier. There is the tier with the **Tier From** value equal to 0 (zero), which can’t be removed. For example, suppose you have the following tiers configured: * Tier 1: the **Tier from** is 0 and the **Annual percentage rate** is 1% * Tier 2: the **Tier from** is 2,000 and the **Annual percentage rate** is 2% If a client invests 500, that client receives an interest rate of 1%. If the client adds 1,499, bringing the total invested amount to 1,999, the interest rate remains at 1%. Once the client adds more funds and reaches a total investment of 2,000 or more, the interest rate increases to 2%. When modifying tiers, you can select the **Update Savings Plans Tiers** to apply the modified tiers to the savings plans that have already been created based on the selected preset (for details, refer to [Modify tiers for savings programs with Flexible strategies](../../how-to-articles/manage-savings-programs/how-to-create-a-savings-program/configure-the-flexible-strategy-settings#modify-tiers-for-savings-programs-with-flexible-strategies)). ### Fixed Preset Details [#fixed-preset-details] **Plan length (days)** The holding period, in days, during which the investment amount contributed to a savings program must be held. The plan length can be specified with an interval of 30 days, such as 30, 60, 90, and so on. At the end of the plan length, the investment amount is refunded to the client wallet. *** **Payment period (days)** The payment period, in days, indicating how often interest is accrued and paid to a client wallet. The payment period can be specified with an interval of 30 days, such as 30, 60, 90, and so on. *** **Investment amount** The amount that must be contributed to a savings program. When subscribing to the program, the investment amount is deducted from a client wallet denominated in the currency of the savings program. If a client has more than one wallet denominated in the program currency, the client can select a wallet from which the investment amount should be deducted. *** **Interest rate (percent)** The percentage of the investment amount, which is used to calculate interest earned at the end of each payment period. *** **Penalty type** Defines how the penalty is calculated when a client withdraws invested funds before the end of the plan length: * **Fixed** — a fixed amount is deducted as a penalty. * **Percentage** — a percentage of the invested funds is deducted as a penalty. *** **Cancellation penalty** For the **Fixed** penalty type, specifies the exact penalty amount charged to a client. The amount must be an integer or decimal value and must be lower than the investment amount. For the **Percentage** penalty type, specifies the percentage of the investment amount deducted as a penalty. Partial withdrawals *aren't* allowed. Clients are only allowed to withdraw the full investment amount, which results in the termination of their savings plans. If a client withdraws their invested funds during the the penalty period, the amount that the client can return to their wallet is calculated as follows: `Investment amount - Penalty amount` **See also** [How to create a savings program](../../how-to-articles/manage-savings-programs/how-to-create-a-savings-program/) On this page, you can view a list of withdrawal addresses that clients added to their whitelists. After clients enable the **Address Management** option in the B2CORE UI, they can withdraw funds only to the wallet addresses that they added to their whitelists. If the **Address Management** option is disabled, clients can withdraw funds to any wallet address. The following information is provided about each whitelisted withdrawal address: **Client ID** The identifier of a client who added a withdrawal address to their whitelist. *** **Client Email** The client email address. *** **Wallet address** A string value identifying the address of a wallet that is used for withdrawing funds. *** **Destination tag** The destination tag used to identify a transaction recipient. It is applicable only for certain currencies (XRP, XLM, BNB, and XEM). *** **Currency** The currency in which a wallet for withdrawing funds is denominated. On this page, you can view a list of existing black lists and create new ones. **Black lists** block specific IP addresses from accessing certain API endpoints. This feature helps quickly block unwanted traffic or potential attackers at the application level. Blacklisting is an emergency measure and is not as reliable as blocking attackers at the server level. Contact your system administrators. ## General information [#general-information] The following information is provided about each black list: **ID** The identifier of the black list. *** **Route** The API endpoint to which access is prohibited. *** **IP** The blacklisted IP address or subnet mask. *** **Active** The status of the black list. *** **Comment** The reason for blacklisting. *** **Created at** The date and time when the black list was created. *** **Updated at** The date and time when the black list was last updated. ## Examples [#examples] * **Block access to all API endpoints under a certain path** To block access to all endpoints under `/api` for a given IP address, specify `/api/*` in the **Route** field. * **Block access only to specific API endpoints under a certain path** To block access to specific endpoints under a path while allowing access to others, specify the more detailed path in the **Route** field. For example, by specifying `/api/v2/accounts/*`, you can block access to the endpoints, such as `/api/v2/accounts/:accountId` and `/api/v2/accounts/:accountId/balance`, but still allow access to `/api/v2/accounts` for a given IP address. On this page, you can view a list of clients who are temporarily blocked because of, for example, exceeded login attempts limit (for details, refer to [Systm > Settings](../system/settings)). You can unblock these clients here. **Client ID** The client identifier. *** **Client email** The email address of the client. *** **IP** The IP address from which the client logged in to the B2CORE UI. *** **Blocked at** The date and time when the client was blocked. *** **Expired at** The date and time when the blocking is set expire. *** **Reason** The reason for the blocking. On this page, you can view and manage blacklisted email domains. If a domain is blacklisted, clients can’t use email addresses from that domain to register in the B2CORE UI. For example, if `examplemail.com` is blacklisted. The email addresses such as `@examplemail.com` are blocked from registering in the B2CORE UI. If the **Ban existing users** checkbox is enabled for a blacklisted domain, the existing clients with email addresses from that domain will lose access to the B2CORE UI. The following information is provided on the page: **ID** The identifier assigned to the blacklisted email domain. *** **Domain** The name of the blacklisted email domain. *** To view details or modify a blacklisted email domain, click the **Edit** button. In the displayed popup, you can check the status of the **Ban existing users** checkbox, enable or disable it, or edit the domain name. If you made any edits, click **Save** to apply the changes. To remove an email domain from the blacklist, click the **Delete** button. You can export data from the page in CSV or XLSX format by clicking the respective buttons in the upper-right page corner. The file in the selected format will be automatically downloaded to your computer. On this page, you can view a list of logins to the system. **Client ID** The client identifier. *** **Client** The client’s name. *** **Client email** The email address of the client. *** **IP** The IP address from which the client logged in to the B2CORE UI. *** **Auth date** The date and time when the client logged in to the B2CORE UI. *** **Status** The authorization result. Above the table, you can enable the **Hide IP Duplicates** option to group entries by unique email + IP pairs and hide repeated entries. On this page, you can check client transactions, view risk scores, trace the origin of the funds, and examine all key signals associated with each transaction. ## General information [#general-information] The following information is provided about each transaction: **Client ID** The identifier of the user who created the transaction. *** **Transaction ID** The identifier of the transaction. *** **Transaction Type** The transaction type: deposit or withdrawal. *** **Created date** The date and time of the transaction. *** **Email** The email address of the client. *** **Source amount** The transaction amount in the source currency. *** **Source currency** The transaction currency. *** **Provider** The name of the risk monitoring provider (**SumSubstance** available at the moment). *** **Review Result** The transaction check result from the risk monitoring provider: red, green, or error. *** **Risk Score** The risk score of the transaction from the risk monitoring provider. To view the details, click the **Edit** button. ## Details [#details] The detailed information includes additional transaction signals, such as the source of the funds, any potential risk of theft, the money laundering (ML) risk level of the exchange, and more. On this page, you can view a list of existing white lists and create new ones. **White lists** can be used to restrict access to specific URLs, allowing access only from whitelisted IP addresses. The following information is provided about each white list: **ID** The identifier of the white list. *** **Route** The URL to which access is granted. *** **IP** The whitelisted IP address or subnet mask. *** **Active** The status of the white list. *** **Comment** The reason for whitelisting. *** **Created at** The date and time when the white list was created. *** **Updated at** The date and time when the white list was last updated. On this page, you can view a list of configured tests for client accreditation. When configuring [verification levels](levels), you can specify accreditation tests that your clients must pass before submitting documents for obtaining a higher level. ## General information [#general-information] The following information is provided about each test: **ID** The identifier of a test. *** **Caption** The test’s title displayed to clients in the B2CORE UI. *** **Visible** If **Yes**, a test is available to clients in the B2CORE UI; otherwise, **No**. To view the details about an existing test or modify it, click the **Edit** button located in a corresponding row. ## Details [#details] The details page contains the following tabs: On this tab, the **Caption** and **Visibility** fields can be modified. In the **Details** field, you can specify a test’s description or any other helpful information that clients should know before they start passing the test. Such information will be displayed under the test’s title in the B2CORE UI. On this tab, you can add questions of different types and answer options to a test. The following question types are available: * **open** — an open-ended question that can be answered in a free form. * **close** — a close-ended question that can be answered by choosing a single or multiple correct answers from a given list of options. * **questionnaire** — a multiple-choice question that can be answered by choosing one or more answers from a given list of options. * **poll** — a multiple-choice question that can be answered by choosing a single answer from a given list of options. **See also** [How to create a client accreditation test](../../how-to-articles/manage-verification-options/how-to-create-a-client-accreditation-test) On this page, you can view a list of created document groups and create new ones. ## General information [#general-information] The following information is provided about each document group: **Priority** The priority index assigned to the document group. *** **Name** The document group name. *** **Caption** The document group name displayed in the B2CORE UI. *** **Type** The type of the document group. *** **Enabled** If `Yes`, this group can be used for verification. To view the details, click the **Edit** button. ## Details [#details] The detailed information includes: **Name** The document group name. *** **Type** The type of the document group. *** **Caption** The document group name displayed in the B2CORE UI, which can be localized for different interface languages. *** **Description** The document group description displayed in the B2CORE UI, which can be localized for different interface languages. *** **Enabled** If `Yes`, this document group can be used for verification. *** **Priority** The priority index assigned to the document group. On this page, you can view a list of created document types and create new ones. ## General information [#general-information] The following information is provided about each document type: **Priority** The priority index assigned the document type. *** **Name** The document type name used in the Back Office. *** **Caption** The document type name displayed in the B2CORE UI. *** **Status** If `Enabled`, this document type can be used for verification. To view document type details, click the **Edit** button. ## Details [#details] The detailed information includes: **Name** The document type name used in the Back Office. *** **Caption** The document type name displayed in the B2CORE UI, which can be localized for different interface languages. *** **Description** The document type description displayed in the B2CORE UI, which can be localized for different interface languages. *** **Status** If `Enabled`, this document type can be used for verification. *** **Example** An example of the file that can be submitted for this document type. *** **Group** One or more [document groups](document-groups) in which this document type is included. *** **Max files** The maximum number of files that can be uploaded for this document type. *** **Priority** The priority index assigned to the document type. On this page, you can view a list of all documents submitted by clients for verification. ## General information [#general-information] The following information is provided about each document: **ID** The document identifier. *** **Type** The [document type](document-types). *** **Status** The current [status of the client request](../references/client-request-statuses) for document approval. *** **Client ID** The identifier of the client who submitted the document. *** **Client Name** The name of the client who submitted the document. *** **Email** The email address of the client who submitted the document. *** **Request ID** The identifier of a client’s document approval request. *** **Uploaded by** Indicates who uploaded the document. *** **Uploaded at** The date and time when the document was uploaded. To view document details, click the **Edit** button. ## Details [#details] The detailed information includes: **Type** The [document type](document-types). *** **Files** The link to the document file. On this page, you can view a list of the verification levels available in the Back Office, create new levels and configure their settings. ## General information [#general-information] The following information is provided about each verification level: **Index** The index assigned to a verification level. The zero (`0`) index is always assigned to the default verification level. For the other verification levels, the index must be greater than zero. *** **Caption** The localized level name displayed in the B2CORE UI and mobile app. *** **Desktop Description** The localized level description displayed in the B2CORE UI. The description for the B2CORE UI can be specified in the HTML format. Additionally, you can specify a level description for displaying in the mobile app by navigating to verification level details and filling in the **Mobile Description** field. The description for the mobile app can be specified in the JSON format. *** **Default** If `Yes`, a verification level is the default one and granted to all newly registered clients; otherwise, `No`. *** **Visible** If `Yes`, a verification level is displayed to clients in the KYC flow in the B2CORE UI; if set to `No`, it's hidden. Use the **Visibility** set to `No` to create hidden levels (for example, levels with specific transaction limits) that can be assigned to clients manually via the Back Office. Once assigned, the client can view the level and its description, including limits and other relevant information, on the **Verification** page available through the **Profile** menu in the B2CORE UI. For all other clients who aren't assigned this level, it remains hidden. To view verification level details, click the **Edit** button related to a selected level. ## Details [#details] The following additional information is provided about each verification level: **Wizard** The name of a wizard used to run a verification procedure in the B2CORE UI, enabling clients to process to the next verification level. Possible options: * **SnsWizardSDK** — opens the SumSub popup in the B2CORE UI for verification instructions and document upload. * **ShuftiProSDK** — opens the SuftiPro popup in the B2CORE UI for verification instructions and document upload. * **DocumentsWizard** — uses the built-in KYC provider and displays in the B2CORE UI a form for document upload based on the specified document groups. *** **Next level** The next verification level that clients can be granted after obtaining this verification level. *** **Mobile Description** The localized level description displayed in the mobile app. The description for the mobile app can be specified in the JSON format. *** **Mail description** The level description used in email notifications. *** **Assigned Client Right** The [permission set](../system/client-rights) specifying which actions clients are allowed to perform in the B2CORE UI after obtaining this verification level. *** **Client Tests** One or several accreditation tests that clients must pass before submitting documents required for obtaining this verification level (to learn more, refer to [How to create a client accreditation test](../../how-to-articles/manage-verification-options/how-to-create-a-client-accreditation-test)). *** **Document Groups** One or several [groups](document-groups) which include the documents that must be submitted by clients to obtain this verification level. *** **Limits** The transaction limits specified in USD for this level (to learn more, refer to [How to set up deposit, withdrawal and transfer limits by verification levels](../../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor#how-to-set-up-deposit-withdrawal-and-transfer-limits-by-verification-levels)). **See also** [How to create verification levels](../../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor#how-to-create-verification-levels) On this page, you can view a list of images displayed throughout the Back Office. The following data is provided about each image: **Type** The user interface element for which an image is specified, such as: * the main menu logo * the logo on the login page * the background image on the login page *** **Path image** The path to an image. **See also** [How to change Back Office images](../../how-to-articles/manage-system-settings/how-to-change-back-office-images) On this page, you can view a list of executed bulk actions. Bulk actions allow you to perform specific actions affecting multiple clients at once. ## General information [#general-information] The following information is provided about each bulk action: **Name** The action name. *** **Action** The action type. The following action types are available: * ban clients * change a client type * change an internal client type * change a verification level * make a deposit * zero out balances *** **Status** The status of a bulk action, indicating whether it has been successfully executed. *** **Created at** The date and time when a bulk action was created and executed. *** **Updated at** The date and time when a bulk action was last modified. *** **User** The email address of a [Back Office user](users/) who executed a bulk action. To view bulk action details, click the **Edit** button. ## Details [#details] The following additional information is provided about each bulk action: **Description** The bulk action description. *** **Log message** A log message specifying the result of an executed bulk action. *** **System log** The log of operations made during bulk action execution. **See also** [How to create a bulk action](../../how-to-articles/manage-system-settings/how-to-create-a-bulk-action) On this page you can view and manage a folder tree with any nesting depth, pre-defined for all clients. Folders configured on this page will be displayed on the [Files tab](../clients/general/files-tab) in the client’s details. When renaming a folder on this page, it is automatically renamed on the Files tab in the client’s details. Admin users can create custom folders for a specific client on the [Files tab](../clients/general/files-tab), but the pre-defined folders cannot be edited or removed. If a system folder is created with the same name as that of an existing custom folder of some client, a `_Custom` postfix is added to the name of the custom folder, and a system folder with the same name is created next to it. **Key points about permissions** * You can assign access permissions to a folder, to specify which groups of users can view and edit it in the [Files tab](../clients/general/files-tab). * By default, nested folders inherit the access permissions from the parent folder. Their access permissions cannot be broader than that of the parent folder. * When access permissions assigned to a parent folder are revoked from a user group, access to all nested folders is automatically restricted for these users. * After access to a parent folder is granted to a user group, this group will NOT be automatically granted access to nested folders In the folders list you can see a list of created top-level folders: **Name** The folder name. *** **Created at** The date and time when the folder was created. *** **Updated at** The date and time when the folder was last modified. To see folder details, click the **Edit** button. Each folder has the following tabs: On this tab, you can view the folder path. On this tab, you can view a list of nested folders of the parent folder. Nesting depth is unlimited, and each folder can have its own subdirectories as well. Breadcrumbs are displayed at the top of the page for convenient navigation. On this tab, you can view a list of available Back Office user groups and toggle switches, which show whether the users from this group can view the folder and its content on the [Files tab](../clients/general/files-tab) in the client’s details. Note that you can use the **Turn on all** and **Turn off all** buttons to quickly provide or restrict access to folders. On this page, you can create and edit permission levels indicating which operations clients are allowed to make in the B2CORE UI. Permission levels are associated with [verification levels](../verification/levels). When clients obtain a particular verification level, they are granted the permissions associated with this verification level. To grant specific permissions to a client, go to the [Settings tab](../clients/general/settings-tab) on the client details page, and then select the required permissions in the **Rights** section. ## General information [#general-information] The following information is provided about each permission level: **Caption** The description of a permission level. *** **Created At** The date and time when a level was created. *** **Updated At** The date and time when a level was updated. *** **Default (Y/N)** If `Y`, this permission level is the default one and is assigned to all clients that were granted the initial [verification level](../verification/levels). To view permission level details, click the **Edit** button. ## Details [#details] On the details page, you can view the following additional information and select the permissions that you want to grant to your clients at this level: **Name** The name of a level. *** **Caption** The description of a level. *** **Parent Role** The previous permission level that clients must obtain before they can get this level. This field is not applicable to the default permission level. The following permission options are available: * **Verification**\ If selected, clients are allowed to obtain a higher [verification level](../verification/levels) in the B2CORE UI. * **Converter**\ If selected, clients can exchange funds in the B2CORE UI. * **Deposits**\ If selected, clients can deposit funds in the B2CORE UI. * **Withdrawals**\ If selected, clients can withdraw funds in the B2CORE UI. * **Internal Transfers**\ If selected, funds can be transferred from one client to another within the same B2CORE system. On this page, you can view a list of countries that your clients can select when signing up to the B2CORE UI (if they are required to select a country during registration). A country is listed on the Registration form if a switch displayed in the **Enabled** column for this country is in the *active* state. A country is hidden on the Registration form if the switch is in the *inactive* state. You cannot add new countries or edit country-related data, you can only set visibility for the countries listed on this page. The following information is provided about each country: **ID** The identifier of a country in the system. *** **Name** The name of a country (for example, `Mexico`). *** **Full name** The official name of a country (for example, `the United Mexican States`). *** **Country code** The code assigned to a country in the system. *** **ISO 3166-2** The geocode assigned to a country (as per ISO 3166-2). *** **ISO 3166-3** The geocode assigned to a country (as per ISO 3166-3). *** **Capital** The capital city of a country. *** **Currency** The name of a national currency. *** **Currency symbol** The graphical representation of a national currency (for example, `$`). *** **Currency code** The Alpha code of a national currency. *** **Currency sub unit** The name of a fraction of the main currency unit (for example, `cent`). *** **Region code** The area code assigned to a country (as per UN M49). *** **Sub region code** The area subcode assigned to a country (as per UN M49). *** **Enabled** If the switch is in the *active* state, your clients can select this country when signing up to the B2CORE UI. You can download the list of countries to your computer as a CSV or XLSX file. To do this, click the **CSV** or **Excel** button located in the upper-right corner of the page. Custom fields let you collect additional client information beyond the standard profile fields. You define a field once and organize it into a group. You can then add it to a registration form, where clients fill it in during registration, and its value can always be filled in or edited by an admin on the client profile. You manage custom fields in the **System** > **Custom Fields** menu, which contains two pages: * **Groups** — sections that organize related fields. * **Fields** — the individual fields, each belonging to a group. Access to custom fields is controlled by the following permissions, which you grant to back-office user groups in **System** > **Users** > **Groups**. | Permission | Grants the ability to | | ------------------------------- | ----------------------------------------------- | | View Custom Fields | View the **Groups** and **Fields** pages. | | Create Custom Fields | Create groups, fields, and options. | | Update Custom Fields | Edit groups, fields, and options. | | Archive Custom Fields | Archive groups, fields, and options. | | View client custom field values | View custom field values on the client profile. | | Edit client custom field values | Edit custom field values on the client profile. | ## Groups [#groups] A group is a labeled section that holds related fields. On the client profile and in the registration form, fields are displayed under their group. The **Groups** page lists the existing groups with the following information. **Label (English)** The group name shown to clients and admins. You can localize this label through B2TRANSLATE (see [Translations](custom-fields#translations)). *** **Machine name** A unique identifier used in translation keys and the API. You set the machine name when you create the group, and it can't be changed afterward. *** **Sort order** The position of the group relative to other groups. Groups with a lower sort order appear first. *** **Archived** Indicates whether the group is archived. To create a group: Navigate to **System** > **Custom Fields** > **Groups**. Click **Create**. Specify the **Label (English)**, **Machine name**, and **Sort order**. Click **Save**. To edit a group, click the **Edit** button. You can change the **Label** and **Sort order**; the **Machine name** is fixed. To archive a group, click the **Archive** button. Archived groups are hidden from new registration forms, but they remain visible on client profiles where a stored value exists, so retiring a group never hides data already collected. ## Fields [#fields] A field is a single input, such as a text box, a dropdown, or a date picker. Each field belongs to one group. The **Fields** page lists the existing fields with their **Label (English)**, **Machine name**, **Type**, **Group**, and **Archived** status. ### Field types [#field-types] The following field types are supported. | Type | Description | | ----------- | ------------------------------------------- | | Text | A single-line text input. | | Multiline | A multi-line text area. | | Email | A text input validated as an email address. | | URL | A text input validated as a URL. | | Phone | A phone number input. | | Integer | A whole number. | | Decimal | A number with a fractional part. | | Boolean | A yes/no value. | | Select | A dropdown allowing a single option. | | Multiselect | A dropdown allowing multiple options. | | Date | A calendar date. | | Date & time | A calendar date with a time. | ### Create a field [#create-a-field] To create a field: Navigate to **System** > **Custom Fields** > **Fields**. Click **Create**. Specify the **Label (English)**, **Machine name**, **Type**, and **Group**. In the **Required / validation** section, configure the validation rules (see [Validation rules](custom-fields#validation-rules)). Click **Save**. When editing a field, you can change its **Label**, **Group**, and validation rules. The **Machine name** and **Type** are set at creation and can't be changed. To archive a field, click the **Archive** button. Like groups, archived fields stay visible on client profiles where a stored value exists. ### Validation rules [#validation-rules] The **Required / validation** section shows only the rules that apply to the selected field type. | Rule | Applies to | Description | | ------------- | --------------------------- | ------------------------------------------ | | Required | All types | The field must be filled in. | | Min length | Text, Multiline | The minimum number of characters. | | Max length | Text, Multiline, Email, URL | The maximum number of characters. | | Regex pattern | Text, Multiline | A regular expression the value must match. | | Min | Integer, Decimal | The minimum allowed value. | | Max | Integer, Decimal | The maximum allowed value. | | Min date | Date, Date & time | The earliest allowed date. | | Max date | Date, Date & time | The latest allowed date. | | Min options | Multiselect | The minimum number of selected options. | | Max options | Multiselect | The maximum number of selected options. | **Required** applies to the client registration form, where clients must fill in the field to continue. On the client profile, admins can save partial data even when a required field is empty; the format and option rules still apply to any value that is entered. ## Options for Select and Multiselect fields [#options-for-select-and-multiselect-fields] Fields of the **Select** and **Multiselect** types need a list of options. After you create such a field, open its edit page to manage the options at the bottom. Each option has the following parameters. **Value** The value stored when the option is selected. It must be unique within the field. *** **Label (English)** The text shown to the client. You can localize this label through B2TRANSLATE (see [Translations](custom-fields#translations)). *** **Machine name** An identifier used in translation keys. To add an option, fill in the fields in the option row and click **Add option**. To archive an option, click the **Archive** button next to it. ## Show custom fields during registration [#show-custom-fields-during-registration] You choose which custom fields appear in a registration form on the registration configuration edit page in **System** > **Registration**. Custom fields can only be added to the new registration flows configured in **System** > **Registration**. They are not available in the legacy [Wizards](wizards), where registration fields are set up through the [Registration wizard configuration](wizards#registration-wizard) and appear on the client's [Advanced tab](../clients/general/advanced-tab). The **Wizards** and their **Advanced** step are considered legacy. Once the migration to the **System** > **Registration** settings is complete, they will be removed. Open the registration configuration you want to edit. In the **Custom Fields** section, select the fields to show in the registration form. Click **Save**. Fields marked as **Required** must be filled in by the client before they can complete the registration. If no custom fields exist yet, the section links to the **Custom Fields** page where you can create them. ## Edit custom field values on a client profile [#edit-custom-field-values-on-a-client-profile] Open a client profile and go to the **Custom Fields** tab to view and edit the values collected for that client. Fields are grouped the same way as on the registration form. Viewing values requires the **View client custom field values** permission, and editing them requires the **Edit client custom field values** permission. Archived fields and groups remain visible on the tab as long as the client has a stored value for them, so retiring a field never hides previously collected data. ## Translations [#translations] Labels for groups, fields, and options are entered in English and can be localized through B2TRANSLATE. The registration form uses the following translation key patterns: * Fields — `Common.Registration.Form.Fields..Label` * Options — `Common.Registration.Form.Options..Label` To speed up localization, the registration configuration edit page provides a **Copy B2TRANSLATE keys JSON** button. It copies a JSON object that maps the translation keys to their English values for the custom fields currently selected in the form, their select and multiselect options, and the Terms & Conditions items. Paste the JSON into the **Common** tab in B2TRANSLATE. In this subsection, you can set up and manage supported deposit methods. ## Deposit methods [#deposit-methods] On this page, you can view a list of configured deposit methods and create new ones. ### General information [#general-information] The following information is provided about each deposit method: **ID** The identifier of the method in the system. *** **Priority** The priority index assigned to the deposit method. The order in which deposit methods are displayed to clients in the B2CORE UI depends on priority indexes assigned to methods. A lower index means a higher priority. For example, a method with the index `1` will appear at the top of the list in the B2CORE UI. The priority index can be changed on the [Settings tab](deposit-system#settings-tab) in the method details. *** **Caption** The name assigned to the method in the Back Office, which is also visible to clients in the B2CORE UI. *** **Name** The unique name for the method. It can only contain Latin letters, numbers, dashes, and underscores. *** **Group** One or more [groups](deposit-system#deposit-groups) in which the method is included, such as **Crypto**, **Fiat**, or other. *** **Provider** The name of the payment system. For [PSS-connected](../../integrations/payment-systems#payment-system-service-pss) payment systems, the following providers can be displayed: * **PaymentSystemsDeposit** — indicates a deposit method connected via PSS. * **PaymentSystemsStaticDeposit** — indicates a deposit method connected via PSS that supports static payment details. In such methods, previously issued payment information, such as crypto addresses or bank details, is saved for clients, allowing them to reuse it for deposits of different amounts at any time. Currently, the **B2BINPAY v3** and **Coinsbuy v3** payment systems can be configured to use static payment details. *** **Driver**\ *Applicable only to payment systems connected via [PSS](../../integrations/payment-systems#payment-system-service-pss)* The driver used to connect to a payment system. It reflects the name of the payment system and, in some cases, the supported payment method. *** **Currency** One or more currencies supported by the method. The method will be available for accounts denominated in the selected currencies. *** **Enabled** The method status: * **No** — the method is inactive and unavailable for deposits. * **Yes** — the method is active and available for deposits. *** **Status** exclamation icon — indicates that some method settings need to be configured. Hovering over the icon displays a list of required settings, which can be adjusted in the method details. If the column is empty, all required settings for the method have been specified. To view deposit method details, click the **Edit** button. ### Details [#details] The details page is divided into the following tabs: * [Settings tab](deposit-system#settings-tab) * [TR Currencies tab](deposit-system#tr-currencies-tab) * [PS Currencies tab](deposit-system#ps-currencies-tab) * [Commissions tab](deposit-system#commissions-tab) * [Restrictions tab](deposit-system#restrictions-tab) The set of displayed tabs may vary depending on the deposit method driver. For example, for methods connected via [PSS](../../integrations/payment-systems#payment-system-service-pss), the additional **Webhooks** and **Test configuration** tabs may be displayed. #### Settings tab [#settings-tab] On this tab, you can view or modify the general settings of the deposit method, as well as the connection settings of a payment provider. **Name** The unique name for the method. It can only contain Latin letters, numbers, dashes, and underscores. *** **Enabled** The method status: * **No** — the method is inactive and unavailable for deposits. * **Yes** — the method is active and available for for deposits. *** **Group** One or more [groups](deposit-system#deposit-groups) in which the method is included, such as **Crypto**, **Fiat**, or other. *** **Caption** The name assigned to the method in the Back Office, which is also visible to clients in the B2CORE UI. *** **Provider** The name of the payment system. *** **Result URL** The URL that receives callbacks with notifications about deposit status updates. *** **Time to fund** The hint text displayed to clients in the B2CORE UI, indicating the estimated processing time for deposits. Two standard options are available: * `Depending on the Blockchain` * `From 3 to 5 Days` It's possible to modify the hint text of the standard options or add new ones in **System** > **Key storage** > **Key storage values**. Use the `method_time` tag to locate the relevant keys and update the text. The hint text can be specified in HTML format, but using different formats may cause difficulties in displaying the hint on different devices. For example, while the HTML format renders correctly in the B2CORE UI, it may not work properly in mobile apps. *** **Precalculate** This field is deprecated and no longer in use. It can be ignored. *** **Icon** The method icon displayed to clients in the B2CORE UI for quick identification of the method. You can use predefined icons or specify a URL for a custom image. For a list of predefined icons and their names, refer to [Payment systems](../../integrations/payment-systems) and [Supported cryptocurrency payment methods](../references/supported-cryptocurrency-payment-methods). To use a predefined icon for the method, enter its name in the **Icon** field. If you prefer a custom icon, specify the URL of the image to be displayed as the method icon. *** **Priority** The priority index assigned to the deposit method. The order in which deposit methods are displayed to clients in the B2CORE UI depends on priority indexes assigned to methods. A lower index means a higher priority. For example, a method with the index `1` will appear at the top of the list in the B2CORE UI. *** **IP White list** A list of IP addresses from which it is allowed to make deposits. *** **Rates provider** The name of the rate provider configured on the [Currencies > Rates](../currencies/rates) page. This field is optional. If specified, the system will prioritize requesting rates from this provider when the deposit method is used. *** **Configuration**\ *Applicable to PSS methods* The deposit method configuration form. Its structure and available fields depend on the selected **Driver**. The **external connection** contains technical integration data required to connect to a specific payment system, while the **configuration** defines how the deposit process operates. As a result, you can configure two or more deposit methods with different configurations that all use the same external connection. If no configuration is available for the selected driver, the following message is displayed: `Configuration form is empty`. *** **Provider settings**\ *Applicable to non-PSS methods* The settings required to connect to a payment provider. The set of connection settings varies depending on the payment provider. After specifying the connection settings, it’s possible to check if the credentials used to access the payment provider are valid. To do this, click the **Check connection** button. Currently, the **Check connection** button is available only for the B2BINPAY and BridgerPay payment providers. * If the credentials are valid, the status `Success` will be displayed under the button. * If the credentials are invalid, the status `Fail` will be displayed, along with an explanation message. In this case, contact the Support team. **Custom fields** Applicable for the **Constructor** provider only. Configure a list of fields that clients should fill in when they make deposits using the **Constructor** method in the B2CORE UI (for details, refer to [How to add custom fields for the Constructor deposit or withdrawal method](../../how-to-articles/manage-payment-methods/how-to-add-the-constructor-deposit-or-withdrawal-method#how-to-add-custom-fields-for-the-constructor-deposit-or-withdrawal-method)). #### TR Currencies tab [#tr-currencies-tab] On this tab, you can view and manage a list of transaction currencies added to the deposit method. The method will be available for accounts denominated in these currencies. The following information is provided about each currency: **ID** The identifier assigned to the currency added to the method. *** **Currency** The caption assigned to the currency. #### PS Currencies tab [#ps-currencies-tab] On this tab, you can view and manage a list of currencies supported by the payment provider for processing deposits. To enable the method to process deposits in a specific currency, ensure it is added to this list. The following information is provided about each currency: **ID** The identifier assigned to the currency added to the method. *** **Currency** The caption assigned to the currency. *** **Supported by PS** The `Supported` status indicates that the added currency is supported by the payment provider and can be used for making deposits. When adding a currency with a status that doesn't guarantee compatibility with the payment provider, the `Support is unknown` message is displayed. In this case, the currency can still be added to the tab, and the configuration can be saved. However, the currency might not be fully supported by the deposit method, so it should be used with caution. When adding a currency that isn't supported, the `Not supported` message appears. In this case, the currency can't be added to the tab, and saving the configuration isn't allowed. #### Commissions tab [#commissions-tab] On this tab, you can view and manage a list of commissions configured for the deposit method. The following information is provided about each commission: **ID** The commission identifier in the Back Office. *** **Currency** One or more commission currencies. *** **Commission** The commission rates that follow the formula: `Minimum commission amount <= Fixed rate + Percentage rate % <= Maximum commission amount` For details, refer to [How to configure commissions for deposit and withdrawal methods](../../how-to-articles/manage-payment-methods/how-to-configure-commissions-for-deposit-and-withdrawal-methods). *** **Type** The commission type: * **TR** (Vendor commission) — the commission that is calculated based on the currency and amount credited to the client's account after the deposit is successfully processed by the payment provider. If this commission type is configured, the client deposits one amount through the payment provider but receives to their account a smaller amount due to the deduction of the calculated commission. * **PSP** (Provider commission) — the commission that is calculated only for financial reports and doesn't affect the amount a client receives to their account when depositing funds. If this commission type is configured, it only applies to calculations for reports regarding completed deposits and is displayed in the **Provider commission** column in [Finance > Deposits](../finance/deposits). #### Restrictions tab [#restrictions-tab] On this tab, you can restrict the use of the deposit method by country, client type, verification level, jurisdiction, IB parent ID, or IB program type. The tab lists each restriction along with its status, type, and configured rules (for details, refer to [How to restrict the use of deposit and withdrawal methods](../../how-to-articles/manage-payment-methods/how-to-restrict-the-use-of-deposit-and-withdrawal-methods)). ## Deposit groups [#deposit-groups] Groups are used to organize deposit methods into categories, such as crypto and fiat methods, for easier management. **Priority** The priority index assigned to the group. *** **Name** The group name. *** **Caption** The group description. *** **Enabled** The group status: * **No** — the group is inactive and cannot be used to include deposit methods. * **Yes** — the group is active and can include deposit methods. On this page, you can set up event notifications to be sent via Slack, Telegram, email or SMS, as well as view a list of configured notifications. The following information is provided about each configured event notification: **ID** The notification identifier. *** **Event** The [event](../references/event-types-for-triggering-event-notifications-for-back-office-users) that triggers a notification. *** **Description** The notification description. *** **Users** The email addresses of the Back Office users added as notification recipients. *** **Channels** A list of channels through which notifications are delivered: * email * SMS * Slack (refer to [How to set up a Slack bot](../../how-to-articles/manage-communication-platforms/how-to-set-up-a-slack-bot)) * Telegram (refer to [How to set up a Telegram bot](../../how-to-articles/manage-communication-platforms/how-to-set-up-a-telegram-bot)) *** **Enabled** If **Enabled**, a notification is sent after the selected event occurs; otherwise, **Disabled**. To modify the existing notifications, click the **Edit** button located in the corresponding notification row. **See also** [How to set up event notifications](../../how-to-articles/manage-system-settings/how-to-set-up-event-notifications) On this page, you can configure event handlers to monitor specific system events and define the workflows that automatically run when they occur. ## General information [#general-information] The following information is provided about each event handler: **ID** The identifier of the event handler. *** **Short description** A brief description of the event handler. *** **Event** The event type. The following event types are supported: * [Account balance received](#account-balance-received) * [Transfer event](#transfer-event) * [Account created](#account-created) * [Successful operation](#successful-operation) *** **Event handler workflow** The workflow or action that will be executed when the event is triggered, such as sending an email notification or sending data to an external endpoint. *** **Enabled** If **Enabled**, the event handler is active and will process events that meet the configured conditions. To view or edit event handler details, select a handler and click the **Edit** button. ## Details [#details] On the details page, you can enable or disable the selected event handler and adjust its parameters. The following is the list of supported event handlers for which you can adjust their specific parameters: ### Account balance received [#account-balance-received] This event handler is triggered when B2CORE receives an updated balance from an external service provider connected to the Back Office (for example, **Twilio**). If the received balance meets the configured threshold, a notification is sent to the specified email addresses. **Send notification if account balance less or equals** The balance threshold that triggers the notification. *** **Available workflows** `SendNotificationWorkflow` — sends an email notification to the specified email addresses when the external service balance falls below or equals the configured threshold. *** **Emails** One or more email addresses to which the notification will be sent. *** **Template** The email template used for sending notifications, such as `balanceWarning`. The template can be selected from the list of available email templates in **System** > **Templates** > **Email** > **Templates**. ### Transfer event [#transfer-event] The event handler is triggered when a transfer occurs that matches the selected platforms and amount criteria. When this event occurs, an email notification is sent to the specified email addresses. **Available handlers** `Filter by platforms and amount` — filters transfer events based on the selected source and destination platforms and the minimum transfer amount. The handler triggers only when a transfer meets the specified conditions. *** **Destination Platform Id** The identifier of the destination platform to which a transfer is made. This is the required parameter. *** **Source Platform Id** The identifier of the source platform to which a transfer is made. This is the optional parameter. *** **Minimum Amount** The minimum transfer amount required to trigger the event. This parameter is optional. *** **Available workflows** `SendNotificationWorkflow` — sends an email notification to the specified email addresses when a transfer matching the configured criteria occurs. *** **Emails** One or more email addresses to which the notification will be sent. *** **Template** The email template used for sending notifications, such as `TransferEvent`. The template can be selected from the list of available email templates in **System** > **Templates** > **Email** > **Templates**. ### Account created [#account-created] The event handler is triggered when an account or wallet is created for a client. When this event occurs, a POST request is sent to the specified external URL. The request body includes account details formatted as either JSON or URL-encoded form data, depending on the selected content type. The examples below show how the POST request body is formatted for each supported content type: ```json title="JSON" { "client": { "id": 3651, "email": "client@example.com" }, "product": { "name": "ewallet", "group_type": "Default", "platform": { "id": 1, "name": "eWallet", "caption": "eWallet" } }, "account_number": "80759" } ``` ```bash title="URL-encoded form data" client%5Bid%5D=3650&client%5Bemail%5D=client%40example.com&product%5Bname%5D=ewallet&product%5Bgroup_type%5D=Default&product%5Bplatform%5D%5Bid%5D=1&product%5Bplatform%5D%5Bname%5D=eWallet&product%5Bplatform%5D%5Bcaption%5D=eWallet&account_number=80735 ``` *** **Available workflows** `SendToEndpoint` — sends a POST request with the details about the created account or wallet to the specified external endpoint. The request is sent immediately when the event is triggered. *** **External endpoint** The external URL to which the POST request will be sent. This parameter is required. *** **Content type** The format of the request body. The following values are supported: * `application/x-www-form-urlencoded` * `application/json` ### Successful operation [#successful-operation] The event handler is triggered when a deposit, withdrawal, transfer, or exchange is successfully completed. When this event occurs, a POST request is sent to the specified external URL. The request body includes transaction details formatted as either JSON or URL-encoded form data, depending on the selected content type. **Operations** One or more transaction types. This parameter is required. The following transaction types can be selected: * `payment` — deposits * `payout` — withdrawals * `transfer` — transfers * `exchange` — exchanges *** **Available workflows** `SendToEndpoint` — sends a POST request with the details about a successful transaction to the specified external endpoint. The request is sent immediately when the event is triggered. *** **External endpoint** The external URL to which the POST request will be sent. This parameter is required. *** **Content type** The format of the request body. The following values are supported: * `application/x-www-form-urlencoded` * `application/json` On this page, you can view a list of connections to external systems and service providers integrated with B2CORE, manage them, and create new connections. ## General information [#general-information] The following information is provided about each connection: **ID** The connection identifier. *** **Caption** The connection caption. *** **Name** The technical name of the connection. *** **Type** The type of integrated system, such as: * **Payment system** — indicates connections to payment systems. * **Mailing system** — indicates connections to mailing services. * **Platform** — indicates connections to trading platforms and hubs. * **Other** — indicates connections to other types of integrated systems, for example, customer support platforms, analytical tools, and more. *** **Provider** The name of the external system to which the connection is established. *** **Driver**\ *Applicable only to payment systems connected via [PSS](../../integrations/payment-systems#payment-system-service-pss)* The driver used to connect to a payment system. It reflects the name of the payment system and, in some cases, the supported payment method. *** **Enabled** Indicates whether the connection is enabled: **Yes** or **No**. *** **Created** The date and time when the connection was created. *** **Updated** The date and time when the connection was last updated. To view connection details, click the **Edit** button. ## Details [#details] In the details, you can enable or disable the connection. This page contains settings specific to the external system to which the connection is established. Each external system has its own set of connection settings, such as the service URL, credentials, and other configuration parameters. On this page, you can view a record of data imported to the Back Office as well as import new data. You can import data about clients, their accounts, or [IB programs](../introducing-brokers) into B2CORE from a third-party system using a CSV or TSV file. Your CSV or TSV file must meet the following requirements for data import: * The file size mustn't exceed 5MB. * The maximum number of lines in a file is 1,000, excluding the header line. If the number of lines exceeds 1,000, the file must be split into two or more files for proper import. * `Comma`, `semicolon`, or `tab` can be used as delimiter characters that separate data in the file. * The file must be properly structured and include the required fields specific to the imported data type (for details, refer to [How to import client-related data](../../how-to-articles/manage-system-settings/how-to-import-client-related-data)). * IB-related data can be imported only from a CSV file. ## General information [#general-information] The following information is provided about each data import operation: **Title** The name assigned to a data import operation. *** **Action** The type of data that was imported. The following types of data can be parsed: * `import-users` — used to import the following client-related data from a CSV or TSV file: * Email `required` * Last name `required` * First name `required` * Middle name * Date of birth * Country * Phone number * Address * City * Postal code * Verification level The imported data is displayed on the **Clients** > **General** page. * `import-accounts` — used to import the following data about client accounts from a CSV or TSV file: * Email `required` * Account number `required` * Product ID `required` * Product currency `required` The account data can be imported only for the existing clients that are listed on the **Clients** > **General** page. The imported data is displayed on the **Clients** > **Accounts** page and on the [Accounts tab](../clients/general/accounts-tab) in client details. * `import-ibs` — used to import the following data related to IB programs (this data can be imported only from a CSV file): * IB Email `required` — the email address of a partner who has joined an IB program * Client Email `required` — the email address of a client attracted by a partner * IB Type ID `required` — the identifier of an IB program The IB data can be imported only for the existing clients that are listed on the **Clients** > **General** page. The imported data is displayed on the **Introducing Brokers** > **Programs** > **Introducing Brokers** and **Introducing Brokers** > **Programs** > **Clients** pages. *** **Created At** The date and time when an import operation was initiated. *** **User** The email address of a Back Office user who initiated an import operation. *** **Status** The import operation status: * `New` — an import operation has been initiated but hasn't yet run. * `Awaiting confirmation` — during data validation in a CSV or TSV file, some invalid records are detected. The invalid records are displayed in the **Log message** field in the import operation details. You can select to continue the import while excluding the invalid records or cancel the import. * `In Progress` — an import operation is running. * `Success` — an import operation has been fully completed. * `Success with errors` — an import operation has been completed, but at least one error occurred during import. * `Failed` — an import operation failed due to critical errors. To view details of a selected data import operation, click the **Edit** button. ## Details [#details] On the details page, you can find the following fields: **Log messages** Lists the records and their corresponding line numbers from a CSV or TSV file that contain invalid data for import. You can click **Continue import** to proceed with importing all valid records while excluding those with invalid data or you can cancel import, or you can click **Cancel import**. After the import is complete, this field shows the import results for each record from the CSV or TSV file. **Error messages** Lists the records and their corresponding line numbers where errors occurred, causing the import operation to fail. **See also** [How to import client-related data](../../how-to-articles/manage-system-settings/how-to-import-client-related-data) [How to import data related to Back Office user groups](../../how-to-articles/manage-system-settings/how-to-import-data-related-to-back-office-user-groups) On this page, you can set values for parameters that are used in [Templates](templates/email), like colors, images, etc. ## Key storage values [#key-storage-values] On this page, you can view and manage all the key-value pairs, stored in the system. **ID** The identifier of the key-value pair. *** **Type** The value type: string, html, mail, or url. *** **Key** The key name, which is used in [Templates](templates/email). *** **Tags** The group to which the key-value pair belongs. *** **Value** The value assigned to the key. *** **Status** If `Enabled`, the key-value pair can be used in Templates. ## Key storage tags [#key-storage-tags] On this page, you can view and manage tags used for the semantic grouping of key-value pairs. **ID** The tag identifier. *** **Caption** The tag description. *** **Status** The tag status: enabled or disabled. On this page, you can view a list of supported languages and format settings specified for each language. The Back Office fields that support localization can be translated to the supported languages. ## General information [#general-information] The following information is provided about each language: **ID** The language identifier in the system. *** **Caption** The language name. *** **Fallback** The fallback language that is used if no translation to the given language is found. *** **Priority** The priority index assigned to the language. The priority indicates the order in which enabled languages are displayed in the languages list in the B2CORE UI. *** **Enabled** If `Yes`, the language is enabled and can be selected by clients in the languages list displayed in the B2CORE UI. By default, English serves as the fallback language for all the enabled languages. This means that if no translation or template in a specific language is found, the English version is used as a backup to ensure a seamless user experience across different languages. To view language details, select a language and click the **Edit** button. ## Details [#details] The following additional information is provided about each language: **Caption** The language name. *** **Locale** The locale identifier (such as `en_US`). *** **Language code** The language code (such as `en`). *** **Enabled** If `Yes`, the language is enabled and can be selected by clients in the languages list displayed in the B2CORE UI. *** **Default** If `Yes`, the language is applied by default in the B2CORE UI. The default language can’t be disabled. *** **Right to Left** If `Yes`, text strings in the given language are displayed in the right-to-left direction. *** **Priority** The priority index assigned to the language. The priority indicates the order in which enabled languages are displayed in the languages list in the B2CORE UI. *** **Formats** Format settings specified for the language, such as date and time formats, and others. **See also** [How to add or remove a language](../../how-to-articles/manage-system-settings/how-to-add-or-remove-a-language) On this page, you can find logs listing the actions made by the [Back Office users](users/users). The following information is provided about each logged action: **Actor Groups** The name of a [user group](users/#groups) that includes a Back Office user who made an action. *** **Actor** The email address of a Back Office user who made an action. *** **Event Category** The action’s scope. Possible values: * **client** — the client-related data was affected * **operation** — the transaction data was affected *** **Event Action** The action type. Possible values: * `ADD` * `UPDATE` * `DELETE` *** **Event Name** The following client-related actions are tracked: * `Client Created` — a new client profile was registered * `Client Updated` — the data displayed on the [Client tab](../clients/general/client-tab) on the client details page was modified * `Client Info Updated` — the data displayed on the [Advanced tab](../clients/general/advanced-tab) on the client details page was modified * `Client Phone Created` — a new phone number was specified for a client on the [Contacts tab](../clients/general/contacts-tab) on the client details page * `Client Phone Deleted` — a phone number was removed from the [Contacts tab](../clients/general/contacts-tab) * `Client Address Created` — a new address was specified for a client on the [Contacts tab](../clients/general/contacts-tab) * `Client Address Updated` — an address was modified on the [Contacts tab](../clients/general/contacts-tab) * `Client Address Deleted` — an address was removed from the [Contacts tab](../clients/general/contacts-tab) The following transaction-related actions are tracked: * `Operation Created` — a deposit, withdrawal, transfer or exchange transaction was made. The transaction identifier and type are displayed in the **Details** column. *** **Details** The detailed information about an action that was made. *** **Created At** The date and time when an action was made. On this page, you can view a list of supported operation types. ### General information [#general-information] The following information is provided about each operation type: **ID** The operation type identifier. *** **Caption** The operation type description. *** **Name** The operation type name: * `deposit` — used for deposits * `payout` — used for withdrawals * `transfer` — used for transfers (when funds are transferred between accounts and wallets of the same client) * `internal_transfer` — used for internal transfers (when funds are transferred from one client to another within the same B2CORE system) * `exchange` — used for exchanges * `partners` — used for reward payments to IB partners *** **Class** The operation type class. *** **Status** The operation type status: `Enabled` or `Disabled`. When an operation type is disabled, clients can’t create the respective transactions in the B2CORE UI. To view operation type details, select an operation type and click the **Edit** button. ## Details [#details] On the details page, you can enable or disable a selected operation type as well as view and adjust its additional settings (if applicable). The following is a list of operation types for which you can adjust the addition settings: ### The `deposit` operation type [#the-deposit-operation-type] **Allowed operation status** A list of statuses that can be assigned to deposit transactions. These statuses are also displayed to clients in the B2CORE UI. ### The `payout` operation type [#the-payout-operation-type] **Auto withdrawal** If **Enabled**, clients can make automatic withdrawals, which don’t require the admin approval, in the B2CORE UI; otherwise, **Disabled**. Further, you can limit the maximum amount that clients can withdraw automatically (for details, refer to [How to set up deposit, withdrawal and transfer limits by verification levels](../../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor#how-to-set-up-deposit-withdrawal-and-transfer-limits-by-verification-levels)). *** **Auto processing rules** Select **Crypto** or **Fiat**, or both. *** **Allowed operation status** A list of statuses that can be assigned to withdrawal transactions. These statuses are also displayed to clients in the B2CORE UI. ### The `transfer` and `internal_transfer` operation types [#the-transfer-and-internal_transfer-operation-types] The settings that can be adjusted for `transfer` and `internal_transfer` operation types are the same and include the following options: **Allowed statuses** A list of statuses that can be assigned to transfers or internal transfers. These statuses are also displayed to clients in the B2CORE UI. *** **Operation restriction** A list of transfer directions for which transfers or internal transfers are prohibited. For example, by selecting the **Trade to Wallet** option for the `internal_transfer` type, you can prohibit internal transfers from trading accounts to client wallets. ### The `exchange` operation type [#the-exchange-operation-type] **Allowed statuses** A list of statuses that can be assigned to exchanges. These statuses are also displayed to clients in the B2CORE UI. *** **Hedging Enabled** If **Yes**, exchange operations are hedged; otherwise, **No**. *** **Failed Hedging** * When **Allow Exchange** is selected, an exchange is processed if hedging has failed. * When **Deny Exchange** is selected, an exchange isn’t processed if hedging has failed. In this subsection, you can set up and manage supported withdrawal methods. ## Payout methods [#payout-methods] On this page, you can view a list of configured withdrawal methods and create new ones. ### General information [#general-information] The following information is provided about each withdrawal method: **ID** The identifier of the method in the system. *** **Priority** The priority index assigned to the withdrawal method. The order in which withdrawal methods are displayed to clients in the B2CORE UI depends on priority indexes assigned to methods. A lower index means a higher priority. For example, a method with the index `1` will appear at the top of the list in the B2CORE UI. The priority index can be changed on the [Settings tab](payout-system#settings-tab) in the method details. *** **Caption** The name assigned to the method in the Back Office, which is also visible to clients in the B2CORE UI. *** **Name** The unique name for the method. It can only contain Latin letters, numbers, dashes, and underscores. *** **Group** One or more [groups](payout-system#payout-groups) in which the method is included, such as **Crypto**, **Fiat**, or other. *** **Provider** The name of the payment system. For [PSS-connected](../../integrations/payment-systems#payment-system-service-pss) payment systems, **PaymentSystemsWithdrawal** is displayed as a provider. *** **Driver**\ *Applicable only to payment systems connected via [PSS](../../integrations/payment-systems#payment-system-service-pss)* The driver used to connect to a payment system. It reflects the name of the payment system and, in some cases, the supported payment method. *** **Currency** One or more currencies supported by the method. The method will be available for accounts denominated in the selected currencies. *** **Enabled** The method status: * **No** — the method is inactive and unavailable for withdrawals. * **Yes** — the method is active and available for withdrawals. *** **Status** exclamation icon — indicates that some method settings need to be configured. Hovering over the icon displays a list of required settings, which can be adjusted in the method details. If the column is empty, all required settings for the method have been specified. To view withdrawal method details, click the **Edit** button. ### Details [#details] The details page is divided into the following tabs: * [Settings tab](payout-system#settings-tab) * [TR Currencies tab](payout-system#tr-currencies-tab) * [PS Currencies tab](payout-system#ps-currencies-tab) * [Commissions tab](payout-system#commissions-tab) * [Restrictions tab](payout-system#restrictions-tab) The set of displayed tabs may vary depending on the withdrawal method driver. For example, for methods connected via [PSS](../../integrations/payment-systems#payment-system-service-pss), the additional **Webhooks** and **Test configuration** tabs may be displayed. #### Settings tab [#settings-tab] On this tab, you can view or modify the general settings of the withdrawal method, as well as the connection settings of a payment provider. **Name** The unique name for the method. It can only contain Latin letters, numbers, dashes, and underscores. *** **Enabled** The method status: * **No** — the method is inactive and unavailable for withdrawals. * **Yes** — the method is active and available for for withdrawals. *** **Group** One or more [groups](payout-system#payout-groups) in which the method is included, such as **Crypto**, **Fiat**, or other. *** **Caption** The name assigned to the method in the Back Office, which is also visible to clients in the B2CORE UI. *** **Provider** The name of the payment system. *** **Result URL** The URL that receives callbacks with notifications about withdrawal status updates. *** **Time to fund** The hint text displayed to clients in the B2CORE UI, indicating the estimated processing time for withdrawals. Two standard options are available: * `Depending on the Blockchain` * `From 3 to 5 Days` It's possible to modify the hint text of the standard options or add new ones in **System** > **Key storage** > **Key storage values**. Use the `method_time` tag to locate the relevant keys and update the text. The hint text can be specified in HTML format, but using different formats may cause difficulties in displaying the hint on different devices. For example, while the HTML format renders correctly in the B2CORE UI, it may not work properly in mobile apps. *** **Icon** The method icon displayed to clients in the B2CORE UI for quick identification of the method. You can use predefined icons or specify a URL for a custom image. For a list of predefined icons and their names, refer to [Payment systems](../../integrations/payment-systems) and [Supported cryptocurrency payment methods](../references/supported-cryptocurrency-payment-methods). To use a predefined icon for the method, enter its name in the **Icon** field. If you prefer a custom icon, specify the URL of the image to be displayed as the method icon. *** **Priority** The priority index assigned to the withdrawal method. The order in which withdrawal methods are displayed to clients in the B2CORE UI depends on priority indexes assigned to methods. A lower index means a higher priority. For example, a method with the index `1` will appear at the top of the list in the B2CORE UI. *** **IP White list** A list of IP addresses from which it is allowed to make withdrawals. *** **Rates provider** The name of the rate provider configured on the [Currencies > Rates](../currencies/rates) page. This field is optional. If specified, the system will prioritize requesting rates from this provider when the payout method is used. *** **Auto withdrawal enabled** * **Yes** — clients can make automatic withdrawals using this method, without the need for admin approval. * **No** — automatic withdrawals are disabled. In this case, each withdrawal request must be approved by the admin in the Back Office. The use of this option depends on the settings configured for the `payout` operation type in [System > Operation types](operation-types#the-payout-operation-type). Auto withdrawal can't be enabled for the method in the following cases: * If the **Auto withdrawal** option for the `payout` operation type is disabled, which indicates that automatic withdrawals are globally disabled. * If the [group](#payout-groups) associated with the method isn't listed in the **Auto processing rules** field, meaning that automatic withdrawals are prohibited for that group and all the withdrawal methods included in it. *** **Configuration**\ *Applicable to PSS methods* The withdrawal method configuration form. Its structure and available fields depend on the selected **Driver**. The **external connection** contains technical integration data required to connect to a specific payment system, while the **configuration** defines how the withdrawal process operates. As a result, you can configure two or more withdrawal methods with different configurations that all use the same external connection. If no configuration is available for the selected driver, the following message is displayed: `Configuration form is empty`. *** **Provider settings**\ *Applicable to non-PSS methods* The settings required to connect to a payment provider. The set of connection settings varies depending on the payment provider. After specifying the connection settings, it’s possible to check if the credentials used to access the payment provider are valid. To do this, click the **Check connection** button. Currently, the **Check connection** button is available only for the B2BINPAY payment provider. * If the specified credentials are valid, the status `Success` is displayed under the button. * If the credentials are invalid, the status `Fail` is displayed, followed by an explanation message. In this case, contact the Support team. *** **Custom fields** Applicable for the **Constructor** provider only. Configure a list of fields that clients should fill in when they make withdrawals using the **Constructor** method in the B2CORE UI (for details, refer to [How to add custom fields for the Constructor deposit or withdrawal method](../../how-to-articles/manage-payment-methods/how-to-add-the-constructor-deposit-or-withdrawal-method#how-to-add-custom-fields-for-the-constructor-deposit-or-withdrawal-method)). #### TR Currencies tab [#tr-currencies-tab] On this tab, you can view and manage a list of transaction currencies added to the withdrawal method. The method will be available for accounts denominated in these currencies. The following information is provided about each currency: **ID** The identifier assigned to the currency added to the method. *** **Currency** The caption assigned to the currency. #### PS Currencies tab [#ps-currencies-tab] On this tab, you can view and manage a list of currencies supported by the payment provider for processing withdrawals. To enable the method to process withdrawals in a specific currency, ensure it is added to this list. The following information is provided about each currency: **ID** The identifier assigned to the currency added to the method. *** **Currency** The caption assigned to the currency. *** **Supported by PS** The `Supported` status indicates that the added currency is supported by the payment provider and can be used for making withdrawals. When adding a currency with a status that doesn't guarantee compatibility with the payment provider, the `Support is unknown` message is displayed. In this case, the currency can still be added to the tab, and the configuration can be saved. However, the currency might not be fully supported by the withdrawal method, so it should be used with caution. When adding a currency that isn't supported, the `Not supported` message appears. In this case, the currency can't be added to the tab, and saving the configuration isn't allowed. #### Commissions tab [#commissions-tab] On this tab, you can view and manage a list of commissions configured for the withdrawal method. The following information is provided about each commission: **ID** The commission identifier in the Back Office. *** **Currency** One or more commission currencies. *** **Commission** The commission rates that follow the formula: `Minimum commission amount <= Fixed rate + Percentage rate % <= Maximum commission amount` For details, refer to [How to configure commissions for deposit and withdrawal methods](../../how-to-articles/manage-payment-methods/how-to-configure-commissions-for-deposit-and-withdrawal-methods). *** **Type** The commission type: * **TR** (Vendor commission) — the commission that is calculated based on the currency and amount that a client specifies for withdrawal. If this commission type is configured, the client specifies an amount for withdrawal, which then will be reduced by the calculated commission. * **PSP** (Provider commission) — the commission that is calculated only for financial reports and doesn't affect the amount a client withdraws from their account. If this commission type is configured, it only applies to calculations for reports regarding completed withdrawals and is displayed in the **Provider commission** column in [Finance > Payouts](../finance/payouts). #### Restrictions tab [#restrictions-tab] On this tab, you can restrict the use of the withdrawal method by country, client type, verification level, jurisdiction, IB parent ID, or IB program type. The tab lists each restriction along with its status, type, and configured rules (for details, refer to [How to restrict the use of deposit and withdrawal methods](../../how-to-articles/manage-payment-methods/how-to-restrict-the-use-of-deposit-and-withdrawal-methods)). ## Payout groups [#payout-groups] Groups are used to organize withdrawal methods into categories, such as crypto and fiat methods, for easier management. **Priority** The priority index assigned to the group. *** **Name** The group name. *** **Caption** The group description. *** **Enabled** The group status: * **No** — the group is inactive and cannot be used to include withdrawal methods. * **Yes** — the group is active and can include withdrawal methods. On this page, you can view and manage registration profiles that define the client registration process in the B2CORE UI. The new registration settings replace [Registration wizards](wizards) and work together with [custom fields](custom-fields), allowing you to build a registration process tailored to your needs — from a simple form with an email address and a password to a multi-step process with custom fields. After enabling a registration profile, Registration wizards are automatically disabled. The following information is provided about each registration profile: **Type** The type of clients to which the registration profile applies: `Individual` or `Corporate`. *** **Caption** The name of the registration profile. *** **Enabled** Indicates whether the registration profile is enabled. To create a new registration profile, click the **Create** button. **See also** [How to migrate to the new registration settings](../../how-to-articles/manage-system-settings/how-to-migrate-to-new-registration-settings) In this subsection, you can define reject reasons for [client requests](../clients/requests). ## Resolutions [#resolutions] If you reject a client’s request, select a **resolution**, which is a reason for the rejection. On this page, you can view a list of available resolutions. **ID** The resolution identifier. *** **Caption** The resolution description. *** **Enabled** The resolution status. *** **Type** The [resolution type](requests#resolution-types). **See also** [How to create a request resolution](../../how-to-articles/manage-system-settings/how-to-create-a-request-resolution) ## Resolution types [#resolution-types] **Resolution types** are used to categorize and group different resolutions. On this page, you can view a list of available resolution types. **ID** The resolution type identifier. *** **Caption** The resolution type description. *** **Enabled** The resolution type status. **See also** [How to create a request resolution type](../../how-to-articles/manage-system-settings/how-to-create-a-request-resolution-type) ## Information Showing [#information-showing] Use the following settings to enable or disable specific options for clients in the B2CORE UI: **History IDs** If `Enabled`, clients can view identifiers of deals in their trading history in the B2CORE UI. *** **Profile IDs** If `Enabled`, clients can view identifiers assigned to their profiles in the B2CORE UI. *** **Change a nickname** If `Enabled`, clients can add and change their nicknames in the B2CORE UI. *** **Change a userpic** If `Enabled`, clients can add and change their profile pictures in the B2CORE UI. If you want requests to be created for adding or changing profile pictures, select `Yes` for the **Request required for avatar** option in [Client Settings](settings#client-settings). In this case, profile pictures are updated only after these requests are approved by the admin. *** **Show email** If `Enabled`, email addresses used by clients for signing-in are displayed in client profiles in the B2CORE UI. *** **Show nickname** If `Enabled`, the **Nickname** field is displayed in client profiles in the B2CORE UI. Nicknames are required only for clients when using [B2COPY](https://docs.b2copy.b2broker.com/). Client nicknames are displayed in the Leaderboard, allowing easy identification and distinction between accounts. ## Client Settings [#client-settings] **Unique phone** If `Enabled`, new clients must specify unique phone numbers during registration (if your registration procedure requires phone numbers) and can’t register with a phone number that has already been used by another client. *** **Request required for avatar** * If `Yes`, requests are created when clients adding or changing their profile pictures in the B2CORE UI. In this case, profile pictures are updated only after these requests are approved by the admin. * If `No`, client can add or change their profile pictures without admin approval. Both options relate to the **Change a userpic** option in [Information Showing](settings#information-showing). If **Change a userpic** is disabled, clients are not allowed to add or change their profile pictures. ## Client profile [#client-profile] **Address updating** Indicates whether clients can change their country and address in the **Profile** menu of the B2CORE UI. Address updating is available only for `individual` clients and applies only to **Residential** addresses. * **Disabled** — clients aren't allowed to change their country and address. * **KYC validation** — clients can change their country and address but are informed that their current verification level will be reset. They must complete the KYC procedure again and submit the required documents confirming the new address to restore their level. Select this option if your KYC procedure includes address verification. * **Request validation** — clients can change their country and address and must upload documents confirming the change. The **Address** request is then created and must be reviewed and approved by the admin in **Clients** > **Requests** in the Back Office. Select this option when your KYC procedure doesn't include address verification. *** ## Weblate [#weblate] **Project ID** Specify the identifier of a B2TRANSLATE project (formerly WEBLATE) used for maintaining translations to the supported languages in the B2CORE UI. For more information about B2TRANSLATE, refer to the [product documentation](https://docs.b2translate.b2broker.com/). ## Exchange [#exchange] **Quote lifetime (minutes)** Specify the interval, in minutes, during which the received quote rates are valid for making exchanges in the B2CORE UI. ## Slack Bot [#slack-bot] **Bot token** Specify a token for managing your Slack bot (for details, refer to [How to set up a Slack bot](../../how-to-articles/manage-communication-platforms/how-to-set-up-a-slack-bot)). ## Telegram Bot [#telegram-bot] **Bot API Token** Specify a token for managing your Telegram bot (for details, refer to [How to set up a Telegram bot](../../how-to-articles/manage-communication-platforms/how-to-set-up-a-telegram-bot)). ## Bonuses [#bonuses] Use the following options to configure the automatic process of crediting bonuses to clients for making deposits to their trading accounts. Bonuses are supported for trading accounts opened on MetaTrader 4/5 and cTrader. **Autocreate from deposit** * If `Enabled`, bonuses are automatically credited to clients once they deposit funds to their trading accounts (for details, refer to [How to automatically credit bonuses to clients upon deposits](../../how-to-articles/manage-bonuses/how-to-automatically-credit-bonuses-to-clients-upon-deposits)). To enable automatic bonus crediting upon deposits, create a bonus preset for each platform where this feature is needed. The preset with the **lowest** index on a given platform will be used for automatic bonus crediting (for details, refer to [How to create a bonus preset](../../how-to-articles/manage-bonuses/how-to-create-a-bonus-preset)). * If `Disabled`, automatic bonuses for making deposits to trading accounts aren’t credited. *** **Autocreated bonus percent** The percentage of a deposit amount, which is credited as a bonus to a client trading account. *** **Auto Bonus Limit** The maximum bonus amount that can be automatically credited to a client trading account for making a deposit. If a calculated bonus amount exceeds the specified limit, only the maximum allowed amount is credited to the account. *** **Auto Bonus Minimum** The minimum amount that a client must deposit to their trading account to trigger automatic bonus crediting. This amount applies to each deposit and transfer operation made to the account, and it doesn’t relate to an overall sum of deposits made by a client. *** **Enable "Burn if Equity \< Credit"**\ *Applicable for MT4/5 only* Select the platforms on which you want to enable this option. This option can be enabled for MT4/5 and isn't supported for cTrader. On the selected platforms, a bonus credited to a client trading account is burnt if the account equity falls below the credited bonus amount. *** **Burn on withdrawal** * If `Enabled`, when a client makes a withdrawal from their trading account, a bonus credited to that account is burnt. * If `Disabled`, withdrawals don’t affect the credited bonus. ## User Registration Settings [#user-registration-settings] **Enable User Registration** * If `Enabled`, new clients can register in the B2CORE UI. * If `Disabled`, the registration of new clients is unavailable. ## Two-factor authentication [#two-factor-authentication] **Enabled Two-factor auth providers** Select the 2FA methods that will be visible and available for clients to use in the B2CORE UI. You can enable both Google Authenticator and SMS confirmation, or only one of them. **Service name** Enter the name to be displayed in the Google Authenticator app, representing the B2CORE UI for which 2FA codes are generated. ## Mobile [#mobile] The options in this section are applicable if you have the mobile app deployed (for details, refer to [B2CORE Mobile](../../b2core-mobile/deploying-your-ios-app)). Clients can sign in to the B2CORE UI by scanning QR codes displayed on the **Sign In** page using the mobile app to which they have already been signed in. This allows them to sign in without re-entering their credentials. **QR-code lifetime, min** * To limit the QR code lifetime, specify the number of minutes a QR code is valid. The default limit is set to 2 minutes. * To hide QR codes from the **Sign In** page, specify **0** or leave this field empty. *** **Mobile application** Select the platforms for which you want to display the button for downloading the mobile app. The button will appear on the **Sign In** page of the B2CORE UI and at the top of the **Dashboard** after clients sign in (for details, refer to [How to configure settings for mobile app downloads](../../how-to-articles/manage-system-settings/how-to-configure-settings-for-mobile-app-downloads)). — By default, this field is empty. Possible options: * **iOS** — select this option to provide a link for downloading your iOS app from the Apple Store. * **Android** — select this option to provide a link for downloading your Android app from Google Play. * **Android APK Registry** — select this option to provide a link for downloading the Android APK. *** **iOS URL** If you selected **iOS**, specify the URL for downloading the iOS app from the Apple Store. *** **Android URL** If you selected **Android**, specify the URL for downloading the Android app from Google Play. *** **Android APK Registry ID** If you selected **Android APK Registry**, specify the universally unique identifier (UUID) of the Android APK. This UUID is used to generate the download link for the Android APK. *** ## Metatrader 4 and Metatrader 5 [#metatrader-4-and-metatrader-5] **Partner program enabled** If `Enabled`, IB programs are available on the respective platforms. ## Other settings [#other-settings] **Confirmation phone code lifetime** Specify the period, in seconds, during which a verification code sent to a client phone number is valid. *** **Sms limit for each recipient** Specify the maximum number of verification code messages that can be requested by a client per day. *** **User-admin session between 1 – 120 (min)** Specify the session time limit for [Back Office users](users/), in minutes. The default limit is set to 24 minutes. After reaching a specified time limit, users are automatically signed out of the Back Office. On this page, you can view a list of connected SMS providers. **Name** The name assigned to an SMS provider configuration. *** **Caption** The name of an SMS provider, used in the Back Office. *** **Provider** The name of an SMS provider. *** **Enabled** If **Yes**, an SMS provider is enabled and used for delivering SMS to your clients; otherwise, **No**. To view the configuration settings of an SMS provider, click **Edit**. **See also** [How to configure Twilio](../../how-to-articles/manage-communication-platforms/how-to-configure-twilio) The **Status Checks** page gives you an at-a-glance view of the health of important parts of your B2CORE instance. Each check runs automatically on a schedule and records its result, so you can spot problems, such as an unreachable trading platform or an incomplete setup, without leaving the Back Office. To open the page, go to **System** > **Status Checks** in the main menu. ## Failed checks indicator [#failed-checks-indicator] When one or more checks are failing, a warning icon appears in the topbar, next to the notifications bell, with a badge showing the number of failed checks. Click the icon to open a drop-down list of the currently failing checks. Each item shows: * The check name. * A short description of the problem. * A chip indicating how long ago the check last ran, for example, **5 minutes ago**. Select a check in the list to open the **Status Checks** page and jump to that check. Only checks with the **Failed** or **Error** status appear in the indicator. Checks with the **OK**, **Pending**, or **Unknown** status are not counted. ## Status timeline [#status-timeline] The page lists every registered check. For each check, a horizontal timeline shows how its status changed over time, with consecutive runs of the same status grouped into a single colored period. The timeline covers up to one month. For a recently deployed instance, it starts at the first recorded run instead, so the window stays meaningful. Each check also shows: * A badge with the current status. * The time of the last run, or **never run** if there are no recorded runs yet. * The rendered details of the most recent run, for example, the list of unreachable platforms. ## Statuses [#statuses] A check run can have one of the following statuses. *** **OK** The check passed. The monitored area is healthy. *** **Failed** The check detected a problem, for example, a trading platform is unreachable or a required setup is missing. *** **Error** The check could not complete because of an unexpected error. The recorded details include the error message. *** **Pending** A check run has started and is awaiting its result. *** **Unknown** The status could not be determined, for example, a run did not complete or the check was reset. Unknown results are not treated as failures. *** **No data** No check runs were recorded for that part of the timeline. ## Available checks [#available-checks] The following checks are available by default. *** **Live platforms connectivity** Verifies that every enabled live trading platform is reachable. *** **Demo platforms connectivity** Verifies that every enabled demo trading platform is reachable. *** **Visual customization** Verifies that the base resources, such as logos, favicons, and backgrounds, and a color scheme are configured on the [Visual customization](visual-customization) page. *** **New Registration settings** Verifies that client registration is enabled and that at least one registration configuration is enabled on the **System** > **Registration** page. Use the options in this section to customize the appearance of your B2CORE UI to reflect your brand’s unique style. ## Key points [#key-points] The available options enable you to: * Select whether you want to enable the light theme, dark theme, or both for your B2CORE UI, and choose which one should be set as the default. * Upload custom logos for both themes of your B2CORE UI. * Adjust the colors of various UI elements for both light and dark themes. * Set and update background images for the **Sign In** and **Sign Up** pages of the B2CORE UI. * Add custom scripts, for example, for chatbot integration and analytics tracking. ## Resources [#resources] On this page, you can upload or modify the logos displayed in your B2CORE UI, as well as background images for the **Sign Up** and **Sign In** pages , if needed. **Logo for light theme** The main logo displayed in the B2CORE UI when the light theme is enabled. The required format: SVG with transparent background, file size up to 10 MB. *** **Short logo for light theme** A compact version of the logo displayed when the main menu is collapsed in the light theme. The required format: SVG with transparent background, file size up to 10 MB. *** **Logo for dark theme** The main logo displayed in the B2CORE UI when the dark theme is enabled. The required format: SVG with transparent background, file size up to 10 MB. *** **Short logo for dark theme** A compact version of the logo displayed when the main menu is collapsed in the dark theme. The required format: SVG with transparent background, file size up to 10 MB. *** **Favicon (.ico)** The small icon shown in the browser tab. The required format: ICO, file size up to 10 MB. *** **Favicon (.svg)** The vector version of the favicon for browsers that support SVG. The required format: SVG, file size up to 10 MB. Will be used as a scalable icon. *** **Apple touch icon** The icon displayed on Apple devices when the B2CORE UI page is added to the home screen. The required format: PNG, 180×180 pixels, file size up to 10 MB. *** **Light theme background** The background image applied to the **Sign Up** and **Sign In** pages when the light theme is enabled. Adding a background image is optional. The recommended format: SVG, JPG, or PNG, file size up to 10 MB. *** **Dark theme background** The background image applied to the **Sign Up** and **Sign In** pages when the dark theme is enabled. Adding a background image is optional. The recommended format: SVG, JPG, or PNG, file size up to 10 MB. ### Admin Panel images [#admin-panel-images] In this section, you can upload the images displayed in the Back Office (the recommended format: JPG, PNG, or SVG, file size up to 10 MB): * **Logo menu** — the logo displayed in the Back Office main menu * **Login page logo** — the logo displayed on the Back Office sign-in page * **Login page background** — the background image applied to the Back Office sign-in page ## Color Scheme [#color-scheme] On this page, customize color settings for the light and dark themes of your B2CORE UI. In the **Brand Configuration** section, you can quickly set up your brand identity by specifying the **Brand color** and enabling the **Tinted backgrounds** option, which applies a subtle tint of the brand color to interface backgrounds. The color settings for individual interface elements described below are available in the **Advanced color settings** section. **Light theme enabled** Select the checkbox to enable the light theme for the B2CORE UI. Enable the **Default** option to set the light theme as the default if both themes are enabled. *** **Dark theme enabled** Select the checkbox to enable the dark theme for the B2CORE UI. Enable the **Default** option to set the dark theme as the default if both themes are enabled. If neither theme checkbox is selected, your B2CORE UI will use the predefined light and dark themes from the B2BDemo design, and all custom color settings listed below will be ignored. If both theme checkboxes are selected, both themes will be available to clients in the B2CORE UI, along with the applied custom color settings. Visual customization — Color Scheme The advanced color settings are organized into the **Semantic Tokens V1 (Light / Dark)** and **Semantic Tokens V2 (Light / Dark)** sections, allowing you to customize each color token separately for the light and dark themes. To reset the color tokens to the values derived from your brand color, click the **Reset colors from brand** button. Only 6- or 8-character hexadecimal color codes are supported. The **Semantic Tokens V1 (Light / Dark)** section includes the following token groups: * **Accent** — `accent`, `accentHover`, `accent40`, `accent10`, `demo` * **Status** — `positive`, `positive20`, `medium`, `medium20`, `negative`, `negative20` * **Surface** — `background`, `background96`, `card`, `field`, `disabled`, `overlay`, `tooltip`, `divider` * **Text** — `textMain`, `textSecondary`, `textSecondary40`, `textContrast` The **Semantic Tokens V2 (Light / Dark)** section includes the following token groups: * **Accent** — `brand`, `brandSubtle`, `brandMuted`, `alternative`, `alternativeSubtle`, `alternativeMuted`, `positive`, `positiveSubtle`, `positiveMuted`, `medium`, `mediumSubtle`, `mediumMuted`, `negative`, `negativeSubtle`, `negativeMuted`, `neutral`, `overlay`, `overlaySubtle`, `overlayMuted` * **Character** — `onSurface`, `onSurfaceSecondary`, `onSurfaceInverse`, `onBrand`, `onAlternative`, `onPositive`, `onMedium`, `onNegative`, `onNeutral`, `onOverlay`, `onSurfaceBrand`, `onSurfaceAlternative`, `onSurfacePositive`, `onSurfaceMedium`, `onSurfaceNegative`, `onSurfaceOverlay` * **Surface** — `surfaceLow`, `surface`, `surfaceHigh`, `surfaceHighest`, `surfaceInverse`, `backdrop` * **Outline** — `outline`, `outlineStrong` * **State** — `stateHovered`, `statePressed`, `stateHoveredInverse`, `statePressedInverse`, `stateDarken`, `stateDarkenStrong` **Additional light/dark theme variables (json)** Use this field to specify a JSON object with additional variables, such as those that define how a background image behaves in the respective theme: ```json { "optional-external-bg-position": "0 0", "optional-external-bg-size": "cover", "optional-external-bg-repeat": "no-repeat", "optional-external-bg-attachment": "fixed" } ``` `"optional-external-bg-position": "0 0"` Positions the background image at the **top-left corner**. *** `"optional-external-bg-size": "cover"` Scales the background image to cover the entire page. *** `"optional-external-bg-repeat": "no-repeat"` Prevents the background image from repeating (tiling) in any direction. *** `"optional-external-bg-attachment": "fixed"` Keeps the background image fixed in place when the page is scrolled. It won't move with the content. *** ## Fields [#fields] On this page, you can specify additional customization fields. **Project name** The name of your project displayed in the B2CORE UI. *** **Scripts (js-script)** Add your JavaScript (JS) scripts here. These scripts will be executed automatically when the **Sign Up** or **Sign In** page is opened by clients. On this page, you can view a list of added and configured wizards. **Wizards** are tools used to configure and modify workflows of specific procedures that run in the B2CORE UI, such as client registration, authorization, password recovery, and others. You can configure multiple wizards for each procedure. In such cases, you should select the default wizard that will be used to run a procedure in the B2CORE UI. Non-default wizards may outline procedures used by external systems to perform certain actions via API. ## General information [#general-information] The following information is provided about each wizard: **ID** The wizard identifier. *** **Name** The wizard name. *** **Type** The type indicating the procedure for which the wizard outlines the workflow. *** **Enabled** If `Yes`, the wizard is enabled and used for running a procedure; otherwise, `No`. *** **Default** If `Yes`, the wizard is used by default in the case when more than one wizard is configured for the same procedure; otherwise, `No`. To view wizard details, click the **Edit** button. ## Details [#details] The details page is divided into the following tabs: * **Wizard** tab — displays the main wizard parameters * **Workflow** tab — lists the required and additional steps included in a procedure workflow The required steps can’t be removed from a procedure workflow. To include additional steps in the workflow, click the **Add** button and select a step from the list of additional steps supported for a selected wizard. Both the required and additional steps are automatically assigned designated priority indexes that define the order in which the steps are executed when running a procedure in the B2CORE UI. The steps can’t be reordered. The following are some of the supported wizards, along with their full lists of required and additional steps that form the procedure workflows. Required steps are labeled as `required`. Additional steps can be added to or removed from procedure workflows as necessary. The order of the steps can’t be changed. ### Registration wizard [#registration-wizard] The wizard outlines the procedure of signing up new clients to the B2CORE UI. **See also** [How to add and configure the registration wizard](../../how-to-articles/manage-system-settings/how-to-set-up-the-registration-wazard/how-to-add-and-configure-the-registration-wizard) [How to set up fields for the Basic Information step](../../how-to-articles/manage-system-settings/how-to-set-up-the-registration-wazard/how-to-set-up-fields-for-the-basic-information-step) [Fields supported in the Basic Information step](../../how-to-articles/manage-system-settings/how-to-set-up-the-registration-wazard/fields-supported-in-the-basic-information-step) [How to set up fields for the Advanced step](../../how-to-articles/manage-system-settings/how-to-set-up-the-registration-wazard/how-to-set-up-fields-for-the-advanced-step) [How to block registration for country](../../how-to-articles/manage-system-settings/how-to-block-registration-for-a-country) ### Authorization wizard [#authorization-wizard] The wizard outlines the procedure of signing in to the B2CORE UI. ### Password recovery wizard [#password-recovery-wizard] The wizard outlines the procedure of recovering client passwords for accessing the B2CORE UI. ### Password change wizard [#password-change-wizard] The wizard outlines the procedure of changing client passwords for accessing the B2CORE UI. ### Address change wizard [#address-change-wizard] The wizard outlines the procedure of changing the client address. ### Whitelist creation wizard [#whitelist-creation-wizard] The wizard outlines the procedure of creating a withdrawal whitelist and adding wallet addresses to that list. ### Whitelist delete wizard [#whitelist-delete-wizard] The wizard outlines the procedure of deleting wallet addresses from the withdrawal whitelist that was previously created by a client. ### Whitelist change wizard [#whitelist-change-wizard] The wizard outlines the procedure of disabling the withdrawal whitelist that was previously created by a client. ### Withdrawal wizard [#withdrawal-wizard] The wizard outlines the procedure of making withdrawals in the B2CORE UI. **See also** [How to change the wizard workflow](../../how-to-articles/manage-system-settings/how-to-change-the-wizard-workflow) You can add custom items to the menu displayed in both the B2CORE UI and mobile app. In the mobile apps, these items appear in the **Services** section. This functionality is supported starting from **iOS** v1.29 and **Android** v2.6.0. To be able to add custom menu items, you should be granted the `Update menu` permission (for details, refer [How to add a user group and grant permissions](../manage-system-settings/how-to-add-a-user-group-and-grant-permissions)). To add a custom menu item: Navigate to **Promotion** > **Menu**. To view a list of available menu items, click the **eye** icon located in the **General** row. Custom menu items can be added under the **General** menu tree or within any existing menu item. To navigate inside an existing item, click the eye **icon** in the respective row. Click **+Create** in the upper-right page corner. In the displayed popup, fill in the following required fields: * In the **Name** field, enter a unique name for the menu item. * On the **Caption** field, enter a caption for the menu item that will be displayed to clients in the B2CORE UI menu or the **Services** section of the mobile app. * In the **External URL** field, specify the URL to an external resource or web page to which clients will be redirected when they click the menu item. * In the **Icon** field, specify the URL of an image that will be used as the menu icon in the B2CORE UI. The image must meet the following requirements: * **Format**: SVG * **Size**: 16×16 pixels * **Style**: monochrome (single color, typically black or white: #000000/ #FFFFFF) * **Background**: transparent (recommended) Optionally, apply restrictions to the menu item: * To make the menu item available only to clients with specific verification levels, select the appropriate levels in the **Verification Level Allowance** dropdown. * To make a menu item available only to clients that are assigned specific types, select the corresponding types in the **Client Type Allowance** dropdown. If no options are selected in these dropdowns, the menu item will be available to all clients without any restrictions. To mark the menu item as "New" in the B2CORE UI, enable the **New** checkbox. To mark the menu item visible in the B2CORE UI and mobile app, enable the **Visible** checkbox; otherwise, it will be hidden. Click **Save** to add the custom menu item. The custom menu item will appear in the menu tree. To adjust its position, simply drag and drop it to the desired location. If needed, specify the localization properties for the item caption by clicking the button located on the right side of its caption in the **Caption** field. You can add the **Contact Us** section under the main menu in the B2CORE UI to display your support email or other contact details, making it easier for clients to reach you. This can be configured through B2TRANSLATE. For more information about B2TRANSLATE, refer to the [product documentation](https://docs.b2translate.b2broker.com/). To complete the steps below, you must be registered on B2TRANSLATE and have access to the project linked to your B2CORE. To add the **Contact Us** section: Navigate to **System** > **Settings** to locate the UUID of the B2TRANSLATE project linked to your B2CORE and copy it. Sign in to B2TRANSLATE. In B2TRANSLATE, go to **Projects** and find the related project by UUID. Locate the key `B2Core.Shared.ModelTranslates.EmailTranslateKeys.Email1` in the **default** category. If the **padlock** icon near the **Translation** field is locked, unlock it. In the **Translation** field, enter the contact details. HTML formatting is supported (for details, refer to [Add or modify translations](https://docs.b2translate.b2broker.com/user-guide/manage-translations/add-or-modify-translations) in the B2TRANSLATE documentation). Example: ```html

Contact Us

Send email ```
The changes are saved automatically. Leave the **padlock** icon unlocked.
With the above provided HTML example, the **Contact Us** section will be displayed under the main menu in the B2CORE UI followed by the **Send email** link, which clients can use to quickly send messages. This method allows you to add important details to your B2CORE UI, such as contact information, support links, or other messages. To add Ticker Widget symbols: Navigate to **Promotion** > **Dashboard**. On the **Widgets List** page, select either **Ticker Widget MT4** or **Ticker Widget MT5**, and then click the **Edit** button located in the **Actions** column. To add a symbol, click the **+Create** button displayed on the **Edit** page. In the displayed **Add ticker instrument** popup, specify the following information: * In the **Symbol** field, type a symbol that you want to add. * In the **Show** dropdown, select either of the two options: * **Yes** – to display the symbol in the corresponding widget on the **Dashboard** in the B2CORE UI. * **No** – to allow selecting the symbol from the drop-down list and adding it to the corresponding widget on the **Dashboard** in the B2CORE UI. Click **Save** to apply the changes. You can customize the menu displayed to your clients in the B2CORE UI. To be able to customize the menu, you should be granted the `Update menu` permission (for details, refer [How to add a user group and grant permissions](../manage-system-settings/how-to-add-a-user-group-and-grant-permissions)). To customize the B2CORE UI menu: Navigate to **Promotion** > **Menu**. To view a list of available menu items, click the **eye** icon located in the **General** row. To display or hide a menu item in the B2CORE UI, toggle the switch located in the **Visible** column. To change the order in which menu items are displayed in the B2CORE UI, drag and drop them in the required order. Click the **Edit** button related to a selected menu item and configure the following options: * In the **Caption** field, specify a menu item name that you want to display to clients in the B2CORE UI. * To make a menu item visible only to clients who obtained specific verification levels, select the corresponding levels in the **Verification level allowance** dropdown. By default, all verification levels configured in the Back Office are displayed in this field. * To make a menu item visible only to clients that are assigned specific types, select the corresponding types in the **Client Type Allowance** dropdown. * To mark a menu item as "New" in the B2CORE UI, enable the **New** checkbox. Click **Save** to apply the changes. When clients sign in to the B2CORE UI for the first time, they see the default **Dashboard**. As an admin, you can change the widgets and the layout of the default **Dashboard** to show the most important information for your clients. The default dashboard configuration is restored by clicking the **Reset** button. To set up the default dashboard configuration, do the following: Navigate to **Promotion** > **Dashboard**. For widgets that you want to show on the **Dashboard**, enable the switches located in the **Show by default** column. To allow clients to close widgets shown on the **Dashboard**, enable the switches located in the **Delete** column. For such widgets, the **Close** (⨯) button will be available in the B2CORE UI. To set up a widget size and location on the **Dashboard**, select a widget from the list, and then click the **Edit** button located in the **Actions** column. On the **Edit** page, specify the widget size in points by entering integer values in the **Width** and **Height** fields. The dashboard width is limited by 50 points, and the width of a widget cannot exceed this value. The minimum width as well as the minimum and maximum height vary for each widget and depend on the data it displays. If the values that you have specified are not accepted, a corresponding error message is displayed. Locate the widget on the **Dashboard** by specifying the coordinates in the **Position X** and **Position Y** fields. Only positive values are accepted. Positions X and Y indicate the coordinates of the upper-left corner of the widget. To locate the widget on the **Dashboard** properly, the sum of the values specified in the **Width** and **Position X** fields must be less than or equal to the **Dashboard** width, which is 50 points. `Width + Position X <= 50` Click **Save**. You can create banners that will be displayed to your clients in the B2CORE UI, mobile app, or mobile browser. ## How to create a desktop banner [#how-to-create-a-desktop-banner] To create a banner that will be displayed to your clients in the B2CORE UI: Navigate to **Promotion** > **Banners**. Click **+Create** in the upper-right page corner. In the **Create Banner** popup that appears, fill in the following fields: * In the **Caption** field, enter a title for your banner. You can leave this field empty and create a banner without a title. * In the **Banner URL** field, enter a URL tail defining a page on which your banner will be shown in the B2CORE UI (for example, `/dashboard`, `/wallets`, `/funds/deposit`, or other). * In the **Banner priority** field, enter an integer value defining the order for displaying banners if there is more than one banner created. For example, a banner with the priority set to 1 will be shown first on a web page; a banner with the priority set to 2 will be shown following the first banner, and so on. * From the **Banner Type** dropdown, select **Desktop**. Click **Save** to create the banner. Click the **Edit** button in the banner row to configure banner settings. On the **Edit banner** page, fill in the following fields: ### Banner tab [#banner-tab] * In the **Button link** field, enter a URL path to an external resource. This URL will be opened upon clicking a button displayed on your banner. ### Light and Dark tabs [#light-and-dark-tabs] * The **Caption** field displays the title you entered when creating your banner. You can change the title font color and weight for the themes by inserting the following HTML code: `Banner Title` * In the **Button** field, enter the text to be displayed as the button label. * In the **Text** field, enter the text that will be displayed under your banner title. You can change the text font color and weight for the themes by inserting the following HTML code: `Text that will be displayed on your banner` * In the **Banner Background** field, specify the URL of an image that you want to use as a background for the selected theme. * To apply localization settings, click the buttons located on the right side of the **Caption**, **Button**, and **Text** fields and enter translations for the required languages. Click **Save** to apply the changes. After configuring the banner settings, set the **Enabled** dropdown to **Yes** on the **Banner** tab to display the banner in the B2CORE UI. ## How to create a banner for the mobile app [#how-to-create-a-banner-for-the-mobile-app] To create a banner that will be displayed to your clients in the mobile app or when accessing B2CORE via a mobile browser: Navigate to **Promotion** > **Banners**, and click **+Create** in the upper-right corner of the page. In the **Create Banner** popup that is displayed, fill in the following fields: * In the **Caption** field, enter a title for your banner. You can leave this field empty and create a banner without a title. * In the **Banner URL** field, enter `/dashboard`. All banners will be displayed at the top of the **Home** screen in the app. * In the **Banner Priority** field, specify an integer value defining the order for displaying banners if there is more than one banner created. * From the **Banner Type** dropdown, select **Mobile**. * Click **Save**. On the **Banner** tab, specify the following settings: * The **Title** field displays the banner title that was specified at Step 2. You can leave this field empty and create a banner without a title. * In the **Sub Title** field, enter a banner subtitle. You can leave this field empty and create a banner without a subtitle. * From the **Vertical Align** and **Horizontal Align** dropdowns, select the appropriate values to align both the title and subtitle vertically and horizontally. * In the **Button Link** field, specify a URL to an external resource. This URL is opened after tapping a banner in the mobile app. * In the **Button Title** field, specify a button caption. You can leave this field empty and create a banner without a button. * In the **Preview Text** field, specify a description for the preview that is displayed after clicking a banner. You can leave this field empty and create a banner without a preview text. * Set the **Preview Enabled** option to **Yes** to make a banner preview available in the mobile app. * In the **Padding** field, specify a number of points to define the padding area for all four sides of a text block. * To make the banner available to your clients in the mobile app, set the **Enabled** field to **Yes**, and then click **Save**. To specify background images for the light and dark themes of your banner, switch to the **Light** or **Dark** tab. In the **Image URL** field, specify the URL of an image that you want to use as a background image for your banner. The recommended banner size for the mobile app is 840 × 360 px (aspect ratio 21:9). The supported image format is PNG. Click **Save** to apply the changes. ## How to restrict banner display [#how-to-restrict-banner-display] You can control which clients see a banner by applying restrictions based on **country**, **verification level**, **client type**, or **jurisdiction**. You can also combine these restrictions for more precise targeting. To apply restrictions to a banner: Navigate to **Promotion** > **Banners**. Select the banner and click the **Edit** button. ### Country restrictions: [#country-restrictions] * On the **Edit banner** page, click the **Actions** button in the upper-right page corner, and then select **Country restrictions** in the dropdown. * In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — the banner will be displayed to all clients except for those from the selected countries. * **Allow only** — the banner will be displayed only to clients from the selected countries. * In the **Rules** dropdown list, select one or more countries. ### Verification level restrictions: [#verification-level-restrictions] * On the **Edit banner** page, click the **Actions** button in the upper-right page corner, and then select **Verification level restriction** in the dropdown. * In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — the banner will be displayed to all clients except for those with the selected levels. * **Allow only** — the banner will be displayed only to clients with the selected levels. * In the **Rules** dropdown list, select one or more verification levels. ### Client type restrictions: [#client-type-restrictions] * On the **Edit banner** page, click the **Actions** button in the upper-right page corner, and then select **Client type restrictions** in the dropdown. * In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — the banner will be displayed to all clients except for those with the selected client types. * **Allow only** — the banner will be displayed only to clients with the selected client types. * In the **Rules** dropdown list, select one or more client types. ### Jurisdiction restrictions [#jurisdiction-restrictions] * On the **Edit banner** page, click the **Actions** button in the upper-right page corner, and then select **Jurisdiction restrictions** in the dropdown. * In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — the banner will be displayed to all clients except for those with the selected jurisdictions. * **Allow only** — the banner will be displayed only to clients with the selected jurisdictions. * In the **Rules** dropdown list, select one or more jurisdictions. Click **Save** to apply the restrictions. To create an announcement: Navigate to **Promotion** > **Announcements**. Click **+Create**. Select the announcement **Type**: * **Required** — includes a button and blocks interaction with the B2CORE UI until the client clicks the button. * **Optional** — doesn't require client action and is displayed when the client clicks the **Announcements** icon in the topbar of the B2CORE UI. Enter the announcement **Title**. Click **Save** to create the announcement. Newly created announcements are disabled by default. Click **Edit** in the announcement row to configure its settings. Fill in the following fields: * Add localized versions of the **Title**, if needed. * Set **Enable** to **Yes**. * **Button text** *(applicable only to Required announcements)* — enter the label of the action button. * **Targeted emails** — enter client emails to limit the announcement to specific recipients. You can also upload a CSV file with emails. * **Text** — enter the announcement message and add localized versions, if needed. * **Button URL** — specify the URL to which clients will be redirected after clicking the button displayed in the announcement. * **Due to Date** — set the expiration date. After this date, the announcement will no longer be displayed in the B2CORE UI. Click **Save** to activate the announcement. You can automatically credit bonuses to your clients for depositing funds to their trading accounts. In this case, the bonus amount is calculated as a percentage of the deposited amount. For details of the process of awarding bonuses to clients, refer to [Introduction to bonuses](../../back-office-guide/bonuses/#introduction-to-bonuses). To configure the automatic process of crediting bonuses upon deposits: * Configure settings for automatic bonus crediting on the **System** > **Settings** page (proceed to the steps listed below). * Create a bonus preset for each [trading platform](../../back-office-guide/products/platforms) where you want bonuses to be automatically credited upon deposits. The preset created for a specific platform must have the **lowest** priority index to be used for automatic bonuses (for details, refer to [How to create a bonus preset](how-to-create-a-bonus-preset)). If there is no preset for a specific trading platform, automatic bonuses won't be credited to client trading accounts on that platform. If any [restrictions](how-to-create-a-bonus-preset#how-to-restrict-the-use-of-a-bonus-preset) are applied to the preset used for automatic bonuses, they will be credited only to the clients who satisfy the restriction criteria. To configure settings for automatic bonus crediting upon deposits: Navigate to **System** > **Settings**. In the **Bonuses** section, specify the following settings: * Set **Autocreate from deposit** to **Enabled**. * In the **Autocreated bonus percent** field, enter the percentage of a deposit amount, which you want to credit as a bonus to your clients. * In the **Auto Bonus Limit** field, specify the maximum bonus amount that can be credited to a client trading account automatically. If the calculated bonus amount exceeds this limit, only the maximum allowed amount will be credited. * In the **Auto Bonus Minimum** field, specify the minimum amount that clients must deposit or transfer to their trading accounts to trigger automatic bonus crediting for each operation. This minimum amount isn’t related to the total sum of deposits made by a client. * In the **Enable "Burn if Equity \< Credit"** dropdown, select the platforms on which you want to enable the burning of a bonus credit if the account equity falls below the credited bonus amount. This option can be enabled for MT4/5 and isn't supported for cTrader. * Set the **Burn on Withdrawal** option to **Enabled** to burn the bonus credit when a client withdraws funds from their trading account. Click **Save** to apply the changes. ## Example [#example] This example illustrates how to interpret the requirements for automatic bonus crediting upon deposits, based on the settings configured on the **System** > **Settings** page and the bonus preset named `MT4`: Bonus preset Suppose that a client deposits funds to their trading account opened on the `MetaTrader4 Live` platform. Given that **Autocreate from deposit** is set to **Enabled** and the bonus preset for `MetaTrader4 Live` is available on the **Bonus presets** page, the client is eligible to receive a bonus for their deposit. The requirements for receiving the bonus are detailed below: You can create one or more bonus presets that include the settings required for configuring bonuses. To create a bonus preset: Navigate to **Bonuses** > **Bonus Presets**. Click **Create**, and then select the trading platform to which the bonus preset can be applied. On the **Create Bonus Preset** page, fill in the following fields: * **Name** — enter the name that you want to use for the preset in the Back Office. * **Priority** — specify the priority index of the preset. The preset with the lowest index on a given platform is used for automatic bonus crediting. * **Lifetime** — specify the number of days within which clients must fulfill the requirements of a bonus program. * **Lot per unit** — enter the ratio that is used to determine the volume that must be traded by clients. * The ratio is applied to a bonus amount, and the required volume is calculated as follows: `Required volume = Bonus amount / Lot per unit` * **Set credit immediately** — select either of the two values: * If **Enabled**, bonuses from different bonus programs are immediately added to a client trading account as credit, enabling the client to use credit funds for trading. * If **Disabled**, bonuses from different bonus programs are added to a client trading account one after another. Only after a bonus from the first bonus program is processed and assigned the final status (`Completed` or `Expired`), the second bonus is added to the client trading account as credit, and so on. * **Ignored open/close interval** — specify the minimum duration, in seconds, for which clients must keep positions open for them to be counted towards the traded volume. * **Autoenable trading if balance > 0** — select either of the two values: * If **Enabled**, when the account balance changes from zero or negative to positive, the `Trade Enabled` permission is automatically restored for the account, enabling the client to resume trading on their account, including the use of the bonus credit. * If **Disabled**, when the account balance changes from zero or negative to positive, the `Trade Enabled` permission isn’t automatically restored for the account. * **Ignored symbol groups** — optionally, select one or more symbol groups in which trades aren't counted towards the traded volume. For cTrader, individual symbols must be selected in this field instead of symbol groups, even though symbol groups are available on the cTrader platform. You can leave this field empty. Click **Save** to create the preset. The preset appears in the list of bonus presets. Check the priority index assigned to the preset. It's important if plan to use this preset for automatic crediting of bonuses to clients for depositing funds to their trading accounts (for details, refer to [How to automatically credit bonuses to clients upon deposits](how-to-automatically-credit-bonuses-to-clients-upon-deposits)). The preset with the **lowest** priority index, created for a specific platform, will be used for automatic bonuses. If needed, change the priority in the preset details. ## How to restrict the use of a bonus preset [#how-to-restrict-the-use-of-a-bonus-preset] You can restrict the use of a bonus preset based on a client's **country**, **client type**, **verification level**, **jurisdiction**, or **introducing broker (IB)**. You can also restrict a preset to be used only with specific [products](../../back-office-guide/products/products). Additionally, you can apply a combination of these restrictions to further narrow down eligibility for using the preset. If a client doesn't meet the restriction criteria, the preset can't be used to credit bonuses to that client, including through the [automatic process of crediting bonuses to clients upon deposits](how-to-automatically-credit-bonuses-to-clients-upon-deposits), if restrictions are applied to the preset used for automatic bonuses on a given platform. To restrict the use of a bonus preset: Navigate to **Bonuses** > **Bonus Presets**. Select the bonus preset and click the **Edit** button in the preset row. Click **Actions** in the upper-right page corner, and then select the restriction type: * **Country restrictions** — to make the preset available only to client from specific countries. * **Client type restrictions** — to make the preset available only to clients of selected types, such as Corporate or Individual. * **Verification level restrictions** — to make the program available only to clients with specific verification levels. * **Jurisdiction restrictions** — to make the preset available only to clients under selected jurisdictions. * **Introducing broker restrictions** — to make the preset available only to clients who are referrals of the specified IBs. * **Product restrictions** — to make the preset available for use only with specific [products](../../back-office-guide/products/products). In the **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option prevents the use of the preset when the selected rules are matched. * **Allow only** — this option allows the use of the preset only when the selected rules are matched. * In the **Rules** dropdown, elect one or more values that define the restriction — such as countries, client types, verification levels, jurisdictions, IBs, or products — depending on the restriction type you're applying. Click **Save** to apply the changes. The bonus preset now has usage restrictions applied. You can create temporary bonus programs in the Back Office. Once a bonus program is created, it’s immediately displayed on the **Bonuses** page in the B2CORE UI, enabling clients to claim bonuses from that program. To create a temporary bonus program: Navigate to **Bonuses** > **Temporary Bonuses**. Click **Create**, and then select the trading platform for which you want to create the bonus program. On the **Create Temporary Bonus** page, fill in the following fields: * In the **Name** field, enter the name of the bonus program, which will be displayed to clients in the B2CORE UI. * In the **Amount** field, specify the bonus amount. * In the **Currency** dropdown, select the currency for the bonus program. Only trading account denominated in the selected currency can be used to claim the bonus from the program. * In the **Expired** filed, set the end date and time for the bonus program. * In the **Platform Groups**, select one or more groups created on the trading platform, in which trades are counted towards the traded volume of the bonus program. * In the **Preset** dropdown, you can optionally select a preset to automatically fill in the remaining fields based on preset settings. Alternatively, you can leave the **Preset** field empty and fill in the remaining fields manually: * In the **Lifetime (days)** field, enter the duration, in days, during which clients must trade the required volume. * In the **Lot per unit** field, enter the ratio that is used to determine the volume that must be traded by clients. The ratio is applied to the specified bonus amount, and the required volume is calculated as follows: `Required volume = Bonus amount / Lot per unit` * In the **Set credit immediately**, select either of the two values: * **Enabled** — when a client claims bonuses from multiple programs at a time using the same trading account, all claimed bonuses are immediately added to their account as credit, enabling the client to use credit funds for trading. * **Disabled** — when a client claims bonuses from multiple programs at a time using the same trading account, the claimed bonuses are added to their trading account one after another. Only after the first claimed bonus is processed and assigned the final status (`Completed` or `Expired`), the second claimed bonus is added to the client trading account as credit, and so on. * In the **Ignored open/close interval (sec)** field, specify the minimum duration, in seconds, for which the client must keep positions open for them to be counted towards the traded volume of the bonus program. * In the **Autoenable trading if balance > 0** dropdown, select either of the two values: * **Enabled** — when the account balance changes from zero or negative to positive, the `Trade Enabled` permission is automatically restored for the account, enabling the client to resume trading on their account, including the use of the bonus credit. * **Disabled** — when the account balance changes from zero or negative to positive, the `Trade Enabled` permission isn’t automatically restored for the account. * In the **Ignored symbol groups** dropdown, select one or more symbol groups in which trades aren't counted towards the traded volume of the bonus program. For cTrader, individual symbols must be selected in this field instead of symbol groups, even though symbol groups are available on the cTrader platform. You can leave this field empty. Click **Save** to create the bonus program. The created bonus program is now listed on the **Bonuses** page in the B2CORE UI. ## Example [#example] This example illustrates how to interpret the requirements of the temporary bonus program with the following settings: The settings of a temporary bonus program To receive the bonus amount of 386 USD from the bonus program, a client needs to claim the bonus in the B2CORE UI using their active trading account opened on the `MetaTrader 5 Live` platform and denominated in USD. After claiming the bonus, the bonus is added to the client trading account as credit, enabling the client to use credit funds for trading. In order to receive the bonus credit on their account balance, the client must fulfill the following bonus program requirements: ## How to restrict the use of a temporary bonus program [#how-to-restrict-the-use-of-a-temporary-bonus-program] You can restrict the use of a temporary bonus program based on a client's country, client type, verification level, jurisdiction, or introducing broker (IB). Additionally, you can apply a combination of these restrictions for more granular access control. If a client doesn't meet the restriction criteria, the temporary bonus program won't be visible to that client in the B2CORE UI, and the client won't have the option to claim the bonus. To restrict the use of a temporary bonus program: Navigate to **Bonuses** > **Temporary Bonuses**. Select the bonus program and click the **Edit** button in the program row. Click **Actions** in the upper-right page corner, and then select the restriction type: * **Country restrictions** — to make the program available only to client from specific countries. * **Client type restrictions** — to make the program available only to clients of selected types, such as Corporate or Individual. * **Verification level restrictions** — to make the program available only to clients with specific verification levels. * **Jurisdiction restrictions** — to make the program available only to clients under selected jurisdictions. * **Introducing broker restrictions** — to make the program available only to clients who are referrals of the specified IBs. In the **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option prevents clients matching the selected rules from seeing the bonus program in the B2CORE UI and subscribing to it. * **Allow only** — this option allows only clients matching the selected rules to see the bonus program in the B2CORE UI and subscribe to it. * In the **Rules** dropdown, select one or more values that define the restriction — such as countries, client types, verification levels, jurisdictions, or IBs — depending on the restriction type you're applying. Click **Save** to apply the changes. The temporary bonus program now has usage restrictions applied. You can manually credit bonuses to clients by either creating a custom manual bonus or selecting a bonus from an existing temporary bonus program. To manually credit a bonus to a client: Navigate to **Bonuses** > **Bonus distribution**. Click **Create** in upper-right page corner, and then select either of the two options: * **Create** — to credit a custom manual bonus. * **Create Temporary Bonus** — to credit a bonus from an existing temporary bonus program. In the **Accounts** popup, locate the client account to which you want to credit the bonus, then click **Select** on the right side of the account row. You can search for the account by **Account ID**, **Account number**, **Currency**, or **Client name**. On the displayed page, fill in the fields based on the type of bonus: * In the **Amount** field (required), enter the bonus amount that you want to credit to the account. * In the **Caption** field (required), enter the bonus name, which will be displayed to the client in the B2CORE UI. * In the **Preset** dropdown, optionally select a preset to automatically fill in the remaining fields based on preset settings. Alternatively, leave the **Preset** field empty and fill in the remaining fields manually (refer to the [Bonus presets](../../back-office-guide/bonuses/bonus-presets) or field descriptions). * In the **Temporary bonus** dropdown, select the temporary bonus program from which the bonus will be credited. All settings of the select temporary bonus program will be applied to the bonus for the client. Click **Save** to credit the bonus. Depending on the **Set credit immediately** option and the presence of other credited bonuses, the bonus will be credited to the client account either immediately or after the previous bonus has been processed and assigned a final status (`Completed` or `Expired`). You can configure cashback reward programs for clients who trade on MT4/5. The cashback is earned for each lot traded on a client’s MT account over a day, based on closed positions, and deposited to the client the following day. The cashback is deposited to clients with the deposit method that uses the **cashback** provider (for details, refer to [How to create a deposit method for rewarding cashback](how-to-configure-cashback-programs-for-mt4-and-mt5#how-to-create-a-deposit-method-for-rewarding-cashback)). To configure a cashback program: Navigate to **Cashback** > **MetaTrader Volume**. Select the MT platform for which you want to configure the cashback program: **MetaTrader 4** or **MetaTrader 5**. On the **Preferences** tab, configure the following settings: * In the **Cashback value** field, enter the fixed rate rewarded per each traded lot. The cashback value can be denoted as an integer or decimal value. The cashback amount is calculated as follows: `Cashback amount = Cashback value * Number of traded lots` * In the **Cashback currency** dropdown, select the cashback program currency. * In the **Account destination type** dropdown, select the type of the account to which the cashback is rewarded: * **Trade** — the cashback is rewarded to the client’s MT trading account on which the volume taken for cashback calculations has been traded. * **Personal** — the cashback is rewarded to a client’s account of the `personal` type, such as a wallet, denominated in the cashback program currency. * In the **Ignored symbols groups** dropdown, select the symbols that you want to exclude from cashback calculations. * In the **Accounts platform groups allowance** dropdown, select the MT account groups. By default, all the account groups configured on the MT platform are selected. * If the **Accounts number allowance** field is empty, all the MT trading accounts included in the groups selected in **Accounts platform groups allowance** field are rewarded the cashback. * In the **Accounts number allowance** field, enter MT account numbers separated by commas. * If one or more MT account numbers are listed in this field, only the listed accounts are rewarded the cashback and the **Accounts platform groups allowance** option is ignored. To enable the cashback program, select **Enabled**. Click **Save** to apply the changes. After saving the changes, the **Updated** field displays the date when the cashback program was configured or last modified. ## How to add cashback reward tiers [#how-to-add-cashback-reward-tiers] You can add one or several tiers that determine the increased cashback rates for clients who have traded certain volumes over a day. Add a cashback reward tier: Navigate to **Cashback** > **MetaTrader Volume**. Select the MT platform for which you want to configure cashback reward tiers: **MetaTrader 4** or **MetaTrader 5**. Access the **Tier** tab, and click **+Create**. In the **Name** field, enter the tier name. In the **Cashback value** field, enter the increased cashback rate that is used instead of the rate specified on the **Preferences** tab if the volume traded on an MT account over a day has reached the required tier volume. In **Trading volume, lots** field, enter the number of lots that must be traded in order to receive the increased cashback. Click **Save** to apply the changes. If during a day a client has traded on their MT account the volume that matches the tier volume or more, the cashback for this MT account is calculated against the increased cashback rate. ## How to create a deposit method for rewarding cashback [#how-to-create-a-deposit-method-for-rewarding-cashback] The cashback is rewarded to clients with the deposit method that uses the **cashback** provider. This method is used only for depositing the cashback and isn’t available to clients in the B2CORE UI. Create the deposit method for rewarding the cashback: Navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create**, and fill in the following fields: * In the **Name** field, enter the deposit method name used in the Back Office. * In the **Caption** field, enter the deposit method caption used in the Back Office. * In the **Provider** dropdown, select **cashback**. * In the **Currency** dropdown, select the same currency as in the **Cashback currency** field of the configured cashback program for MT4 or MT5. * In the **Connection** dropdown, select **Not selected**. Click **Save** to add the method. On the **Settings** tab, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * The **Group** field is set to **Not selected** by default. This deposit method can’t be included in any deposit method group. Click **Save** to apply the changes. Access the **TR Currencies** tab, and make sure that the added transaction currency matches the cashback program currency and is enabled. If the transaction currency isn’t enabled, click **Edit**, and select **Yes** in the **Enabled** dropdown. Click **Save** to apply the changes. ## How to identify clients who received cashback rewards [#how-to-identify-clients-who-received-cashback-rewards] Get a list of clients who have already received the cashback and view transaction details: Navigate to **Finance** > **Deposits**. To get a list of cashback transactions, select the name of the deposit method used for rewarding the cashback in the dropdown displayed under the **Payment method** column. To view the details of a specific transaction, click the **Edit** button located in the transaction row. Some actions taken by your clients in the B2CORE UI require a resolution (approval or rejection). To view pending requests quickly, click the **bell** icon in the top bar and navigate to the request details by clicking the desired request. Alternatively, you can view a list pending requests on the **Clients** > **Requests** page. To resolve a client request: Navigate to **Clients** > **Requests**. Select the request. You can filter the requests list by client email, request type, or other criteria to quickly find the needed request. Click the **Edit** button to view the request details. Note that for some providers it is also possible to edit the deposit or payout amount directly in the request. **Add comment** if required. This comment will be displayed only in the Back Office. Your client won't be notified about this. Use the **Options** button to set the color of the request in the list. Click **Audit** to check the transaction. The system will summarize all incoming transactions on the account and show a notification if there is a significant discrepancy in the balance. This step requires the `Update requests` permission. Click **Approve** or **Reject** to resolve the request. If **rejected**: Select **Resolution type** and **Resolution**. The type and resolution must be previously created in the system (for details, refer to [How to create a request resolution type](../manage-system-settings/how-to-create-a-request-resolution-type) and [How to create a request resolution](../manage-system-settings/how-to-create-a-request-resolution)). **Confirm** the rejection by solving a simple math problem and provide the result in the **Verification code** field. Click **OK** to save the changes. After that, an email notification about the request resolution will be sent to the client. Use client tags to organize and filter client data in the Back Office. By assigning tags to clients, you can enable Back Office users, such as admins or managers, to only see clients with specific tags, while hiding others. You can assign tags to clients manually (for details, refer to the instructions below [Assign tags to a single client](#assign-tags-to-a-single-client) and [Assign tags to multiple clients](#assign-tags-to-multiple-clients)). If you use [jurisdictions](../../back-office-guide/clients/jurisdictions), tags linked to a jurisdiction will be automatically assigned to clients, along with the jurisdiction, after registration, based on the selected country (for details, refer to [How to create a jurisdiction](how-to-create-a-jurisdiction)). ## Assign tags to a single client [#assign-tags-to-a-single-client] To assign tags to a client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. In the **Client Tags** dropdown, select one or several tags that you want to assign to this client. Press **Enter** after selecting each tag in the dropdown. To view a list of available client tags or add new tags, navigate to **System** > **Users** > **Client Tags**. Click **Save** to apply the changes. The tags assigned to the client are displayed in the **Tags** column on the **General** page. ## Assign tags to multiple clients [#assign-tags-to-multiple-clients] To assign tags to multiple clients at once: Navigate to **Clients** > **General**. Click the **Select** button in the upper-right page corner, and then select clients to which you want to assign tags by clicking client rows. * To select all clients, click **Select All**. * To unselect a client, click the corresponding client rows again. * To unselect all clients at once, click **Deselect**. Expand the **Edit selected clients** dropdown in the upper-right page corner, and then select **Assign Tags**. In the **Client Tags** dropdown, select one or several tags that you want to assign to the selected clients. Press **Enter** after selecting each client in the dropdown. To replace the existing client tags with the new ones, enable the option to **Overwrite current values**; otherwise, the new tags will be added to the existing ones. Click **Save** to apply the changes. The tags assigned to the clients are displayed in the **Tags** column on the **General** page. **See also** [How to make an admin user see only specific clients](../manage-system-settings/how-to-make-an-admin-user-see-only-specific-clients) To change a password for a client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the **View client** page, click the **Actions** button in the upper-right page corner, and then select **Change password**. In the **Change password** popup: * Enter a new password in the **Password** field. Alternatively, you can generate a secure password by clicking the **Generate** button on the right side of the **Password** field. * In the **Send mail** dropdown, select **Yes** to email the new password to the client. Click **Save** to change the password. To create a jurisdiction: Navigate to **Clients** > **Jurisdictions**. Click **+Create** in the upper-right page corner. On the **Create a jurisdiction** page, fill in the following fields: * In the **Caption** field, enter the name that you want to apply to the jurisdiction, for example: `Latin America`. * In the **Countries** dropdown, select countries that belong to the jurisdiction. Only the countries that are enabled on the [System > Countries](../../back-office-guide/system/countries) page are listed in the dropdown. * In the **Client types** dropdown, select client types to associate with the jurisdiction. Only the client types that are enabled on the [Clients > Types](../../back-office-guide/clients/types) page are listed in the dropdown. * In the **Tags** dropdown, optionally select one or more [tags](../../back-office-guide/system/users/client-tags) that will be automatically assigned to clients along with the jurisdiction. * In the **Description** field, enter the description or additional details about the jurisdiction. * Select the **Apply changes to all existing clients** checkbox to apply the jurisdiction to all existing clients whose country and client type match the combinations added to the jurisdiction. Leave the checkbox disabled to apply the jurisdiction only to clients who register after creating the jurisdiction. The existing clients won't be affected. Click **Save** to create the jurisdiction. Clients can now be automatically assigned to the jurisdiction after they complete the registration process, based on their countries and client types. The assigned jurisdiction is displayed in the **Additional Info** section in the client details, where it can also be changed manually. ## How to edit a jurisdiction [#how-to-edit-a-jurisdiction] To edit a jurisdiction: Navigate to **Clients** > **Jurisdictions**. Select the jurisdiction that you want to modify and click the **Edit** button. On the **Update jurisdiction** page, you can make the following changes: * In the **Countries** dropdown, add or remove countries associated with the jurisdiction. * In the **Client types** dropdown, add or remove types associated with the jurisdiction. * In the **Tags** dropdown, add or remove tags that will be assigned to clients belonging to this jurisdiction. * To apply the updated settings to the existing clients, select the **Apply changes to all existing clients** checkbox. Leave the checkbox disabled to apply the changes only to new clients who register after the changes are saved. The existing clients won’t be affected. Click **Save** to apply the updates to the jurisdiction settings. The changes will take effect based on whether the **Apply changes to all existing clients** checkbox is selected or disabled. If you have any jurisdiction-based restrictions applied to products, deposit and withdrawal methods, or verification levels, they will be in effect for clients according to the updated jurisdiction settings. ## Example 1 [#example-1] Suppose two jurisdictions are configured with the same countries but different client type settings: * The **Seychelles (SC)** jurisdiction: * **Countries**: UAE and Oman * **Client type**: Personal * The **Mauritius (MU)** jurisdiction: * **Countries**: UAE and Oman * **Client type**: Corporate When new clients are registered: * A client from **UAE** with **Personal** type is automatically assigned the **SC** jurisdiction. * A client from **UAE** with **Corporate** type is automatically assigned the **MU** jurisdiction. * A client from **Oman** with **Personal** type is assigned the **SC** jurisdiction. * A client from **Oman** with **Corporate** type is assigned the **MU** jurisdiction. * A client from a country not listed in either jurisdiction, or with a client type not matching the jurisdiction settings, isn't assigned any jurisdiction. ## Example 2 [#example-2] Suppose the **Seychelles (SC)** jurisdiction from the above example is updated: **Oman** is removed and **Saudi Arabia** is added: The **Seychelles (SC)** jurisdiction: * **Countries**: UAE and Saudi Arabia * **Client type**: Personal If the **Apply changes to all existing clients** checkbox is *enabled*: * The **SC** jurisdiction is removed from existing clients whose country is **Oman** and client type **Personal**. They aren't assigned any jurisdiction. * Existing clients from **Saudi Arabia** with **Personal** type are assigned the **SC** jurisdiction. * Existing clients from **UAE** remain unchanged. * The updated **SC** jurisdiction will also be assigned to newly registered clients based on the updated country list. If the **Apply changes to all existing clients** checkbox is *disabled*: * Existing clients remain unchanged. For example, clients from **Oman** with **Personal** type still have the **SC** jurisdiction even though **Oman** has been removed. * The updated **SC** jurisdiction only applies to clients who register after the changes are saved, based on the updated country list. **See also** [How to make an admin user see only specific clients](../manage-system-settings/how-to-make-an-admin-user-see-only-specific-clients) To disable two-factor authentication (2FA) for a client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the **View client** page, go to the **Settings** tab. In the **2FA** section, select `Disabled` in the dropdown for either **google** or **sms**, or both, depending on which 2FA method you want to turn off. Click **Save** to apply the changes. To enable internal transfers for a client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the **View client** page, go to the **Settings** tab. In the **Rights** section, enable the **Internal Transfers** checkbox. Click **Save** to apply the changes. To find the Back Office user who approved or rejected a specific client request: Navigate to **Clients** > **Requests**. Locate the needed request. By default, the list is filtered by the `Pending` status. Clear the **Status** filter to view all requests. To narrow your search, apply other filters such as **Client name**, **Client email**, **Country**, the request's **Type**, **Status** (`Approved` or `Rejected`), or a date range. Check the **Processed by** column to see the email address of the Back Office user who resolved the request. This same **Processed by** information is also displayed in the upper-right corner of the request details page. To register a new client and create their profile: Navigate to **Clients** > **General**. Click **+Create** in the upper-right page corner. In the displayed **Create client** popup, enter the client's email, first name, and last name. The required fields may vary depending on the configuration of the [Registration wizard](../../back-office-guide/system/wizards#registration-wizard). Click **Save** to create the client profile. Upon successful registration, the client will receive an email notification confirming the registration. The newly registered client is added to the clients list displayed on the **General** page. You can click the **Edit** button to access the client details and update their profile with further information. By default, the client profile is created without a password. The client needs to reset the password upon their first sign-in to the B2CORE UI. Alternatively, you can [set the password](how-to-change-a-client-password) for the client and send it via email. To upload one or more files to a client profile: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the **View client** page, go to the **Files** tab. Click **+Add file** to add a single file or **+Upload multiple files** to add several files at once. To upload one or several files to a folder, click **+Add directory** and specify the folder name in the **Caption** field. Go to the newly created folder and click **+Add file** or **+Upload multiple files**. Set **Caption** for the file. This caption will be displayed in the files list. When uploading multiple files, the caption automatically displays the list of file names. Select the file(s) to upload. Note that the uploaded file(s) must meet the following requirements: * Supported formats: DOC, DOCX, XLSX, CSV, PDF, JPG, PNG, PAGES, NUMBERS, ZIP, 7-Zip, and RAR * File size: up to 3 MB Click **Save** to upload the file. To check wallet addresses for deposits and withdrawals for a client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the **View client** page, click the **Finance** tab, and then select **Withdrawal wallets** or **Deposit wallets** in the dropdown. On the selected page, find the addresses in the **Address** column, which displays the alphanumeric strings representing the deposit or withdrawal addresses generated for the client. You can configure B2CORE to use the [Twilio](https://www.twilio.com/) communication platform to deliver 2FA codes via SMS or make phone calls to your clients via the B2CORE Back Office. ## Key points [#key-points] * For phone calls, you can select which active Twilio number to use if your account has multiple numbers. This allows you to choose the most suitable local number, increasing the chances of successful contact and enhancing client trust. * Outgoing calls made from the B2CORE Back Office via Twilio can also be recorded, with the recordings saved in your Twilio account for later playback. The following information is required to configure a connection to Twilio via the Back Office: * Twilio account SID * Twilio authentication token * Twilio phone number * TwiML App SID ## How to sign up with Twilio [#how-to-sign-up-with-twilio] This instruction describes how to sign up with Twilio and obtain the required information to connect to Twilio via the Back Office. This instruction is created based on the latest version of Twilio as of this writing. Due to possible changes to the procedures described here, we suggest that you consult the official [Twilio Help Center](https://help.twilio.com/) or contact their support in case you have any questions. Go to the [Twilio](https://www.twilio.com/) website and sign up to create a new account. By default, a free trial account is created. Sign in to your account and upgrade it to go live by clicking the **Upgrade** link. Once the account is upgraded, your Twilio account SID and authentication token are generated automatically. Obtain a Twilio phone number by following the instructions provided in these articles: * [How to Search for and Buy a Twilio Phone Number from Console](https://support.twilio.com/hc/en-us/articles/223135247-How-to-Search-for-and-Buy-a-Twilio-Phone-Number-from-Console) * [Twilio Phone Number Types and Their Capabilities](https://support.twilio.com/hc/en-us/articles/223135367-Twilio-Phone-Number-Types-and-Their-Capabilities) Create a TwiML App by following these steps: * Go to the [TwiML Apps page](https://console.twilio.com/?frameUrl=/console/voice/twiml/apps). This page is available after signing in to your Twilio account. * Click **Create new TwiML App**. * Fill out the TwiML App form: * In the **Friendly Name** field, specify a name for your app. **Voice Configuration** * In the **Request URL** field, specify a URL for your voice app webhook, such as: `api.company.name.com/api/v1/voice/twilio-webhook` * In the **Request Method** dropdown, select **HTTP POST**. **Messaging Configuration** * In the **Request URL** field, specify a URL for your messaging app webhook, which is a URL of your B2CORE Back Office. * In the **Request Method** dropdown, select **HTTP POST**. Click **Create** to create the app. Once the app is created, your TwiML App SID is generated automatically. Use the obtained Twilio account SID, authentication token, phone number and TwiML App SID to configure a connection to Twilio via the B2CORE Back Office. ## How to configure Twilio as a 2FA SMS provider [#how-to-configure-twilio-as-a-2fa-sms-provider] You can configure Twilio to deliver 2FA codes to your clients via SMS. Before configuring Twilio as a 2FA SMS provider, make sure that you have obtained the following required information: * Twilio account SID * Twilio authentication token * Twilio phone number To learn how to obtain the required information, refer to [How to sign up with Twilio](how-to-configure-twilio#how-to-sign-up-with-twilio). To configure Twilio as a 2FA SMS provider: Navigate to **System** > **SMS Providers**. and then click **+Create** in the upper-right corner of the page. Click **+Create** in the upper-right page corner. In the displayed popup, fill in the following fields: * In the **Name** field, enter a name that you want to use for the configuration (such as `twilio_sms`). * In the **Caption** field, enter a caption that will be applied to the configuration in the Back Office (such as `Twilio SMS`). * In the **Provider** dropdown, select **Twilio**. Click **Save** to save the configuration. On the **Edit provider** page, specify the following connection settings: * In the **API sid** field, specify your Twilio account SID. * In the **API secret** field, specify your Twilio authentication token. * In the **Sender phone number** field, specify your Twilio phone number. Make sure that the **Enabled** field is set to **Yes**. Click **Save**. Twilio can now be used to deliver 2FA codes via SMS. To learn more, refer to [How to set up 2FA with SMS](../manage-system-settings/how-to-set-up-2fa#how-to-set-up-2fa-with-sms). ## How to configure Twilio as a phone service provider [#how-to-configure-twilio-as-a-phone-service-provider] Twilio can be configured to make phone calls to your clients via the Back Office. Before configuring Twilio as a phone service provider, make sure that you have obtained the following required information: * Twilio account SID * Twilio authentication token * Twilio phone number * TwiML App SID To learn how to obtain the required information, refer to [How to sign up with Twilio](how-to-configure-twilio#how-to-sign-up-with-twilio). To configure Twilio to make phone calls: Navigate to **System** > **External Connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name that you want to use for the connection. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **TwilioVoice**. Click **Save** to save the connection. The **Twilio** connection will appear in the list of external connections. Click the **Edit** button to open the connection details. On the **Edit connection** page, fill in the following settings: * In the **Account SID** field, specify your Twilio account SID. * In the **Auth token** field, specify your Twilio authentication token. * In the **TwiML App SID** field, specify your TwiML App SID. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** dropdown), set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. Twilio can now be used to make phone calls to your clients via the Back Office. ## How to test the Twilio phone service operation [#how-to-test-the-twilio-phone-service-operation] After you have configured a connection to Twilio for making phone calls via the Back Office, you can make a call to one of your clients to test the connection. To make a call: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. Go to the **Contacts** tab. Click the phone button phone-button displayed in the **Phones** section to dial a specified client's phone number using Twilio. If you have several active Twilio numbers, you can select the number you want to use for calling in the displayed popup. If no error message is displayed in the Back Office, the Twilio connection is configured properly. To deliver event notifications to Back Office users through Telegram, you must specify a user’s personal Telegram identifier or the identifier of a group or channel to which notifications will be sent. To get a user’s Telegram identifier, the user should do the following: In Telegram, send a message to [@getidsbot](https://t.me/getidsbot?do=open_link) and get the response containing the user’s Telegram identifier. Copy the obtained identifier and paste it to the **Telegram chat Id** field available on the[ Back Office user details page](../../back-office-guide/system/users/users#details). To get the identifier of a Telegram group or channel in which a user is the admin, the user should do the following: Navigate to a Telegram group or channel whose identifier the user wants to get. Add [@getidsbot](https://t.me/getidsbot?do=open_link) to the selected group or channel and get the response containing the group or channel identifier. Copy the obtained identifier and paste it to the **Group Id** field displayed under the enabled **Telegram** option when configuring event notifications. **See also** [How to set up event notifications](../manage-system-settings/how-to-set-up-event-notifications) Use integration with [Twilio SendGrid](https://sendgrid.com/) to automatically sync client data from B2CORE and use it in SendGrid for managing email lists, sending transactional and marketing emails, and tracking email performance. Before proceeding with the instructions, you must have signed up for SendGrid and have an active account. ## How to configure a connection to SendGrid [#how-to-configure-a-connection-to-sendgrid] To configure a connection to SendGrid in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **SendGrid**. Click **Save** to create the connection. The **SendGrid** connection will appear in the list of external connections. Click **Edit** to enter the connection details and complete the following fields: * In the **API URL** field, enter the base URL for your SendGrid region: * `https://api.sendgrid.com/v3/` — for SendGrid accounts registered in the **US region**. * `https://api.eu.sendgrid.com/v3/` — for SendGrid accounts registered in the **EU region**. You can find your **Base URL** in SendGrid by navigating to **Settings** > **Account Details**. * In the **API key** field, enter your SendGrid API key. The **API key** can be generated in SendGrid by navigating to **Settings** > **API Keys** and creating a key with the required permissions: * **Full access** — access to all SendGrid functionalities. * **Restricted access** — limited access only to selected functionalities, for example, access to **Marketing Campaigns** or contact lists. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. After configuring the connection, all clients listed under **Clients** > **General** in the B2CORE Back Office will be automatically synced with SendGrid and added as contacts. Any further updates to their personal details will also be synced with SendGrid. ## Overview of client data synced with SendGrid [#overview-of-client-data-synced-with-sendgrid] The following required and optional client fields can be synced from B2CORE to SendGrid contacts: ### Required fields [#required-fields] The following required client fields are always synced from B2CORE to SendGrid: * **Email** * **First name** * **Last name** ### Optional fields [#optional-fields] The following optional fields, which can be useful for business processes, are synced from B2CORE to SendGrid if they are specified in the client details in the B2CORE Back Office: * **Address** * **City** * **State** * **Postal code** * **Country** * **Phone** — if multiple phone numbers are specified for a client in the B2CORE Back Office, the confirmed number is sent to SendGrid; if none is confirmed, the most recently updated number is used. ## How to add custom fields for syncing from B2CORE to SendGrid [#how-to-add-custom-fields-for-syncing-from-b2core-to-sendgrid] You can sync additional fields from B2CORE to SendGrid, such as a client’s **Status**, **Client type**, **Verification level**, and **Jurisdiction** to reflect them in SendGrid contacts. In **SendGrid**, add these fields: Sign in to your SendGrid account. In the **Marketing Campaigns** section, click **Marketing** > **Contacts** > **Custom Fields**. Click **Create Custom Field**. Enter the field name, select the appropriate field type, and specify other parameters. Save the changes to add the new custom field. In the **B2CORE Back Office**, set up field mapping: Navigate to **System** > **External connections**. Find the connection configured for SendGrid and click **Edit** to open the connection details. Set up the field mapping by selecting the corresponding fields created in SendGrid for **Status**, **Client type**, **Verification level**, and **Jurisdiction**. Set up field mapping Click **Save** to apply the changes. Once the fields are added and mapped, the client’s **Status**, **Client type**, **Verification level**, and **Jurisdiction** are automatically synced from B2CORE and displayed in SendGrid contacts. If one or more fields aren't mapped, they won't be synced to SendGrid contacts. ## How to sync clients from B2CORE to specific lists in SendGrid [#how-to-sync-clients-from-b2core-to-specific-lists-in-sendgrid] Lists in SendGrid are the Marketing Campaigns feature that helps you organize contacts and manage email campaigns. In SendGrid, create one or more lists: Sign in to your SendGrid account. Go to **Marketing** > **Contacts** > **Lists & Segments** Click **Create List**. Enter the list name. Click **Save** to create the list. In the B2CORE Back Office, select the list for syncing: Sign in to the B2CORE Back Office. Navigate to **System** > **External connections**. Find the connection configured for SendGrid and click **Edit** to open the connection details. In the **List** dropdown, select the desired list created in SendGrid. This will ensure all synced clients from B2CORE are added to that list. If no list is selected, synced clients won't be added to any list. Select the SendGrid list to sync clients from B2CORE Click **Save** to apply the changes. Once the list added and mapped, all clients from B2CORE will be automatically synced to the specified list in SendGrid. Any new registrations or updates to existing clients will also reflect in the same list. Use integration with [ActiveCampaign](https://www.activecampaign.com/) to streamline your marketing efforts by automatically syncing client data from B2CORE to ActiveCampaign, managing targeted email campaigns, sending notifications, and enhancing client engagement. Follow the instructions below to configure the ActiveCampaign connection in the B2CORE Back Office and set up the required parameters. Before proceeding with the instructions, you must have signed up for ActiveCampaign and have an active account. ## How to configure a connection to ActiveCampaign [#how-to-configure-a-connection-to-activecampaign] To configure a connection to ActiveCampaign in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **ActiveCampaign**. Click **Save** to create the connection. The **ActiveCampaign** connection will appear in the list of external connections. Click **Edit** to enter the connection details and complete the following fields: * In the **API URL** field, provide the API URL as specified in your ActiveCampaign account. * In the **API Token** field, specify your ActiveCampaign API key. Both the API URL and key can be found in your ActiveCampaign account under **Settings** > **Developer**. Locate the URL and Key fields in ActiveCampaign Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. After configuring the connection, all clients listed under **Clients** > **General** in the B2CORE Back Office will be synced with ActiveCampaign and displayed in the **Contacts** section of your ActiveCampaign account. ## Overview of client data synced with ActiveCampaign [#overview-of-client-data-synced-with-activecampaign] The following required client fields are always synced from B2CORE to ActiveCampaign: * **First name** * **Last name** * **Email** * **Phone** When the ActiveCampaign external connection is enabled in the B2CORE Back Office, any new client registration or update to an existing client's details (such as first name, last name, email, or phone number) will be automatically synced with ActiveCampaign. ## How to add more fields for syncing from B2CORE to ActiveCampaign [#how-to-add-more-fields-for-syncing-from-b2core-to-activecampaign] You can sync additional fields from B2CORE to ActiveCampaign, such as a client’s **Status**, **Country**, and **Client type**, to support client segmentation and targeted email marketing. In **ActiveCampaign**, add these fields: Sign in to your ActiveCampaign account. Go to **Contacts** > **Fields**. On the **Contacts** tab, Click **Add Field**. Enter the field name, select the appropriate field type, and specify other parameters. Click **Save** to add a new field in your ActiveCampaign account. The image below shows the added Status, Country, Client type, Jurisdiction, and Verification level fields in ActiveCampaign: Added fields in ActiveCampaign In the **B2CORE Back Office**, set up field mapping: Navigate to **System** > **External connections**. Find the connection configured for ActiveCampaign and click **Edit** to open the connection details. Set up the field mapping by selecting the corresponding fields created in ActiveCampaign for **Status**, **Country**, **Client type**, **Jurisdiction**, and **Verification level**. Set up field mapping Click **Save** to apply the changes. Once the fields are added and mapped, the client’s **Status**, **Country**, **Client type**, **Jurisdiction**, and **Verification level** are automatically synced from B2CORE and shown in the client details in ActiveCampaign. ## How to sync clients from B2CORE to specific lists in ActiveCampaign [#how-to-sync-clients-from-b2core-to-specific-lists-in-activecampaign] Lists in ActiveCampaign help you organize contacts so you can send them relevant information. By assigning clients to specific lists, you can target your email campaigns more effectively and deliver personalized messages to the right audience. In **ActiveCampaign**, create one or more lists: Sign in to your ActiveCampaign account. Go to **Contacts** > **Lists**. Click **Add a list**. Enter the list name and specify other parameters. For the **Marketing Channel**, select **Email**, as it is the only supported channel for this integration. Click **Save** to create the list. In the **B2CORE Back Office**, select the list for syncing: Sign in to the B2CORE Back Office. Navigate to **System** > **External connections**. Find the connection configured for ActiveCampaign and click **Edit** to open the connection details. In the **List** dropdown, select the desired list created in your ActiveCampaign account. This will ensure all synced clients from B2CORE are added to that list. If no list is selected, synced clients won't be added to any list. Select the ActiveCampaign list to sync clients from B2CORE Click **Save** to apply the changes. Once the list is selected and saved, all clients from B2CORE will be automatically synced to the specified list in ActiveCampaign. Any new registrations or updates to existing clients will also reflect in the same list. To be able to send [event notifications](../../back-office-guide/system/event-notifications) in Slack, set up a Slack bot and obtain a token for its managing. This instruction is created based on the latest version of Slack as of this writing. Due to possible changes to the procedures described here, we suggest that you consult the official [Slack documentation](https://slack.com/help) or contact their support in case you have any questions. To set up a Slack bot: Go to the Slack website and create a [Slack app](https://api.slack.com/apps?new_app=1). In the **Create an app** window, click **From scratch**, and then fill in the following fields: * In the **App name** field, enter a name for your Slack bot. The bot name can be changed afterwards. * Select a Slack workspace for which you want to create the bot. The workspace cannot be changed. Click **Create App**. In the main menu, click **App Home**. On the **App Home** page, click **Review Scopes to Add**. Navigate to the **Scopes** section, click **Add an OAuth Scope**, and then add the following permission scopes to your bot: * `chat:write` * `chat:write.public` * `users:read` * `users:read.email` For a list of all available permission scopes, refer to [Permission scopes](https://api.slack.com/scopes). Add Slack bot scopes Navigate to the **OAuth Tokens for Your Workspace** section and click **Install to Workspace**. After installing the app, copy the token for managing your Slack bot, which is displayed in the **Bot OAuth User Token** field. Copy a Slack bot token In the B2CORE Back Office, navigate to **Systems** > **Settings**. Paste the copied token into the **Bot token** field displayed under the **SlackBot** section. Click **Save** to apply the changes. **See also** [How to set up event notifications](../manage-system-settings/how-to-set-up-event-notifications) To be able to send [event notifications](../../back-office-guide/system/event-notifications) in Telegram chats, groups and channels, create a Telegram bot and obtain a token for its managing. This instruction is created based on the latest version of Telegram as of this writing. Due to possible changes to the procedures described here, we suggest that you consult the official [Telegram documentation](https://core.telegram.org/bots) or contact their support in case you have any questions. To create a Telegram bot: In Telegram, send the `/newbot` command to [@BotFather](https://t.me/botfather). Follow the instructions and specify the following information: * Enter a name for your Telegram bot. * Enter a username for your bot. It must end with “bot” (such as `NotificationsBot` or `notifications_bot`). Copy the displayed token that is required to authorize your bot and send requests to the Bot API. In the B2CORE Back Office, navigate to **Systems** > **Settings**. Paste the copied token into the **Bot API Token** field displayed under the **Telegram Bot** section. Click **Save** to apply the changes. **See also** [How to set up event notifications](../manage-system-settings/how-to-set-up-event-notifications) To add a currency: Navigate to **Currencies** > **Currencies**. Click **+Create** in the upper-right page corner. On the **Currency creation** page, fill in the following fields: * In the **Code** field, enter a numeric code for the currency that you want to add. * In the **Alpha** field, enter an alpha code for the currency. Both codes are provided by your account manager. In the **Caption** field, enter a currency name that will be displayed to clients in the B2CORE UI. Click **Save** to add the currency. Add currency pairs that will be available for exchange in the Back Office and B2CORE UI. You can add currency pairs one by one or add multiple pairs at once. ### How to add a currency pair [#how-to-add-a-currency-pair] To add a currency pair: Navigate to **Currencies** > **Currency pairs**. Click **+Create** in the upper-right page corner. On the **Create currency pair** page, fill in the following fields: * In the **From currency** dropdown, select a base currency. * In the **To currency** dropdown, select a quote currency. * The **Enabled for admin** and **Enabled for client** options are set to **Yes** by default, meaning that the currency pair will be available for exchange in the Back Office and B2CORE UI. * If you want to make the currency pair unavailable for exchange in the Back Office or B2CORE UI, or both, select **No** for the corresponding option. * In the **Max amount** field, enter the maximum allowed amount per exchange operation in the currency pair. * In the **Step** field, the minimum increment by which an amount can be changed at a time. * In the **Request required** dropdown, select: * **Yes** — to create requests for admin approval when clients initiate exchanges in the currency pair in the B2CORE UI. After approval, exchanges are executed using the rates specified in the approved requests. * **No** — to execute exchanges in the currency pair without admin approval. Click **Save** to add the currency pair. ### How to add multiple currency pairs [#how-to-add-multiple-currency-pairs] To add multiple currency pairs at once: Navigate to **Currencies** > **Currency pairs**. Click **+Create multiple** in the upper-right page corner. On the **Create currency pair** page, fill in the following fields: * In the **Currencies** dropdown, select two or more currencies to add them as currency pairs. Press **Enter** after each selected currency. For example, selecting `USD`, `EUR`, and `BTC` in the dropdown will create the following currency pairs: `USDEUR` and `USDBTC`\ `EURUSD` and `EURBTC`\ `BTCUSD` and `BTCEUR` * In the **Max amount** field, enter the maximum allowed amount per exchange operation in the specified currency pairs. * In the **Step** field, the minimum increment by which an amount can be changed at a time. * In the **Request required** dropdown, select: * **Yes** — to create requests for admin approval when clients initiate exchanges in the specified currency pairs in the B2CORE UI. After approval, exchanges are executed using the rates specified in the approved requests. * **No** — to execute exchanges in the currency pairs without admin approval. Click **Save** to add the currency pairs. You can configure exchange rates for currencies and set up rate providers to ensure accurate currency conversions when needed for transaction processing. To set up a rate provider: Navigate to **Currencies** > **Rates**. Click **+Create** in the upper-right page corner. On the displayed page, fill in the following fields: * In the **From currencies** and **To currencies** dropdowns, select the currencies for which you want to configure exchange rates. You can select one or multiple currencies in the dropdowns, or choose **All** to apply the configured rates to all currencies. * In the **Provider** dropdown, select the desired provider for currency rates. * In the **Name** field, enter a name for your exchange rate configuration. Click **Save** to create the provider. In the rates list, find the provider that you've created and click **Edit** to enter the provider details. If additional settings are required for the provider, the **Options** section is displayed, enabling you to configure connection details for the provider. If using the **custom** provider, fill in the following fields in **Options**: * In the **Rate** field, enter the fixed rate that will be used for conversions. * In the **Base currency** dropdown, select the currency that will serve as the base for all conversions using the specified fixed rate. In the **Enabled** dropdown, select **Yes**. Click **Save** to apply the changes. After setting up the rate provider, you can designate it as the preferred provider to supply exchange rates for [deposit](../../back-office-guide/system/deposit-system#deposit-methods) and [withdrawal methods](../../back-office-guide/system/payout-system#payout-methods). If a provider is assigned to a specific method, the system will prioritize requesting rates from this provider when the method is used. ## Example [#example] This example illustrates the settings for a custom exchange rate for `USD/EUR`: * `USD` is selected in the **From currencies** field and `EUR` in the **To currencies** field. * In the **Provider** dropdown, **custom** is selected. * The **Enabled** option is set to **Yes**. In the **Options** section: * The **Rate** field displays `0.86`, which is the specified custom exchange rate. * The **Base currency** is set to USD. Custom exchange rate settings Exchanges initiated by clients in specific currency pairs through the B2CORE UI can be configured to require admin approval. When clients create exchanges in these specific pairs, requests of the **Exchange** type are created and listed on the [Clients > Requests](../../back-office-guide/clients/requests) page. These exchanges are executed only after corresponding requests are approved by the admin, using the rates specified in the approved requests. To enable requests for exchanges in a specific currency pair: Navigate to **Currencies** > **Currency pairs**. Select the currency pair for which you want to enable exchange requests and click the **Edit** button. On the **Edit currency pair** page, select **Yes** for the **Request required** option. Click **Save** to apply the changes. You can set the priority of exchange rate providers for obtaining exchange rates for each currency pair. This may help to prevent exceeding request limits to exchange rate providers. Navigate to **Currencies** > **Currency pairs**. Select the currency pair for which you want to set the priority of exchange rate providers and click the **Edit** button. In the **Rates Custom Priority** field, drag and drop the exchange rate providers supported for this currency pair to set them in a desired order. Click **Save** to apply the changes. In exchange requests from clients, which haven’t yet been approved and have the `Pending` status, you can change the rates at which the exchanges will be executed. To change the rate in an exchange request: Navigate to **Clients** > **Requests**. By default, all requests on the page are filtered by the `Pending` status. To list only pending requests of the **Exchange** type, select `Exchange` in the filter field under the **Type** column. Select the request and navigate to request details. In the request details, the **Rate** field displays the rate valid at the moment when a client created the exchange in the B2CORE UI and the request was created in the Back Office. This rate includes the markups specified for the currencies in the currency pair. To update the rate, click **Change rate**. In the displayed **Change rate** popup, update the rate that will be applied to the exchange in one of the following ways: * Enter the desired rate in the **New rate (without markup)** field. * Refresh the rate by clicking the **Refresh** button on the right side of the **New rate (without markup)** field. This retrieves the current valid rate from an exchange rate provider and displays it in the **New rate (without markup)** field. In the **Verification code** field, enter the code obtained by solving a simple math problem to confirm the rate update. Click **Save** to apply the updated rate and close the popup. The markups are applied to the updated rate, and the recalculated value is displayed in the **Rate** field in the request details. After approving the request, the exchange is executed using the updated value in the **Rate** field. Before creating a manual deposit via the Back Office, make sure that the **manual** deposit method is created and enabled. To do this, navigate to **System** > **Deposit system** > **Deposit methods**. If the **manual** deposit method is not displayed on the **Deposit methods** page, create the method by following the instructions described in [How to add the manual deposit or withdrawal method](../manage-payment-methods/how-to-add-the-manual-deposit-or-withdrawal-method). After the **manual** deposit method is created and enabled, follow the steps below to create a deposit. Navigate to **Clients** > **General**. Select the client and click the **Edit** button. You can use [filters](../../back-office-guide/get-started#filtering-and-sorting) by name or email for a quick search. Go to the **Transactions** tab, and then select **Deposit**. Click **+Create**. Select a client account to which you want to deposit funds, and then click **Select**. Fill out the form: * Make sure that **Method** is set to **manual**. Check the account number and currency. * Enter the deposit amount. * Set **commissions**. * Enable the **Don’t send email** option if you don't want to notify the client about the deposit operation. * Confirm the operation by solving a simple math problem and enter the result in the **Verification code** field. * Add the **Internal comment** if needed. It will be displayed only in the Back Office. Click **Save** to create the deposit. Before creating a manual payout via the Back Office, make sure that the **manual** withdrawal method is created and enabled. To do this, navigate to **System** > **Payout system** > **Payout methods**. If the **manual** withdrawal method is not displayed on the **Payout methods** page, create the method by following the instructions described in [How to add a manual deposit or withdrawal method](../manage-payment-methods/how-to-add-the-manual-deposit-or-withdrawal-method). After the **manual** withdrawal method is created and enabled, follow the steps below to create a payout. Navigate to **Clients** > **General**. Select the client and click the **Edit** button. You can use [filters](../../back-office-guide/get-started#filtering-and-sorting) by name or email for a quick search. Go to the **Transactions** tab, and then select **Payout**. Click **+Create**. Select a client account from which you want to create a payout, and then click **Select**. Fill out the form: * Make sure that the **Method** is set to **manual**. Check the account number and currency. * Enter the payout amount. * Set **commissions**. * Enable the **Don’t send email** option if you don't want to notify the client about the payout operation. * Confirm the operation by solving a simple math problem and enter the result in the **Verification code** field. * Add the **Internal comment** if needed. It will be displayed only in the Back Office. Click **Save** to create the payout. To create and configure a report: Navigate to **Finance** > **Reports**. Click **+Create** in the upper-right page corner. On the **Create report** page, fill in the following fields: * In the **Interval** dropdown, schedule the report delivery: * **Daily** — the report is run and sent every day * **Weekly** — the report is run and sent once a week * **Monthly** — the report is run and sent once a month * In **Data slice** dropdown, select the period for which data is included in the report, as per the Back Office server time: * **Day** — the previous day, from 00:00 to 23:59 * **Week** — the previous week, from Monday 00:00 to Sunday 23:59 * **Month** — the previous month, from the first day of the month 00:00 to the last day 23:59 * **Curweek** — the previous 7 days, from the first day 00:00 to yesterday 23:59 * **Overall** — from the beginning of track record to yesterday 23:59 * **Curmonth** — from the first day of the current month 00:00 to yesterday 23:59 * In the **File format** dropdown, select **HTML**, **XLSX**, or **CSV**. * In the **Active** dropdown, select the report status: * **Active** — to run and send the report on schedule * **Inactive** — to disable the report * In the **Name** field, enter the report name. * In the **Class** dropdown, select one or several report types that you want to generate: * **Client Finance Report** — shows the amount of deposits, withdrawals and net deposits (the difference between total deposits and total withdrawals) made by each client over a specified time period, in corresponding currencies and in conversion to USD. The report includes the following fields: **Email**, **Verification Level**, **Currency**, **Deposit**, **Withdraw**, **(D - W)**, **(Deposit, USD)**, **(Withdraw, USD)** and **(Deposit - Withdrawal, USD)**. * **Transaction Finance Report** — contains detailed information on all transactions executed over a specified time period. The report includes various fields, such as **ID**, **Account ID**, **Operation ID**, **Email**, **Transaction Type**, **Method**, **Source Currency**, **Source Amount**, **Type Commission**, **Final Amount**, **Target Amount**, **Target Currency**, **Transaction Exchange Rate**, **% Markup**, **Profit Markup**, **Markup Currency** and others. * **Method Finance Report** — contains detailed information on methods used for execution of deposit and withdrawal operations over a specified time period. The data is grouped by currencies (such as fiat and crypto) and includes information about the commissions and profit earned from each operation. The report includes various fields, such as **Method**, **Currency**, **Deposit**, **Withdraw**, **Source Commission**, **Final Deposit amount**, **Final Withdrawal amount**, **Profit Markup**, **Counterparty Commission**, **Profit (Counterparty commission)** and others. * **Currency Finance Report** — shows the amount of deposits, withdrawals and net deposits (the difference between total deposits and total withdrawals) made over a specified time period in a particular currency and in conversion to USD. The report includes the following fields: **Currency**, **Deposit**, **Withdraw**, **(D - W)**, **(Deposit, USD)**, **(Withdraw, USD)** and **(Deposit - Withdrawal, USD)**. * **Balances Report** — shows balance changes on client accounts over a specified time period. The data is grouped by each currency and also includes the total balance change on all client accounts in conversion to USD. The report includes the following fields: **ID**, **Email**, **Client Name**, **Internal Client Type**, **Verification Level**, **Company Name**, **Currency**, **Balance**, **Hold**, **Rate**, **(Balance, USD)**, **Previous Balance** and **(Previous Balance, USD)**. * **User In Out** — this report is similar to the **Client Finance Report**, while also containing additional fields, such as **Transfers (D-W)** and **Manual (D-W)**. * **IB Balances Report** — shows the reward amounts earned by IB partners over a specified time period, as well as the total reward amount in conversion to USD. The report includes the following fields: **ID** (the identifier assigned to an IB partner), **Email**, **Client Name**, **Internal Client Type**, **Verification Level**, **Company Name**, **Currency**, **Balance**, **Rate** and **(Balance, USD)**. * **Balances Simplified Report** — shows balances on client accounts in each currency along with the total balance on all client accounts in conversion to USD. The report includes the following fields: **Email**, **Internal Client Type**, **Currency** and **Balance**. * **LegalEntityBalancesReport** — shows balances on all live accounts of the clients that are served by a specific legal entity. * In the **Mail to** field, enter the email address to which a link to download the report is sent. * In the **Start hour** field, enter the hour at which you want run the report and send it to the specified email, as per the Back Office server time. The value must be in the 0 — 23 range. * In **GMT offset** dropdown, select the GMT offset of your local time zone to send the report at the specified hour in your local time zone. The Back Office server time may differ from the time in your local time zone. The current server date and time are displayed in the topbar. Click **Save** to create the report. To transfer funds between accounts of the same client via the Back Office: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. You can use [filters](../../back-office-guide/get-started#filtering-and-sorting) by name or email for a quick search. Go to the **Transactions** tab, and then select **Transfer**. Click +**Create**. Fill out the form: * Select a debiting account in the **From account** dropdown. * Select a destination account in the **To account** dropdown. * Enter the transfer amount. * Confirm the operation by solving a simple math problem and enter the result in the **Verification code** field. Click **Save** to create the transfer. To exchange funds for a client via the Back Office: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. You can use [filters](../../back-office-guide/get-started#filtering-and-sorting) by name or email for a quick search. Go to the **Transactions** tab, and then select **Exchange**. Click +**Create**. Fill out the form: * Select a debiting account in the **From account** dropdown. * Select a destination account in the **To account** dropdown. * Select the **Exchange type**: * **Source & Rate (Sell)** — when selling currency, the destination amount can't be set * **Destination & Rate (Buy)** — when buying currency, the source amount can't be set * **Source & Destination (Direct)** — when making a direct transfer, the rates can't be set * Set the exchange amounts and rates depending on the selected exchange operation type. * Confirm the operation by solving a simple math problem and enter the result in the **Verification code** field. Click **Save** to exchange the funds. To get data about transactions on wallets and accounts of a specific client: Navigate to **Clients** > **General**. Select the client and click the **Edit** button. On the client details page, go to the **Transactions** tab, then select **Deposit**, **Payout**, **Transfer**, **Exchange**, or **Balance change operations** from the dropdown to view the respective transactions. From each page, export data by clicking the **Export** button in the upper-right corner. If filters are applied, some transactions may be excluded. Clear all filters to ensure you see the full list of transactions. It may also be important to check the **Status** column filters. For example, filter to show only transactions with the **Done** status and exclude those with **Pending** or **Failed** statuses. In the displayed popup: * Select the file format: XLSX or CSV. * Select **Send to email** to receive the file by email or **Download** to save it to your computer. * Click **Export**. You can then use the exported files to calculate and analyze transactions made on the client’s accounts and wallets. You can get the total deposits or withdrawals for all clients by exporting data from the relevant pages of the Back Office. To get the deposit or withdrawal data: Navigate to **Finance** > **Deposits** to view all client deposit transactions or **Finance** > **Payouts** to view all withdrawals. To display only the required information, hide or add columns using the **Column visibility** option. If filters are applied to the **Deposits** or **Payouts** page, some transactions may be excluded. Clear all filters to ensure you that see the full list of transactions. It may also be important to check the **Status** column filters. For example, you can filter to show only transactions with the **Done** status and exclude those with **Pending** or **Failed** statuses. Click the **Export** button in the upper-right page corner. In the displayed popup: * Select the file format: XLSX or CSV. * Select **Send to email** to receive the file by email or **Download** to save it to your computer. * Click **Export**. You can then use the exported file to find the total deposits or withdrawals for client wallets. Requests of the **PaymentSystem Deposit Assistance** and **PaymentSystem Withdrawal Assistance** types are automatically created in **Clients** > **Requests** when a corresponding deposit and withdrawal receives the `Assistance` status. This status indicates that the transaction status couldn't be determined automatically, and the admin must decide whether to continue syncing the transaction status with the external payment system or mark the transaction as failed. ## Note the difference [#note-the-difference] Deposit and withdrawal transactions may be assigned the `Assistance` status, while the corresponding requests in **Clients** > **Requests** are given the **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** type accordingly. These requests contain all available details about the transaction to help the admin make a decision on how to process it. ## Logic for creating PaymentSystem Assistance requests [#logic-for-creating-paymentsystem-assistance-requests] * For **deposits**, **PaymentSystem Deposit Assistance** requests *aren't* created when the `Assistance` status is assigned due to the **sync deadline** error, meaning that the deposit sync time with the payment system has expired. Such deposits must be processed directly in the deposit details in **Finance** > **Deposits**. For details, refer to [How to process deposits with the Assistance status](how-to-process-transactions-with-the-assistance-status#how-to-process-deposits-with-the-assistance-status). * For any reason other than the **sync deadline**, a **PaymentSystem Deposit Assistance** request is created for the deposit, and it must be processed within the corresponding request. * For **withdrawals**, **PaymentSystem Withdrawal Assistance** requests are always created when the `Assistance` status is assigned. These withdrawals must be processed within their respective requests. To process a PaymentSystem Assistance request: Navigate to **Clients** > **Requests**. Find the request related to the deposit or withdrawal transaction with the `Assistance` status. To filter the list, select **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** in the **Type** column and **Pending** in the **Status** column. Click the **Edit** button to open the request and view the transaction payment details. For an overview, refer to the [Payment details structure](how-to-process-transactions-with-the-assistance-status#payment-details-structure). These payment details are the same as those displayed on the **Payment system** tab in the deposit or withdrawal details under **Finance** > **Deposits** and **Finance** > **Payouts**. Based on the information provided in the request, take an appropriate action to update the transaction status. Before updating the transaction status, ensure to check the external payment system for the relevant transaction details to make a correct decision. The following transition options may be available, depending on the transaction’s current state: * [Move to In progress](move-to-in-progress) or [Move to Failed](move-to-failed). * [Move to Success](move-to-success) or [Move to Failed](move-to-failed). **See also** [Move to Success](move-to-success) [Move to In progress](move-to-in-progress) [Move to Failed](move-to-failed) Deposits and withdrawals initiated via [PSS-connected](../../integrations/payment-systems#payment-system-service-pss) methods may receive the `Assistance` status during processing. This status indicates that the transaction status couldn't be determined automatically during syncing with the external payment system and the transaction processing requires manual action. ## How to process deposits with the Assistance status [#how-to-process-deposits-with-the-assistance-status] Deposits may receive the `Assistance` status due to: * The sync time with the payment system has expired, meaning the **sync deadline** has been reached. In this case, the deposit must be processed directly in the deposit details in **Finance** > **Deposits**. * Any reason other than the **sync deadline**. In this case, a **PaymentSystem Deposit Assistance** request is created automatically in **Clients** > **Requests**, and the deposit must be processed within that request. The purpose of processing deposits with the sync deadline error directly in the deposit details is to prevent an excessive number of **PaymentSystem Deposit Assistance** requests and streamline request handling. To determine why a deposit has the `Assistance` status and process it: Navigate to **Finance** > **Deposits**. Find the deposit with the `Assistance` status that you need to process. To filter the list, select `Assistance` in the **Status** column to display only deposits with this status. Select the deposit and click the **Edit** button to open its details. In the deposit details, go to the **Payment system** tab. This tab displays detailed deposit information. For an overview, refer to the [Payment details structure](#payment-details-structure). Determine why the deposit received the `Assistance` status. In the **Timeline** section, review the status details: * If the status is **Unexpected** and the **Error code** field displays `service.sync_deadline`, the deposit syncing time with the payment system has expired. In this case, continue processing the deposit directly on the **Payment system** tab. * If any other error code is displayed, process the deposit in the corresponding **PaymentSystem Deposit Assistance** request that was created automatically in **Clients** > **Requests**. For details, refer to [How to process PaymentSystem Assistance requests for deposits and withdrawals](how-to-process-ps-deposit-assistance-and-ps-withdrawal-assitance-requests). To process the deposit with the `service.sync_deadline` error code, take the appropriate action to update the deposit status on the **Payment system** tab. The following options are available: * **Move to In progress** — to resume syncing of the deposit status with the external payment system. * **Move to Failed** — to stop syncing with the external payment system and mark the deposit as failed. For details, refer to [Move to In progress](move-to-in-progress) and [Move to Failed](move-to-failed). Note that for the `service.sync_deadline` case, these actions must be performed directly within the deposit details, on the **Payment system** tab. Depending on the selected option, the deposit status will be updated to **In progress** and then can reach one of the final statuses or will be updated to **Failed** immediately. ## How to process withdrawals with the Assistance status [#how-to-process-withdrawals-with-the-assistance-status] When a withdrawal receives the `Assistance` status, a **PaymentSystem Withdrawal Assistance** request is always created automatically in **Clients** > **Requests**. Such withdrawals must be processed within these requests. No manual actions for processing withdrawals are available within withdrawal details. To process a withdrawal with the `Assistance` status: Navigate to **Finance** > **Payouts**. Find the withdrawal with the `Assistance` status that you need to process. To filter the list, select `Assistance` in the **Status** column to display only withdrawals with this status. Select the withdrawal and click the **Edit** button to open its details. In the withdrawal details, go to the **Payment system** tab. This tab displays detailed withdrawal information. For an overview, refer to the [Payment details structure](#payment-details-structure). In the **Timeline** section, review the status and error code that caused the withdrawal to receive the `Assistance` status. Unlike deposits, withdrawals with the `Assistance` status always have a **PaymentSystem Withdrawal Assistance** request created in **Clients** > **Requests**. These withdrawals must be manually processed within their respective requests. For details, refer to [How to process PaymentSystem Assistance requests for deposits and withdrawals](how-to-process-ps-deposit-assistance-and-ps-withdrawal-assitance-requests). ## Payment details structure [#payment-details-structure] The following information is available on the **Payment system** tab in the details of deposits and withdrawals listed in **Finance** > **Deposits** and **Finance** > **Payouts**, as well as in the corresponding **PaymentSystem Deposit Assistance** and **PaymentSystem Withdrawal Assistance** requests listed in **Clients** > **Requests**. This information helps the admin decide how to process a specific transaction and includes the following sections: ### Deposit/Withdrawal information [#depositwithdrawal-information] Withdrawal information The main information about the transaction: **Identifier** The transaction identifier in the B2CORE Payment Systems Service (PSS). You can click it to navigate to the transaction details in **Finance** > **Deposits** or **Finance** > **Payouts**. *** **Payment provider identifier** The transaction identifier from the external payment system, which may have two statuses: * `Verified` — a transaction with this identifier exists in the payment system. * `Unverified` — a transaction with this identifier can't be found in the payment system. *** **Status** The status of the transaction in the B2CORE PSS: * **Created** — a transaction was created. * **In Progress** — a transaction is being processed. * **Success** — a transaction was completed successfully. This is a final status. * **Failed** — a transaction failed to complete. This is a final status. * **Unexpected** — a transaction is in an unknown state. This status must be handled by the admin as part of the assistance process. * **Unprocessable** — a transaction is in a state that requires manual actions, as no further actions can be taken automatically. This status must be handled by the admin as part of the assistance process. *** **Initial amount** The amount with which the transaction was initiated. *** **Initial currency** The currency in which the transaction was initiated. *** **Creation date** The date and time when the transaction was created. *** **Last updating date** The date and time when the transaction was last updated. ### Payment input snapshot [#payment-input-snapshot] The information entered by a client on a payment form when initiating a deposit or withdrawal. The fields that clients must complete depend on the selected deposit or withdrawal method. This information is displayed as the field name and the value provided by the client. For some methods, no information is required from clients. In this case, the message `The payment input snapshot is empty` is displayed. Payment input snapshot ### External details [#external-details] Additional information about the transaction, including useful data from the payment system. The set of information depends on the specific payment system. During transaction processing, there are no details in this section. ### Timeline [#timeline] Information about the transaction’s statuses within the B2CORE PSS. The data is presented in chronological order and includes useful details for each status. Timeline ### Polling job [#polling-job] After a transaction is created within the B2CORE PSS, the service initiates periodic requests to the external payment system to check the current status of the transaction. This periodic status check is referred to as the **Polling job** process. Each polling job attempt includes information about the request date, status, and additional details about any errors, if applicable. Polling job After the transaction is successfully completed, the information in all sections of the request is updated accordingly. When transactions — such as deposits, transfers, or exchanges between wallets and trading accounts — have the `Partial` status, it indicates that processing wasn’t completed due to technical issues. These transactions should be processed manually. To process a transaction with the `Partial` status: Navigate to **Finance** > **Transactions**. On the **Transactions** page, select `Partial` in the filter field displayed under the **Status** column to list all the transactions with that status. Select the transaction that you want to process. Click magnifying glass icon displayed on the left side of the transaction row. The system will automatically attempt to determine the final status of the transaction. * If successful, the transaction status is updated accordingly. * If the final status isn’t found, the following error message is displayed: `Operation was not found` and two buttons appear: * process transaction button — the **Process transaction** button * set done status button — the **Set Done status** button Your next step depends on whether the transaction exists on the respective trading platform, such as MT4, MT5, or cTrader. Therefore, navigate to the platform and check whether the funds have been received in the relevant trading account. It's important to verify the fund location before taking any further action. If the transaction is found on the platform, has been processed there, and the funds have reached the destination, click set done status button. This action assigns the `Done` status to the transaction in B2CORE since it has already been processed on the respective platform, but the status wasn’t received back to B2CORE. If the transaction isn't found on the platform, and the funds haven't reached the destination or been deducted from the source wallet, click process transaction button, and then confirm the action in the displayed popup. This will initiate the execution of the transaction again, and upon completion, the transaction will be assigned a final status. You can deposit different amounts to wallets and trading accounts for your clients at once using the **Update balances** option. To proceed, prepare a CSV file with the following information: email addresses of registered clients, account IDs to which funds should be deposited, and deposit amounts. Download the `template_update_balances.csv` file to ensure that your CSV file includes proper headers (such as `Email,AccountID,Amount`) and correctly structured data that is ready for updating balances. Keep in mind the following: * The number of rows in a CSV file mustn’t exceed 800. * Use a comma ( , ) to separate data items in your CSV file. No other separators are accepted. * Specify decimal amounts for deposits using a dot ( . ) as the decimal separator. * If a client account appears multiple times in the CSV file, its balance will be updated based on the number of occurrences. * The **Update balances** option updates balances of demo accounts and archived accounts. To prevent deposits to archived accounts, ensure that your CSV file doesn’t contain IDs of archived accounts. Don’t use the **Update balances** option for depositing funds when migrating client accounts between different platforms. This option is prohibited for such transactions. To update client balances: Navigate to **Clients** > **Accounts**. Click **+Update balances** in the upper-right page corner. In the **Update balances** popup, click **Upload csv file** and select a CSV file containing the required information for updating client account balances. To execute the action, click **Save**. The funds are deposited to clients using the **manual** method (for details, refer to [How to add the manual deposit or withdrawal method](../manage-payment-methods/how-to-add-the-manual-deposit-or-withdrawal-method)). To stop syncing the deposit or withdrawal status with the external payment system, move it to **Failed** in the **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request. To move a transaction to **Failed**: In the related **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request, click **Move to failed**. In the displayed popup, fill in the following fields: * In the **Error code** dropdown, select one of the following failure reasons: * **Operation not found** — indicates that the transaction couldn't be found in the external payment system. * **Operation failed** — indicates that the transaction failed in the external payment system. * **Other error** — indicates any other reason not covered by the options above. * In the **Error description** field, optionally provide a reason for marking the transaction as failed. * To confirm the action, solve a simple math problem and enter the result in the **Verification code** field. Move the transaction to failed Click **OK** to change the transaction status. Once the transaction status is set to **Failed**, the request will be marked as **Rejected**. ## Move a transaction to In progress [#move-a-transaction-to-in-progress] To continue syncing the deposit or withdrawal status with the external payment system, move it to **In progress** in the **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request. This will resume the [Polling job](how-to-process-transactions-with-the-assistance-status#polling-job) process for that transaction. To move a transaction to **In progress**: In the related **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request, click **Move to in progress**. Proceed depending on the status of the **Payment provider identifier** displayed in the [Deposit/Withdrawal information](how-to-process-transactions-with-the-assistance-status#deposit/withdrawal-information). If the **Payment provider identifier** is marked as `Verified`, the following popup appears: Move the verified transaction to in progress To confirm the action, solve a simple math problem and enter the result in the **Verification code** field. If the **Payment provider identifier** is marked as `Unverified`, you must navigate to the external payment system and check that the related transaction exists and copy its identifier. Move the unverified transaction to in progress In the displayed popup, fill in the following fields: * In the **Identifier** field, specify the transaction identifier from the external payment system. * To confirm the action, solve a simple math problem and enter the result in the **Verification code** field. Click **OK** to change the transaction status. Once the transaction status is set to **In Progress**, the request will be marked as **Approved**. This request status doesn't mean that the transaction has been successfully completed. It indicates that syncing with the external payment system has resumed. If the transaction is assigned the **Unexpected** status again during repeated syncing, a new **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request with the **Pending** status will be automatically created in [Clients > Requests](../../back-office-guide/clients/requests), which will again require manual action. The deposit or withdrawal can be moved to **Success** in the **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request only if the latest attempt of the [Polling job](how-to-process-transactions-with-the-assistance-status#polling-job) process has the **Unprocessable** status, indicating that it must be finalized manually. Before moving a transaction to **Success**, you must verify in the external payment system that the corresponding transaction exists and has been successfully executed; otherwise, it may be incorrectly marked as successful, leading to discrepancies in the client's balance. To move a transaction to **Success**: In the related **PaymentSystem Deposit Assistance** or **PaymentSystem Withdrawal Assistance** request, click **Move to success**. In the displayed popup, fill in the following fields: * In the **Final amount** field, enter the amount to be deposited to or withdrawn from the client's wallet. The amount must be in the currency in which the transaction was initiated. If a client initiates a transaction in one currency but completes the payment in another, you must manually convert the amount and enter its equivalent in the currency in which the transaction was initiated. This amount will be deposited to or deducted from the client's wallet. * To confirm the action, solve a simple math problem and enter the result in the **Verification code** field. Move the deposit to success Click **OK** to change the transaction status. Once the transaction status is set to **Success**, the request will be marked as **Approved**. B2CORE requires an active SMTP service to send email notifications to your clients. For optimal performance, select an SMTP provider that offers high deliverability and doesn’t impose strict daily sending limits. ## SMTP providers to use and to avoid [#smtp-providers-to-use-and-to-avoid] Don't use **Gmail**, **Office 365**, **Outlook.com**, **Yahoo**, or similar providers. These services impose strict daily sending limits and aren't designed for bulk or transactional email delivery. For reliable performance and scalability, use dedicated SMTP providers such as [Mailchimp](https://mailchimp.com/), [SendGrid](https://sendgrid.com/), or [Mailgun](https://www.mailgun.com/). The following information is required to configure the SMTP service connection via the B2CORE Back Office: * SMTP hostname * SMTP port * SMTP username * SMTP password ## How to sign up with an SMTP service provider [#how-to-sign-up-with-an-smtp-service-provider] This instruction describes how to sign up with an SMTP service provider (using the [Mailgun](https://www.mailgun.com/) provider for illustration purposes). You can choose any SMTP service provider that you want to use and configure the SMTP settings by following your provider’s instructions. This instruction is created based on the latest version of Mailgun as of this writing. Due to possible changes to the procedures described here, we suggest that you consult the official [Mailgun Help Center](https://help.mailgun.com/hc/en-us) or contact their support in case you have any questions. Go to the [Mailgun](https://www.mailgun.com/) website and click **Get Started**. Fill in the required fields, including your full name, email address, and payment information, select a plan that you want to use for the SMTP service, and then click **Create Account**. On the main [Mailgun](https://www.mailgun.com/) web page, click **Log In** and log in to Mailgun with your credentials. Navigate to **Sending** > **Domains** and click **Add New Domain**. Fill in the following information: * In the **Domain name** field, enter your company domain. * Select a domain region. Click **Add Domain**. Navigate to **Sending** > **Domain settings**. Select your domain name in the **Domain** dropdown located at the top of the page, and then go to the **DNS records** tab. Add the following DNS records and assign to them the appropriate values via your DNS hosting provider. * two TXT records * two MX records * one CNAME record Copy the record names and values displayed in the **Hostname** and **Enter this value** columns on the **DNS records** tab and paste them in the corresponding fields when adding DNS records via the DNS hosting provider. Green checkmarks displayed on the left side of each record indicate that the record has been set up properly. Navigate to **Sending** > **Overview** > **SMTP** to view your SMTP hostname, port, username, and default password. Use this information to configure the Mailgun SMTP connection via the B2CORE Back Office. ## How to configure an SMTP service connection via the B2CORE Back Office [#how-to-configure-an-smtp-service-connection-via-the-b2core-back-office] Navigate to **Mailing** > **System** > **Providers**, and click **+Create** in the upper-right page corner. Configure the SMTP connection settings: * In the **Caption** field, enter a caption that you want to use for the SMTP configuration. * Make sure that the **Driver** field displays “smtp”. * In the **Host** field, enter an SMTP service hostname. * In the **Port** field, enter a port number to be used for the SMTP connection. * In the **Username** and **Password** fields, enter your SMTP service credentials. * In the **Sent from** field, enter an email address that will be displayed to your email recipients. * In the **Sent from name** field, enter a name that you want to display to your email recipients (for example, this may be your company name). * In the **Encryption** dropdown, select **TLS** or **SSL** to enable a secure connection when communicating with the SMTP service. Choose **Not selected** to disable encryption. * In the **Enabled** dropdown, select **enabled** to make the SMTP service connection active. Click **Test Connection** to confirm that you can connect to the SMTP service with the current settings. The **Test Connection** button is highlighted with green if the connection is successful. Click **Save**. The SMTP configuration is now added to the list of email providers. To quickly test the SMTP configuration that you have set up, go to the B2CORE UI **Sign In** page, and click **Sign up now!** to register a new account. If you already have an account, click **Forget your password?** and then enter your email address. In both cases, you should receive appropriate emails, indicating that your SMTP service connection is properly configured. To check the status of the recently sent emails, navigate to **Mailing** > **System** > **Log** in the Back Office. There may be several reasons why clients do not receive email notifications (for example, emails sent upon logging in to B2CORE UI or successful execution of deposit or withdrawal operations): * The required email template is not enabled. * There are issues with the email service operation. * There are issues with the SMTP server connection. To determine the reason for email delivery failure: Track an email delivery with the Email log. * Navigate to **Mailing** > **System** > **Log**. * In the search box located in the **Email** column, enter the email address to which the email should have been sent. If the Email log doesn’t contain a record of the required email having been sent to the specified email address, the reason for this may be that the corresponding email template has not been enabled. Check if an email template is enabled. * Navigate to **System** > **Templates** > **Email** > **Template types**. * Find the required email template in the list (for example, `DepositSuccessful` or `WithdrawDone`) and check if it is enabled. * If not, enable the template by clicking the **Edit** button located in the template row and selecting **Yes** from the **Enabled** drop-down list. If enabling the template doesn’t solve the issue, check the email service operation and SMTP settings. Check the email service operation by sending test emails to your email address. For example, you can request to withdraw funds from one of your accounts and check if the corresponding email notification has been sent to your email address. If you have received the email, this means there are issues with the email service operation on the client side. If you have failed to receive the email, this means that there are issues with the SMTP server connection. To solve the issues, check your [SMTP configuration settings](how-to-configure-smtp) or contact your SMTP service provider. This article explains how amounts are calculated in the **Pay** and **Receive** fields in the B2CORE UI when transactions involve currency conversions. For such transactions, the resulting amounts depend on the following: * The **rounding rules** applied to the amount in the **Pay** and **Receive** fields. * The configured **currency scales** defining the number of decimal places supported for both the source and target currencies involved in a transaction. ## Rounding rules [#rounding-rules] For the **Pay** and **Receive** fields, different rounding rules are applied in B2CORE: * The **Pay** field: the amount is always **rounded up**. This ensures that the broker does not lose profit due to rounding differences. * The **Receive** field: the amount is always **rounded down** according to the scale of the target currency. ## Currency scales [#currency-scales] All currencies used for transactions in B2CORE have configured **scales**, which define the number of allowed decimal places. The scale determines the precision of rounding for any transaction involving that currency. You can configure the scale for each currency by navigating to **Currencies** > **Currencies**, opening the currency details, and setting the required value in the **Precision** field. For example: * **THB** (Thai Baht): scale `0` (no decimals) * **USD** (US Dollar): scale `2 `(two decimals) ## Example [#example] Suppose a client initiates a deposit to a **USD** wallet and pays in **THB** (Thai Baht). * When **THB** has a scale of `0` (no decimals): * Enter **245 USD** in the **Receive** field → the **Pay** field displays **7,968 THB**. * Enter **7,968 THB** in the **Pay** field → the **Receive** field displays **245.01 USD**. THB with scale 0 * When **THB** has a scale of `1` (one decimal): * Enter **245 USD** in the **Receive** field → the **Pay** field displays **7,967.4 THB**. * Enter **7,967.4 THB** in the **Pay** field → the **Receive** field displays **245 USD**. THB with scale 1 The mismatch occurs because the scale of `0` can't preserve decimal values, while scales of `1` or higher allow fractional amounts, resulting in more precise conversions. This instruction explains how to add deposit and withdrawal methods that use payment systems that can be connected to B2CORE through PSS. Payment System Service (PSS) is a new B2CORE service that offers enhanced connections to external payment providers and cashier systems. Payment systems marked with `Yes` in the **PSS-supported** column in [Integration > Payment systems](../../integrations/payment-systems) can be connected through PSS. ## General procedure [#general-procedure] Before adding deposit and withdrawal methods in B2CORE, ensure that you are signed up for the selected payment system and have an active account in that system. The procedure for adding a deposit or withdrawal method for payment systems that support connections through PSS includes two steps: Configure connections to a payment system in **System** > **External connections**. If the payment system supports both deposits and withdrawals, and you plan to use it for both, you must create two separate connections: one for deposits and another for withdrawals. For details, refer to [Step 1. How to configure a connection to a PSS-supported payment system](#step-1-how-to-configure-a-connection-to-a-pss-supported-payment-system). Add the deposit or withdrawal method that will use the selected payment systems. * To add a deposit method, navigate to **System** > **Deposit system** > **Deposit methods**. * To add a withdrawal method, navigate to **System** > **Payout system** > **Payout methods**. For details, refer to [Step 2. How to add a deposit or withdrawal method](#step-2-how-to-add-a-deposit-or-withdrawal-method). ## Step 1. How to configure a connection to a PSS-supported payment system [#step-1-how-to-configure-a-connection-to-a-pss-supported-payment-system] If a payment system supports both deposits and withdrawals and you intend to use it for both, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to a payment system: Navigate to **System** > **External connection**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name can only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to configure a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to configure a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select the payment system that you want to use for the deposit or withdrawal method. In the **Credentials** section that appears, fill in the required connection settings specific to the selected payment system. Click **Save** to create the connection. The connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. The connection is now ready to be used for adding a deposit or withdrawal method. ## Step 2. How to add a deposit or withdrawal method [#step-2-how-to-add-a-deposit-or-withdrawal-method] After configuring the required connections to the payment system, proceed to add and set up a deposit or withdrawal method: Navigate to **System** > **Deposit system** > **Deposit methods** or **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a deposit method. * **PaymentSystemWithdrawal** — to add a withdrawal method. After selecting the provider, the following fields will appear: * In the **Available account currencies** dropdown, select one or more currencies. The method can only be applied to accounts denominated in the selected currencies. * In the **Driver** dropdown, select the payment system that will be used for this method. * In the **Connection** dropdown, select the previously configured [connection](#step-1-how-to-configure-a-connection-to-a-pss-supported-payment-system) to the payment system. After specifying the connection, the **Configuration** section will appear, in which you may need to configure additional settings for the method. If the message `Configuration form is empty` is displayed, no additional settings are required. Click **Save** to create the method. The method will appear in the list of deposit methods. Click the **Edit** button to enter the method details and complete the following fields: * On the **Settings** tab, select one or more groups in which the method will be included, such as **Crypto**, **Fiat**, or both. * In the **Icon** field, specify the icon name that can be found in [Payment systems](../../integrations/payment-systems) to display the icon for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab (for the tab description, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details) or [Payout methods](../../back-office-guide/system/payout-system#details)). * If needed, configure commissions for the methods on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Click **Save** to apply the changes. The deposit or withdrawal method that uses the selected payment system is now configured in the B2CORE Back Office. ## Step 3. How to test a method configuration [#step-3-how-to-test-a-method-configuration] To validate the configuration and connection settings of a deposit or withdrawal method and ensure the method is operational, use **configuration testing**, which is available: * during method creation * during method configuration editing * during background testing while the method is in use ### How to manually test a method configuration [#how-to-manually-test-a-method-configuration] Use manual configuration testing when creating a method or editing its configuration to verify that the method connection and configuration settings are correct before saving your changes. To test a method configuration: Navigate to **System** > **Deposit system** > **Deposit methods** or **System** > **Payout system** > **Payout methods**. Select the method and click **Edit** to open the method details. Click the **Test configuration** button below the **Configuration** form to validate the method connection and configuration settings. The test is performed using two data sources: the information entered in the **Configuration** form and the **Credentials** specified in the external connection selected for the method. The test result is displayed on the page and can be one of the outcomes listed in [Method configuration test results](#method-configuration-test-results). ### How to view background method configuration test results [#how-to-view-background-method-configuration-test-results] After a deposit or withdrawal method is successfully created, a **background testing process** starts automatically. At defined intervals, the system validates two data sources: the information entered in the **Configuration** form and the **Credentials** provided by the external connection selected for the method. These checks may result in one of the outcomes listed in [Method configuration test results](#method-configuration-test-results). Unlike manual testing performed using the **Test configuration** button, background testing can detect issues that weren't present when the method was created or edited but appeared later due to changes in the payment system behavior. To view background test results: Navigate to **System** > **Deposit system** > **Deposit methods** or **System** > **Payout system** > **Payout methods**. Select the method and click **Edit** to open the method details. Go to the **Test configuration** tab to view the background test results. Manual configuration testing performed using the **Test configuration** button doesn't affect background test results and isn't displayed on this tab. The background test results are displayed as follows. When a method is initially created and the **Configuration** form (if applicable) is completed, along with the creation of an external connection containing **Credentials**, both the **Configuration** and **Credentials** records are assigned **version 1**. The current versions are shown in the lower-right corner of the tab. New method configuration testing Each time the **Configuration** or the associated **Credentials** from the external connection used by the method are updated, the system automatically increments the corresponding version number. When a new version is created, background testing for that version starts automatically. As a result, the test outcome may differ from the previous one. Updated method configuration testing After the **Configuration** or **Credentials** are updated: * The corresponding version is increased. * Background testing of the new version starts and may take some time. * Results of the previous tests become outdated: * They are moved to the **Previous** tests section. * Their **Relevance** value changes to `Old`. Once background testing of the new version is completed: * The latest test result becomes the current one. * The **Relevance** value changes to `Actual`, indicating that the result corresponds to the current configuration version. Background test result may also change without updating versions of the **Configuration** or **Credentials** from the respective external connection. This can occur for several reasons, including temporary unavailability of the external payment system, changes to the external service API, errors during the testing process. In such cases, a new background test result is also displayed on the tab. ### Method configuration test results [#method-configuration-test-results] Configuration testing can return one of the following results, indicating the current status of a deposit or withdrawal method: * **Authorized** — successful authentication with the payment system. The payment system account has sufficient permissions to perform financial operations. Successful — Authorized * **Available** — successful authentication with the payment system. This status doesn't guarantee that the account has permissions to create deposits or withdrawals. Successful — Available * **Failed** — configuration testing has failed. This status includes an error code and description. Failed * **Unexpected** — an unexpected configuration test result. This status includes an error code and description. Unexpected * **Not implemented** — configuration testing is not implemented for this payment driver. Not implemented **See also** [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods) [How to restrict the use of deposit and withdrawal methods](how-to-restrict-the-use-of-deposit-and-withdrawal-methods) [How to process transactions with the Assistance status](../manage-finances/how-to-process-transactions-with-the-assistance-status) This instruction explains how to add deposit and withdrawal methods using non-PSS connections for payment systems that haven't yet migrated to the new [B2CORE Payment System Service (PSS)](../../integrations/payment-systems#payment-system-service-pss). Non-PSS systems are marked with `No` in the **PSS-supported** column in [Integration > Payment systems](../../integrations/payment-systems). Before adding deposit and withdrawal methods in B2CORE, ensure that you are signed up for the selected payment system and have an active account in that system. To add and set up a deposit or withdrawal method: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the displayed page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select a payment system that you want to use for deposits or withdrawals. * In the displayed **Currency** dropdown, select a currency for deposits or withdrawals. After creating the method, you can add multiple currencies to it on the **TR Currencies** tab. * Leave the **Connection** field empty. Click **Save** to create the method. The created method is enabled by default. Locate the newly created method in the list and click the **Edit** button in the method row. On the **Settings** tab, select one or more groups in which the method should be included, such as **Fiat**, **Crypto**, or both. In the **Icon** field, specify the icon name that can be found in [Payment systems](../../integrations/payment-systems) to display the icon for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. Depending on the payment system that you selected as a provider, you may need to configure additional options that are specific to the provider in the **Provider settings** section. Review the currencies added on the **TR Currencies** and **PS Currencies** tabs, and add more if necessary (for tab descriptions, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details) or [Payout methods](../../back-office-guide/system/payout-system#details)). If needed, configure commissions for the methods on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Click **Save** to apply the changes. Click **Test connection** to validate the connection settings. The deposit or withdrawal method that uses the selected payment system is now configured in the B2CORE Back Office. **See also** [How to add the manual deposit or withdrawal method](how-to-add-the-manual-deposit-or-withdrawal-method) [How to add the Constructor deposit or withdrawal method](how-to-add-the-constructor-deposit-or-withdrawal-method) [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods) [How to restrict the use of deposit and withdrawal methods](how-to-restrict-the-use-of-deposit-and-withdrawal-methods) You can use the **Constructor** method for deposits or withdrawals when customization is needed to meet specific requirements. With **Constructor** methods, you can add and configure fields that clients must fill in when making deposits or withdrawals in the B2CORE UI. This flexibility is useful when additional details, such as bank information, payment references, or required documents, must be provided by clients. By ensuring that all necessary information is collected, these methods help streamline deposit and withdrawal processing. To add the **Constructor** method for deposits or withdrawals: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create method** page, fill in the following fields: * In the **Name** field, enter a name for the method, such as `Constructor`. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **Constructor**. * In the displayed **Currency** dropdown, select a currency for deposits or withdrawals. After creating the method, you can add multiple currencies to it on the **TR Currencies** tab. * Leave the **Connection** dropdown empty. Click **Save** to create the method. The **Constructor** method will appear in the list of methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, select one or more groups in which the method should be included, such as **Fiat**, **Crypto**, or both. * Review the currencies added on the **TR Currencies** and **PS Currencies** tabs, and add more if necessary (for tab descriptions, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details) or [Payout methods](../../back-office-guide/system/payout-system#details)). * Check the method status. Keep the method inactive (**No** is displayed in the **Enabled** field) until the method configuration is fully completed, including adding [custom fields](#how-to-add-custom-fields-for-the-constructor-deposit-or-withdrawal-method). Once done, activate the method. Click **Save** to apply the changes. The initial setup of the **Constructor** method is complete. Next, proceed with adding the required custom fields. ## How to add custom fields for the Constructor deposit or withdrawal method [#how-to-add-custom-fields-for-the-constructor-deposit-or-withdrawal-method] You can add and set up custom fields for deposit and withdrawal methods that use the **Constructor** provider. To add a custom field: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Select the deposit or withdrawal method that uses the **Constructor** provider. Click **Edit** to enter the method details. On the **Settings** tab, navigate to the **Custom fields** section, and then click **Add field**. In the **Add field** popup, fill in the following fields: * In the **Caption** field, enter a field name. The name will be displayed in the B2CORE UI. You can optionally add localizations to the field name by clicking the button on the right side of the **Caption** field and providing translations for the required languages. When switching languages in the B2CORE UI, the field name will be displayed according to the selected language. * In the **Type** dropdown, select a field type. The following types are available: * **Text** — to add a text field. * **Select with autocomplete** — to add a field with predefined options. When a client begins typing in this field, options that match the entered characters are displayed, enabling the client to select the desired one. * **File** — to add a field for attaching a document necessary for depositing or withdrawing funds. Click **Save** to add the custom field. To configure properties of the newly added field, click the **Edit** button located in the field row: * In the displayed **Main field settings** section, you can make the field mandatory by selecting `required` in the **Rules** field. * For a field of the **Select with autocomplete** type, add a list of predefined options. The options can be added manually or uploaded automatically by connecting to an appropriate API resource (for details, refer to [How to upload a list of predefined options for a custom field](#how-to-upload-a-list-of-predefined-options-for-a-custom-field)) * For a field of the **File** type, in the **Document type** dropdown, select the type of a document that clients should attach. The list of available document types includes all the types configured on the **Verification** > **Document types** page. Clients can attach files in JPEG, PNG, or PDF format with the file size up to 3 MB. Once you have completed the method configuration, activate it by selecting **Yes** in the **Enabled** dropdown. Click **Save** to apply the changes. When clients deposit or withdraw funds with the **Constructor** method, the added custom fields are displayed to them in the same order as they are listed in the **Custom fields** section of the Back Office. ## How to upload a list of predefined options for a custom field [#how-to-upload-a-list-of-predefined-options-for-a-custom-field] For each custom field of the **Select with autocomplete** type, you can automatically upload predefined options that clients can select when they deposit or withdraw funds in the B2CORE UI. For example, instead of manually adding bank names as predefined options for the “Bank name” field, you can retrieve them from an appropriate resource defined for your application API. To upload a list of predefined options for a custom field: Navigate to the details of a deposit or withdrawal method that uses the **Constructor** provider. On the **Settings** tab, navigate to the **Custom fields** section. Select a field of the **Select with autocomplete** type for which you want to upload a list of predefined options (such as “Bank name”), and then click **Edit**. Navigate to the **Field dynamic options** section, which is displayed below the **Custom fields** list, and specify the following fields: * In the **Endpoint** field, specify a URL of a specific API resource that includes field values that you want to use as predefined options for the selected custom field (such as the following sample endpoint: `https://[host]/api/banks`). The structure of the specified API resource is displayed in the **Endpoint result preview** field. The following example illustrates a possible resource structure: ```json [ { "bankId": 1, "bankName": "Bank name 1", "countryCode": "AE", "countryName": "UAE" }, { "bankId": 2, "bankName": "Bank name 2", "countryCode": "AE", "countryName": "UAE" }, { "bankId": 3, "bankName": "Bank name 3", "countryCode": "GE", "countryName": "Georgia" }, { "bankId": 4, "bankName": "Bank name 4", "countryCode": "GE", "countryName": "Georgia" }, { "bankId": 5, "bankName": "Bank name 5", "countryCode": "MZ", "countryName": "Mozambique" } ] ``` * In the **Options from key** dropdown, select the root element of the specified API resource (such as `root`). * In the **Option value from key** dropdown, select the resource field specifying the values of predefined options displayed for the custom field (such as `bankId`). * In the **Option caption from key** dropdown, select the resource field specifying the captions of the predefined options (such as `bankName`). Click **Save** to apply the changes. In the B2CORE UI, the list of predefined options for the “Bank name” custom field will include all the values retrieved from the `bankName` fields of the sample API resource. ## How to dynamically form a list of predefined options for a custom field [#how-to-dynamically-form-a-list-of-predefined-options-for-a-custom-field] A list of predefined options for a custom field can be formed dynamically, with the available options changing based on the selection made in an associated field. For example, a list of predefined options for the “Bank name” field can depend on the country that is selected in the “Country” field. To form dynamic lists of predefined options, both the associated custom fields must be populated with the options retrieved from the same API resource (for details, refer to [How to upload a list of predefined options for a custom field](#how-to-upload-a-list-of-predefined-options-for-a-custom-field)). To dynamically form a list of predefined options for a custom field: Navigate to the details of a deposit or withdrawal method that uses the **Constructor** provider. On the **Settings** tab, navigate to the **Custom fields** section. Select a field of the **Select with autocomplete** type for which you want to form a dynamic list of predefined options (such as “Bank name”), and then click **Edit**. Navigate to the **Field dynamic options** section, which is displayed below the **Custom fields** list, and specify the following field settings: * In the **Depends on field** dropdown, select another custom field (such as “Country”) that you want to associate with the “Bank name” field. * In the **Depends on field by key** dropdown, select the resource field that will be used to filter the options for the “Bank name” field (such as `countryCode`). Dynamic options for custom fields Click **Save** to apply the changes. In the B2CORE UI, the list of bank names displayed for the “Bank name” field will be filtered based on the country selected by the client in the the “Country” field. You can use the **manual** deposit and withdrawal methods to make deposits and withdrawals for your clients in the Back Office. For the **manual** method to work correctly, you must configure exchange rates in **Currencies** > **Rates** for all currencies that you plan to use with this method. These rates are required to calculate the **daily** and **monthly limits** for deposits and withdrawals, specified in verification level settings (for details, refer to [How to set up deposit, withdrawal, and transfer limits by verification levels](../manage-verification-options/how-to-use-the-kyc-constructor#how-to-set-up-deposit-withdrawal-and-transfer-limits-by-verification-levels)). Because the limits are calculated in `USD`, you must configure rates to `USD` for each currency added to the **manual** method. For example, if you deposit funds in `EUR` to a client wallet denominated in `EUR` using the **manual** method, the `EURUSD` exchange rate is still required to calculate the client’s daily and monthly deposit limits; otherwise, an error will occur when processing the deposit. To add the manual methods for deposits and withdrawals: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a method** page, fill in the following fields: * In the **Name** field, enter a name for the method, such as `manual`. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption that will be applied to the method in the Back Office, such as `Manual Deposit` or `Manual Withdrawal`. * In the **Provider** dropdown, select **manual**. * In the displayed **Currency** dropdown, select a currency for deposits or withdrawals. After creating the method, you can add multiple currencies to it on the **TR Currencies** tab. * Leave the **Connection** dropdown empty. Click **Save** to create the method. The manual method appears in the list of methods and is enabled by default. To add more currencies for deposits or withdrawals using this method, click **Edit** to open the method details. On the **TR Currencies** tab, add the needed currencies. Click **Save** to apply the changes. The **manual** method is now ready for making deposits or withdrawals in the selected currencies via the Back Office. **See also** [How to create a deposit](../manage-finances/how-to-create-a-deposit) [How to create a payout](../manage-finances/how-to-create-a-payout) For deposit and withdrawal methods, you can configure commissions that will be deducted from clients when they make deposits or withdrawals in the B2CORE UI. To configure commissions: Navigate to **System** > **Deposit system** > **Deposit methods** or\ **System** > **Payout system** > **Payout methods**. Select the method and click the **Edit** button in the method row. On the **Edit method** page, go to the **Commissions** tab and click **+Add**. In the **Create commission** popup, fill in the following fields: * In the **Currency** dropdown, select a commission currency. * In the **Type** dropdown, select the commission type **TR** or **PSP** (for details, refer to [Deposit methods](../../back-office-guide/system/deposit-system#commissions-tab) and [Payout methods](../../back-office-guide/system/payout-system#commissions-tab)). * Enter commission rates in the respective fields shown in the image below. Fields for configuring commissions The use of these fields follows the formula: `Minimum commission amount (1) <= Fixed rate (2) + Percentage rate % (3) <= Maximum commission amount (4)` You can set a fixed commission rate, a percentage commission rate, or a combination of both. * To set a fixed commission rate, enter the commission amount in the field `2`. The specified commission amount is charged for each deposit or withdrawal transaction regardless of the transaction amount. For fixed commission rates, leave the other fields empty. * To set a percentage commission rate, enter the percentage value in the field `3`. The specified percentage of a deposit or withdrawal amount is charged as a commission. For percentage commission rates, it’s recommended that you set the minimum commission amount in the field `1` and the maximum commission amount in the field `4`. The commission can’t be be lower than the minimum amount or exceed the maximum amount. * If both a fixed rate in the field `2` and a percentage rate in the field `3` are entered, the commission is calculated as the sum of the fixed amount and the specified percentage of a deposit or withdrawal amount. For combined commissions, it’s also recommended that you set the minimum and maximum commission amounts. Click **Save** to apply the commission settings to the selected method. ## Example [#example] Suppose that commission rates for deposits in `USD` are configured as follows: `15 ≤ 10 + 5% ≤ 50` In this case: * The commission amount is calculated as 5% of a deposit amount plus a fixed rate of 10 USD. * The commission amount can't be less than 15 USD and can't exceed 50 USD. If 100 USD are credited to the client's account after the deposit is successfully processed by the payment provider, the commission is calculated as: `10 + (100 * 0.05) = 15 USD` If 1,000 USD are credited to the client's account, the commission is calculated as: `10 + (1,000 * 0.05) = 60 USD`, which exceeds the maximum commission limit. Therefore, the commission will be capped at `50 USD`. [1-2-Pay](https://1-2-pay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss). It supports deposits via QR codes and withdrawals to bank accounts, processed in `THB`. Follow the instructions below to configure the 1-2-Pay connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to 1-2-Pay. Before proceeding with the instructions, you must have signed up for 1-2-Pay and have an active account. All the details required for configuring connections to 1-2-Pay, including the **API start base URL**, **API sync base URL**, and other credentials, must be requested from the 1-2-Pay support. ## Configure connections to 1-2-Pay [#configure-connections-to-1-2-pay] If you plan to use 1-2-Pay for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to 1-2-Pay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_1-2-Pay` or `Withdrawals_1-2-Pay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **1-2-PAY**. In the **Credentials** section that appears, configure the settings specific to 1-2-Pay: * In the **Sandbox** dropdown, select: * **Yes** — for the sandbox testing environment * **No** — for the production environment * In the **API start base URL** field, specify the base URL for creating payment requests, provided by 1-2-Pay. * In the **API sync base URL** field, specify the base URL used by B2CORE to receive and validate callbacks, also provided by 1-2-Pay. ### Key points about URLs [#key-points-about-urls] * The **API start base URL** and **API sync base URL** are different endpoints and must be requested directly from 1-2-Pay. * Make sure to always use HTTPS, for example: * API start base URL: `https://api.example.com/` * API sync base URL: `https://inquiry.example.com/` * 1-2-Pay provides specific URLs for each environment. The URLs for sandbox differ from those for production, so be sure to request both sets and use the appropriate ones for your configuration. * In the **Channel** field, enter the channel assigned to your integration by 1-2-Pay. * In the **Partner code** field, enter the partner code assigned to your company by 1-2-Pay. * In the **Auth key** field, enter the API key for signing requests, provided by 1-2-Pay. Click **Save** to create the connection. The **1-2-Pay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via 1-2-Pay, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through 1-2-Pay [#add-a-deposit-method-through-1-2-pay] To add and set up a method for making deposits through 1-2-Pay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through 1-2-Pay will be available to accounts denominated in the selected currencies. For these currencies, conversion rates for `THB` must be configured. * In the **Driver** dropdown, select **1-2-PAY**. * In the **Connection** dropdown, select the previously configured [1-2-Pay connection](#configure-connections-to-1-2-pay). Skip the **Configuration** section as no settings are required for the 1-2-Pay deposit method. Click **Save** to create the deposit method. The **1-2-Pay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-12pay` to display the [predefined icon](../../integrations/payment-systems) for the 1-2-Pay deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `THB`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). 1-2-Pay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **1-2-Pay** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through 1-2-Pay [#add-a-withdrawal-method-through-1-2-pay] To add and set up a method for making withdrawals through 1-2-Pay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through 1-2-Pay will be available from accounts denominated in the selected currencies. For these currencies, conversion rates for `THB` must be configured. * In the **Driver** dropdown, select **1-2-PAY**. * In the **Connection** dropdown, select the previously configured [1-2-Pay connection for withdrawals](#configure-connections-to-1-2-pay). Skip the **Configuration** section as no settings are required for the 1-2-Pay withdrawal method. Click **Save** to create the withdrawal method. The **1-2-Pay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-12pay` to display the [predefined icon](../../integrations/payment-systems) for the 1-2-Pay withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `THB`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). 1-2-Pay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **1-2-Pay** withdrawal method is now configured in the B2CORE Back Office. ## Set up webhooks in 1-2-Pay [#set-up-webhooks-in-1-2-pay] To receive status updates for deposits and withdrawals in B2CORE, notification webhooks must be set up on the side of 1-2-Pay. ### Copy webhook URLs from the B2CORE Back Office [#copy-webhook-urls-from-the-b2core-back-office] You will need separate webhook URLs for both deposit and withdrawal methods. In the B2CORE Back Office, navigate to: * **System** > **Deposit system** > **Deposit methods** * **System** > **Payout system** > **Payout methods** Find the configured 1-2-Pay deposit or withdrawal method and click **Edit** to open its details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Provide URLs to 1-2-Pay [#provide-urls-to-1-2-pay] Send the copied webhook URLs (for both deposits and withdrawals) to the 1-2-Pay support for configuration on their side. [B2BINPAY](https://b2binpay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits with [static payment details](#deposits-with-static-payment-details-via-b2binpay) and withdrawals. The **Travel Rule** isn't currently supported for this integration because the corresponding driver for connecting to B2BIТPAY doesn't yet support **Travel Rule** requirements. Follow the instructions below to configure the B2BINPAY connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to B2BINPAY. Before proceeding with the instructions, you must have signed up for B2BINPAY and have an active wallet. ## Supported currencies [#supported-currencies] For the list of supported currencies for deposits and withdrawals via B2BINPAY, refer to [Currency codes](https://docs.b2binpay.com/references/currency-codes) in the B2BINPAY documentation. ## Configure connections to B2BINPAY [#configure-connections-to-b2binpay] If you plan to use B2BINPAY for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to B2BINPAY: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_B2BINPAY` or `Withdrawals_B2BINPAY`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemStaticDeposit** — to add a connection that will be used for a deposit method that supports **static payment details**. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **B2BINPAY V3**. In the **Credentials** section that appears, configure the B2BINPAY-specific settings: * In **API base URL** field, specify the base URL provided by B2BINPAY for your integration environment. * In the **Client ID** field, enter your client identifier provided by B2BINPAY. * In the **Client secret** field, enter the secret key associated with your client ID. * In the **Callback secret** field, enter the key used to verify callback notifications from B2BINPAY. For more details, refer to [How to access the API](https://docs.b2binpay.com/how-tos/manage-your-profile-and-system/how-to-access-api) in the B2BINPAY documentation. Click **Save** to create the connection. The B2BINPAY connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via B2BINPAY, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through B2BINPAY [#add-a-deposit-method-through-b2binpay] To add and set up a deposit method through B2BINPAY that supports **static payment details**: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemStaticDeposit**. After selecting **PaymentSystemStaticDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. The method will be available for depositing funds to client wallets in B2CORE, which are denominated in the currencies added on this tab. * In the **Driver** dropdown, select **B2BINPAY V3**. * In the **Connection** dropdown, select the previously configured [B2BINPAY connection for deposits](#configure-connections-to-b2binpay). After selecting the connection, the **Configuration** form appears. You may see the message `Configuration form is temporarily unavailable.` Wait a short while for the form to become available. In the **Configuration** section, fill in the following fields: * In the **Wallet** dropdown, select your B2BINPAY wallet that will be used for processing transactions. For each wallet in the list, the identifier assigned by B2BINPAY, the wallet type (**Merchant** or **Enterprise**), the wallet currency, and the label (if specified in B2BINPAY) are displayed. For details, refer to [Blockchain selection for Merchant and Enterprise wallets](#blockchain-selection-for-merchant-and-enterprise-wallets). * The **Collect personal data** field displays **No**, which can't be changed as the **Travel rule** isn't currently supported for this B2BINPAY integration. Click **Save** to create the deposit method. The B2BINPAY deposit method will appear in the list of deposit methods. Click **Edit** to open the method details and fill in the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-b2binpay` to display the [predefined icon](../../integrations/payment-systems) for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * In the **Rates provider** dropdown, select B2BINPAY as the preferred rate provider for processing deposits with conversions. To do this, B2BINPAY must first be added as an exchange rate provider under **Currencies** > **Rates** (for details, refer to [How to configure currency exchange rates](../manage-currencies/how-to-configure-currency-exchange-rates)). * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the currencies in which deposits can be processed. These are the currencies supported by the B2BINPAY wallet selected in the **Configuration** section. To enable deposits in a specific currency via this method, make sure that this currency is added on the **PS Currencies** tab. B2BINPAY deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The B2BINPAY deposit method with **static payment details** is now configured in the Back Office and available to clients in the B2CORE UI. ## Add a withdrawal method through B2BINPAY [#add-a-withdrawal-method-through-b2binpay] To add and set up a method for making withdrawals through B2BINPAY: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. The method will be available for withdrawing funds from client wallets in B2CORE, which are denominated in the currencies added on this tab. * In the **Driver** dropdown, select **B2BINPAY V3**. * In the **Connection** dropdown, select the previously configured [B2BINPAY connection for withdrawals](#configure-connections-to-b2binpay). After selecting the connection, the **Configuration** form appears. You may see the message `Configuration form is temporarily unavailable.` Wait a short while for the form to become available. In the **Configuration** section, fill in the following fields: * In the **Wallet** dropdown, select your B2BINPAY wallet that will be used for processing transactions. For each wallet in the list, the identifier assigned by B2BINPAY, the wallet type (**Merchant** or **Enterprise**), the wallet currency, and the label (if specified in B2BINPAY) are displayed. For details, refer to [Blockchain selection for Merchant and Enterprise wallets](#blockchain-selection-for-merchant-and-enterprise-wallets). * In the **Blockchain fee level** dropdown, select **Low**, **Medium**, or **High**. * In the **Force blockchain** dropdown (applicable for **Merchant** wallets only), select: * **Yes** — to use only [on-chain transactions](https://docs.b2binpay.com/references/key-terms?q=fee+level#on-chain-transaction). * **No** — to allow [off-chain transactions](https://docs.b2binpay.com/references/key-terms#off-chain-transaction) when possible. All transactions involving **Enterprise** wallets are always processed on the blockchain. * The **Collect personal data** field displays **No**, which can't be changed as the **Travel rule** isn't currently supported for this B2BINPAY integration. Click **Save** to create the withdrawal method. The B2BINPAY withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-b2binpay` to display the [predefined icon](../../integrations/payment-systems) for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * In the **Rates provider** dropdown, select B2BINPAY as the preferred rate provider for processing withdrawals with conversions. To do this, B2BINPAY must first be added as an exchange rate provider under **Currencies** > **Rates** (for details, refer to [How to configure currency exchange rates](../manage-currencies/how-to-configure-currency-exchange-rates)). * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the currencies in which withdrawals can be processed. These are the currencies supported by the B2BINPAY wallet selected in the **Configuration** section. To enable withdrawals in a specific currency via this method, make sure that this currency is added on the **PS Currencies** tab. B2BINPAY withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **B2BINPAY** withdrawal method is now configured in the B2CORE Back Office. ## Blockchain selection for Merchant and Enterprise wallets [#blockchain-selection-for-merchant-and-enterprise-wallets] In the **Configuration** section of a deposit or withdrawal method, you must select the wallet that will be used for processing transactions. The wallet type determines how the blockchain for processing transactions is defined. * When using **Merchant** wallets, clients can select a blockchain for processing their transactions, depending on the chosen deposit or withdrawal currency. For example, if the deposit currency is USDT, available blockchain options such as **Ethereum** (ETH), **Tron** (TRX), or **BNB Smart Chain** (BSC) may appear, depending on your **Merchant** wallet configuration in B2BINPAY. * When using **Enterprise** wallets, the blockchain on which transactions are processed is predefined by the wallet currency. For example, if your **Enterprise** wallet holds **USDT on Ethereum** (ETH), deposits will always be processed on the **Ethereum** (ETH) blockchain. ## Deposits with static payment details via B2BINPAY [#deposits-with-static-payment-details-via-b2binpay] Deposits with static payment details via B2BINPAY allow clients to generate one or more blockchain-specific deposit addresses in the B2CORE UI. These addresses are saved for future use and can be reused for subsequent deposits. The example below shows how the payment form appears in the B2CORE UI for the B2BINPAY deposit method with **static payment details**. On the form, a client can generate payment details for making deposits in USDT on either the **Ethereum** (ETH) or **Tron** (TRX) blockchain. The generated address are saved and can be reused for future deposits. These addresses can be copied and used without the need to open the **Deposit** page in the B2CORE UI. B2BINPAY deposit method with static payment details Follow the instructions below to configure a connection and set up deposit and withdrawal methods through [B2BINPAY](https://b2binpay.com/) in the B2CORE Back Office. This instruction describes the **non-PSS** B2BINPAY integration that includes support for the **Travel Rule**. ## B2BINPAY integration with Notabene [#b2binpay-integration-with-notabene] B2BINPAY is integrated with **Notabene** to ensure compliance with the **Travel Rule**, which requires collecting client data for crypto transactions, including deposits and withdrawals. **Notabene** evaluates incoming client data for compliance and issues directives to either block or approve crypto transactions. When setting up deposit and withdrawal methods through B2BINPAY in the B2CORE Back Office, you can select whether to collect and transmit client data to B2BINPAY for further forwarding to **Notabene** or disable data collection using the **Collect personal info option** described below. Before proceeding with the instructions, you must have signed up for B2BINPAY and have an active wallet. ## Configure connections to B2BINPAY [#configure-connections-to-b2binpay] The non-PSS B2BINPAY integration allows you to use a single connection to configure both deposit and withdrawal methods. To configure a connection to B2BINPAY: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `B2BINPAY`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **B2BINPAY**. Click **Save** to create the connection. The B2BINPAY connection will appear in the list of external connections. Click **Edit** to open the connection details and fill in the following fields: * In **Service location** field, enter the URL of the B2BINPAY API. * In the **Login** and **Password** fields, enter your API credentials generated in B2BINPAY. For more details, refer to [How to access the API](https://docs.b2binpay.com/how-tos/manage-your-profile-and-system/how-to-access-api) in the B2BINPAY documentation. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), enable it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. Once the connection is configured, you can use it to create and set up deposit and withdrawal methods via B2BINPAY. ## Add a deposit method through B2BINPAY [#add-a-deposit-method-through-b2binpay] To add and set up a deposit method through B2BINPAY: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `B2BINPAY_Deposits`). * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **B2BINPAY**. * In the displayed **Currency** dropdown, select a currency for the method. After creating the method, you can add multiple currencies to it on the **TR Currencies** tab. * In the **Connection** dropdown, select the previously configured [B2BINPAY connection](#configure-connections-to-b2binpay). Click **Save** to create the method. The B2BINPAY method will appear in the list of methods. Click **Edit** to open the method details and fill in the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-b2binpay` to display the [predefined icon](../../integrations/payment-systems) for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * In the **Rates provider** dropdown, select B2BINPAY as the preferred rate provider for processing deposits with conversions. To do this, B2BINPAY must first be added as an exchange rate provider under **Currencies** > **Rates** (for details, refer to [How to configure currency exchange rates](../manage-currencies/how-to-configure-currency-exchange-rates)). In the **Provider settings** section, configure the following B2BINPAY-specific settings: * In the **Wallet ID** dropdown, select your B2BINPAY wallet that will be used for processing transactions. * In the **Payment page** dropdown, select **Local**. * The **Local URL** field displays the payment page URL, such as: `https://{your-Front-Office-URL}/`\ `conversion/payment/qrcode/{address}/{currency}/{message}` * In the **Client type** dropdown, select **Enterprise** or **Merchant**, depending on your wallet type. * In the **Collect personal info** dropdown, select: * **No** — to disable the collection of client personal data. * **Yes** — to enable the collection of client personal data, which is sent to B2BINPAY and then forwarded to **Notabene** for verifying crypto transactions. On the **TR Currencies** tab, check the added currency and add more if needed. The deposit method will be available for funding client wallets in B2CORE, which are denominated in the currencies added on this tab. On the **PS Currencies** tab, add the currencies in which deposits can be processed. These are the currencies supported by B2BINPAY. For details, refer to [Currency codes](https://docs.b2binpay.com/references/currency-codes) in the B2BINPAY documentation. To enable deposits in a specific currency via this method, make sure that this currency added on the **PS Currencies** tab. For details, refer to [Add currencies on the PS Currencies tab](#add-currencies-on-the-ps-currencies-tab). Click the **Test connection** button to validate the connection settings. The green button indicates that the connection has been configured properly. The red button indicates that some connection settings aren’t valid. The errors displayed below the button specify the connection issues that need to be addressed. Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. The B2BINPAY deposit method is now configured in the Back Office and available to clients in the B2CORE UI. ## Add a withdrawal method through B2BINPAY [#add-a-withdrawal-method-through-b2binpay] To add and set up a withdrawal method through B2BINPAY: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `B2BINPAY_Withdrawals`). * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **B2BINPAY**. * In the displayed **Currency** dropdown, select a currency for the method. After creating the method, you can add multiple currencies to it on the **TR Currencies** tab. * In the **Connection** field, select the previously configured [B2BINPAY connection](#configure-connections-to-b2binpay). Click **Save** to create the method. The B2BINPAY method will appear in the list of methods. Click **Edit** to open the method details and fill in the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-b2binpay` to display the [predefined icon](../../integrations/payment-systems) for the method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * In the **Rates provider** dropdown, select B2BINPAY as the preferred rate provider for processing withdrawals with conversions. To do this, B2BINPAY must first be added as an exchange rate provider under **Currencies** > **Rates** (for details, refer to [How to configure currency exchange rates](../manage-currencies/how-to-configure-currency-exchange-rates)). In the **Provider settings** section, configure the following B2BINPAY-specific settings: * In the **Fee level** dropdown, select **Low**, **Medium**, or **High**. * In the **Wallet ID** dropdown, select your B2BINPAY wallet that will be used for processing transactions. * In the **WithdrawDone Notification** dropdown, select **No**. * In the **Client type** dropdown, select **Enterprise** or **Merchant**, depending on your wallet type. * In the **Destination tag** dropdown, select: * **Yes** — if a destination tag is required for making withdrawals. * **No** — if a destination tag isn't required for withdrawals. This depends on the blockchain on which withdrawals will be processed. * In the **Tag type** dropdown, select the type of the destination tag, either **Numeric** or **String**. Select **Not set** if you set the **Destination tag** dropdown to **No**. * In the **Off-chain transactions** dropdown, select: * **Enabled** — to allow [off-chain transactions](https://docs.b2binpay.com/references/key-terms#off-chain-transaction) when possible. * **Disabled** — to use only [on-chain transactions](https://docs.b2binpay.com/references/key-terms?q=fee+level#on-chain-transaction). * In the **Collect personal info** dropdown, select: * **No** — to disable the collection of client personal data. * **Yes** — to enable the collection of client personal data, which is sent to B2BINPAY and then forwarded to **Notabene** for verifying crypto transactions. On the **TR Currencies** tab, check the added currency and add more if needed. The method will be available for withdrawing funds from client wallets in B2CORE, which are denominated in the currencies added on this tab. On the **PS Currencies** tab, add the currencies in which withdrawals can be processed. These are the currencies supported by B2BINPAY. For details, refer to [Currency codes](https://docs.b2binpay.com/references/currency-codes) in the B2BINPAY documentation. To enable withdrawals in a specific currency via this method, make sure that this currency is added on the **PS Currencies** tab. For details, refer to [Add currencies on the PS Currencies tab](#add-currencies-on-the-ps-currencies-tab). Click the **Test connection** button to validate the connection settings. The green button indicates that the connection has been configured properly. The red button indicates that some connection settings aren’t valid. The errors displayed below the button specify the connection issues that need to be addressed. Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. The B2BINPAY withdrawal method is now configured in the Back Office and available to clients in the B2CORE UI. ## Add currencies on the PS Currencies tab [#add-currencies-on-the-ps-currencies-tab] To add a currency: Click **+Add** and select the currency in the dropdown. For the selected currency, specify the following parameters: * **Block explorer** — the URL template of the blockchain explorer used to track transactions. * **Blockchain code** — the numeric identifier of the blockchain used for processing transactions. This ensures the deposit is processed on the correct network. These codes must be taken from the B2BINPAY documentation: [Currency codes](https://docs.b2binpay.com/references/currency-codes) and [Block explorer list](https://docs.b2binpay.com/references/block-explorer-list). ### Example [#example] For example, `USDT` deposits can be processed on different blockchains, depending on the token standard: For **Tron (TRC20)**, specify: * **Block explorer**: —`https://tronscan.org/#/transaction/{address}` * **Blockchain code** — 2145 For **Ethereum (ERC20)**, specify: * **Block explorer**: —`https://etherscan.io/tx/{address}` * **Blockchain code** — 2015 For **Binance Smart Chain (BSC/BEP20)**, specify: * **Block explorer**: — `https://bscscan.com/tx/{address}` * **Blockchain code** — 2065 In the **Min** and **Max** fields, specify the minimum and maximum transaction amounts. Add a currency on the PS Currencies tab Click **Save** to add the currency on the tab. Add as many currencies as needed for your deposit and withdrawal methods. [BridgerPay](https://bridgerpay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits only. Follow the instructions below to configure the BridgerPay connection and set up the deposit method in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to BridgerPay. Before proceeding with the instructions, you must have signed up for BridgerPay and have an active account. ## Create a payment link in your BridgerPay account [#create-a-payment-link-in-your-bridgerpay-account] To create a payment link in BridgerPay, you need to create a checkout of the payment link type: Sign in to your BridgerPay account. In the main menu, navigate to **Checkouts**. Click the **plus** icon to add a new checkout, and then fill in the following fields: * In the **Title** field, enter a title for the checkout. * In the **Type** dropdown, select **Payment link**. Create a payment link in BridgerPay Click **Create**. After the checkout of the payment link type is successfully created, the required credentials for configuring the deposit method in the B2CORE Back Office will become available. ## Configure a connection to BridgerPay [#configure-a-connection-to-bridgerpay] To configure a connection to BridgerPay for making deposits: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_BridgerPay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **PaymentSystemDeposit**. In the **Driver** dropdown that appears, select **BridgerPay**. In the **Credentials** section that appears, configure the BridgerPay-specific settings: * In the **API base URL** field, specify `https://api.bridgerpay.com`. * In the **API user name** and **API password** fields, enter your credentials for accessing the BridgerPay API. * In the **API key** field, enter the API key generated in your BridgerPay account. Click **Save** to create the connection. The **BridgerPay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. ## Add a deposit method through BridgerPay [#add-a-deposit-method-through-bridgerpay] To add and set up a method for making deposits through BridgerPay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through BridgerPay will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **BridgerPay**. * In the **Connection** dropdown, select the previously configured [BridgerPay connection](#configure-a-connection-to-bridgerpay). In the **Configuration** section that appears, complete the following setting: * In the **Cashier key** field, specify the unique identifier provided by BridgerPay. Create the BridgerPay deposit method Click **Save** to create the deposit method. The **BridgerPay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-bridgerpay` to display the [predefined icon](../../integrations/payment-systems) for the BridgerPay deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab. To enable the method to process deposits in a specific currency, ensure it is added on this tab (for the tab description, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). BridgerPay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test is performed based on the settings specified in the method form and the data provided in the selected external connection. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **BridgerPay** deposit method is now configured in the B2CORE Back Office. ## Set up webhooks in your BridgerPay account [#set-up-webhooks-in-your-bridgerpay-account] To receive status updates for initiated deposits in B2CORE, you need to set up notification webhooks for PSPs in BridgerPay. ### Copy the webhook URL from the B2CORE Back Office [#copy-the-webhook-url-from-the-b2core-back-office] In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Find the configured **BridgerPay** deposit method and click **Edit** to enter the method details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. BridgerPay deposit method — Webhooks tab ### Add the webhook URL to PSPs in BridgerPay [#add-the-webhook-url-to-psps-in-bridgerpay] Sign in to your BridgerPay account. In the main menu, navigate to **Checkouts**. Select the added PSP and click it to open its details. In the details, click **Settings**. PSP Settings in BridgerPay Go to the **URLs** tab. Paste the webhook URL copied from the B2CORE Back Office into the **Webhook Notification URL** field. Add the webhook URL to a PSP in BridgerPay Save your changes. Repeat these steps for each PSP added and configured in your BridgerPay account. ## Specify redirect URLs for PSPs in BridgerPay [#specify-redirect-urls-for-psps-in-bridgerpay] To ensure proper redirection after a deposit is completed, failed, or canceled, set up the corresponding redirect URLs for PSPs in BridgerPay. To st up redirect URLs: In your BridgerPay account, navigate to **Checkouts** in the main menu. Select the added PSP and click it to open its details. In the details, click **Settings**. Go to the **URLs** tab. Specify the following URLs: * In the **Success Redirect URL**, specify `https://{your-Front-Office-URL}/en/payment/success`. * In the **Failure Redirect URL** and **Cancel Redirect URL** fields, specify `https://{your-Front-Office-URL}/en/payment/failed`. Make sure to replace `{your-Front-Office-URL}` with the domain of your B2CORE UI. Add redirect URLs for a PSP in BridgerPay Save your changes. Repeat these steps for each PSP added and configured in your BridgerPay account. ## Enable the 'Notify with original amount' option for PSPs in BridgerPay [#enable-the-notify-with-original-amount-option-for-psps-in-bridgerpay] The **Notify with original amount** option for PSPs in BridgerPay ensures that payment notifications include the original deposit amounts, without any modifications or additional charges. To enable this option: In your BridgerPay account, navigate to **Checkouts** in the main menu. Select the added PSP and click it to open its details. In the details, click **Settings**. In the section named **PSP Specific Settings**, enable the **Notify with original amount** option. Save your changes. Repeat these steps for each PSP added and configured in your BridgerPay account. The **BridgerPay** deposit method is now fully configured and available for clients to use when making deposits in the B2CORE UI. The **Canonical** driver lets you connect a payment service provider (PSP) of your choice to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), even when B2CORE does not yet offer a dedicated driver for that provider. ## Why use the Canonical driver [#why-use-the-canonical-driver] Most payment systems in B2CORE rely on a dedicated driver built specifically for one provider. The Canonical driver takes a different approach: it defines a single, standard API contract — the Canonical Deposit API — that any provider can implement. B2CORE then handles authentication, the deposit start flow, polling, webhooks, and the status lifecycle in a uniform way, regardless of which provider sits behind the contract. The Canonical driver is useful when you want to: * Connect a preferred or in-house PSP that has no dedicated B2CORE driver, without waiting for custom development. * Reduce time to market by having your provider implement one documented, stable contract instead of a bespoke integration. * Keep full control of the provider side, while B2CORE manages the deposit workflow on its side. The Canonical driver currently supports deposit flows. To offer deposits through your provider, the provider must implement the Canonical Deposit API described in the [OpenAPI specification](#openapi-specification) below and follow the behavioral requirements on this page. ## OpenAPI specification [#openapi-specification] The Canonical Deposit API is defined in the following OpenAPI specification, which covers authentication, request and response schemas, endpoints, and status codes. Download it to review the full contract that your provider must implement: The rest of this page describes the behavioral requirements, B2CORE-side configuration, and design decisions that the specification cannot express. Read both together for a complete picture of the integration. ## B2CORE driver credentials [#b2core-driver-credentials] These fields are configured **on the B2CORE side** (Back Office) and used to authenticate with the PSP API. See the [OpenAPI specification](#openapi-specification) for full JWT token generation and verification details. | Field | Description | | ------------ | ------------------------------------------------------------------------------------------------------------------------------------ | | API base URL | HTTPS base URL of the PSP API. | | App ID | Unique merchant identifier. Used as the `sub` claim in the JWT. | | App secret | Secret key for HMAC-SHA256 signing. Base64 URL-encoded, 32 bytes (43 characters). Never sent in requests — used only to sign tokens. | ## B2CORE driver configuration fields [#b2core-driver-configuration-fields] These fields are configured **on the B2CORE side** (Back Office) and control driver behavior. They are not part of the PSP-facing API. ### Global parameters (`globalParam1`, `globalParam2`, `globalParam3`) [#global-parameters-globalparam1-globalparam2-globalparam3] Three configuration-level string fields sent with **every authenticated request** to the PSP. * For `POST` endpoints, they are included in the JSON request body. * For `GET` endpoints, they are included as query parameters. These represent PSP-specific values such as merchant ID, channel, or project ID. The exact semantics depend on the PSP implementation. The B2CORE admin fills them in during configuration setup. ### Required fields (read-only) [#required-fields-read-only] **Type:** Multi-select Selects which user info fields are displayed in the payment form as **read-only** (non-editable). Selected fields **must** already be configured and saved in the user's B2CORE profile. If any selected field is missing from the profile, the payment form generation fails with a missing fields error — the user cannot proceed until the data is filled in their B2CORE profile. The selected fields, along with the fields from Required fields (editable), determine which user data is meaningfully populated in the `startDepositUserInfo` object sent to the PSP in the `POST /api/v1/deposits` request. Fields not selected in either list are hidden in the form and may be sent as empty values. ### Required fields (editable) [#required-fields-editable] **Type:** Multi-select Selects which user info fields are displayed in the payment form as **editable**. The user can fill in or modify these fields directly in the payment form. Unlike Required fields (read-only), there is no requirement for these fields to be pre-configured in the user's B2CORE profile. **Priority rule:** If a field is selected in both Required fields (read-only) and Required fields (editable), it is displayed as **read-only**. The read-only setting always takes priority. **Email behavior:** Email is always displayed in the payment form and always sent in the `startDepositUserInfo`, regardless of whether it is selected in either list. The configuration only controls how it is displayed: | Email selected in | Behavior | | --------------------------- | ---------------------------------------------------------- | | Neither list | Displayed as an editable field | | Required fields (editable) | Displayed as an editable field | | Required fields (read-only) | Displayed as a read-only field (value from B2CORE profile) | | Both lists | Displayed as a read-only field (read-only takes priority) | ### Default sync deadline [#default-sync-deadline] **Type:** Select\ **Default:** `4h` Maximum duration after deposit creation during which B2CORE polls for the deposit status. After this deadline: * `StatusSyncInProgress` → the deposit is moved to `unexpected`. * `StatusSyncUnexpected` → the deposit is moved to `unexpected`. The `unexpected` status requires manual admin investigation via the LifecycleService. ### Safe to fail at start [#safe-to-fail-at-start] **Type:** Boolean (currently hardcoded to `yes`, no choice) Determines whether it is safe to mark a deposit as `failed` (terminal) when the start request encounters an unexpected error. * `yes` — if the PSP returns an error during deposit start, and B2CORE is confident the deposit was not created on the PSP side (for example, B2CORE never received a redirect URL), the deposit can safely be moved to `failed`. The client has not lost any money. * `no` — even on error, the deposit is moved to `in_progress` with an unverified external ID and polled, because the PSP might have created the deposit despite the error. **Currently, always `yes`.** The typical case: without a redirect URL, the client cannot complete the PSP payment page, so the deposit cannot succeed. ### Wait for webhook before polling [#wait-for-webhook-before-polling] **Type:** Boolean (currently hardcoded to `yes`, no choice) Controls whether B2CORE waits for a webhook notification before it starts polling `GET /api/v1/deposits/{externalID}`. | Value | Behavior | | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `yes` | After deposit start, B2CORE waits **up to 5 minutes** for a webhook before it begins to poll. If no webhook arrives within 5 minutes, B2CORE proceeds to standard polling. | | `no` | B2CORE begins polling immediately according to the standard backoff schedule. | **Rationale:** Many PSPs send a webhook notification quickly when the deposit status changes. Waiting for the webhook before polling reduces the number of unnecessary API calls, which helps stay within rate limits. The 5-minute timeout ensures progress even if the webhook is delayed or lost. ## Test configuration flow [#test-configuration-flow] When an admin clicks **Test Configuration** in B2CORE: ``` 1. B2CORE generates a one-time JWT signed with appSecret 2. B2CORE → POST /api/v1/configuration/test (with Bearer JWT + globalParams) 3. If response status = "available" → test result: "available" 4. If response status = "failed" → test result: "failed" (with error from PSP) 5. If unexpected error (5xx, timeout, and similar) → test result: "unexpected" ``` The test configuration method is the only method where any credential issue is expected to return not `401 Unauthorized`, but `200 OK` with a response body. The `code` and `description` are shown to the B2CORE administrator, so return clean, non-sensitive data. ## Webhook system design [#webhook-system-design] ### Two webhook channels [#two-webhook-channels] B2CORE supports **two webhook channels** per deposit: | Channel | Registration | Description | | ---------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | | **Automatic** | Via `notificationURL` in the `POST /api/v1/deposits` request | Always active. B2CORE generates the URL and passes it to the PSP. | | **Admin-configurable** | Set by the admin in the B2CORE Back Office | Optional. The admin can configure a separate webhook URL that the PSP sends notifications to (for example, registered in the PSP's admin panel). | Both channels feed into the same B2CORE webhook handler → `driver_transit` store → poller optimization pipeline. ### Webhook as polling optimization [#webhook-as-polling-optimization] The webhook is **not** the source of truth. It is an **optimization** that reduces unnecessary polling requests. ``` PSP → B2CORE webhook handler → driver_transit (key-value store) → poller ``` How it works: 1. When a webhook arrives, B2CORE stores a flag in `driver_transit` keyed by `externalID`. 2. The poller checks `driver_transit` before it makes an API call: * If a webhook flag exists for the `externalID`, B2CORE immediately calls `GET /api/v1/deposits/{externalID}`. * If no flag exists and less than 5 minutes have passed, B2CORE waits (see [Wait for webhook before polling](#wait-for-webhook-before-polling)). * If no flag exists and more than 5 minutes have passed, B2CORE proceeds with standard polling. 3. When the deposit reaches a terminal status (success or failed), the `driver_transit` entry is deleted. ### Webhook payload [#webhook-payload] The webhook payload is minimal (see the webhook callback under `POST /api/v1/deposits` in the [OpenAPI specification](#openapi-specification)): ```json { "externalID": "550e8400-e29b-41d4-a716-446655440000", "status": "success" } ``` The payload contains the following fields: * `externalID` — matches the UUID from the `POST /api/v1/deposits` request. * `status` — one of `"success"`, `"failed"`, or `"unprocessable"`. The webhook should be sent only when the deposit transitions to a **terminal status**. ## Deposit start flow [#deposit-start-flow] ### Start request [#start-request] B2CORE initiates a deposit by calling `POST /api/v1/deposits`. The request includes a `returnURL` field — a B2CORE frontend page URL to redirect the user back to after PSP page interaction. This is **not a webhook** — it is a browser redirect only. For all other details, see the [OpenAPI specification](#openapi-specification). ### Start result mapping [#start-result-mapping] The PSP response maps to a B2CORE action as follows: | PSP response | B2CORE action | | ----------------------------------------------------------------- | --------------------- | | PSP returns a redirect URL | Move to `in_progress` | | 2xx with a specification violation (for example, no redirect URL) | Move to `failed` | | HTTP 4xx / 5xx / timeout / network error | Move to `failed` | All failure scenarios result in `failed` (not `unexpected`) because Safe to fail at start is `yes` (see [Safe to fail at start](#safe-to-fail-at-start)): without a valid redirect URL, the end user cannot interact with the PSP payment page, so no money can be lost. ### Redirect flow [#redirect-flow] On a successful start, B2CORE receives a redirect URL and sends the end user to the PSP payment page: * The `returnURL` takes the user back to a B2CORE frontend page that indicates the deposit is being processed. * After start, B2CORE begins the polling and webhook flow (see [Polling and status sync](#polling-and-status-sync)). * Currently, `"redirect"` is the only supported action type. ## Polling and status sync [#polling-and-status-sync] ### Polling backoff schedule [#polling-backoff-schedule] B2CORE uses **progressive backoff** to poll `GET /api/v1/deposits/{externalID}`: | Time since deposit start | Poll interval | | ------------------------ | ---------------- | | 0–15 minutes | Every 1 minute | | 15–60 minutes | Every 3 minutes | | 1–3 hours | Every 5 minutes | | 3–5 hours | Every 10 minutes | | 5+ hours | Every 15 minutes | ### Deadline handling [#deadline-handling] Default deadline: **4 hours** after deposit creation (configurable, see [Default sync deadline](#default-sync-deadline)). When the deadline is exceeded, intermediate statuses are resolved as follows: | Last poll result | B2CORE action | | -------------------------------------------- | -------------------- | | `inProgress` | Move to `unexpected` | | Network error, 5xx, parse error, and similar | Move to `unexpected` | The `unexpected` status stops automatic polling and requires manual admin action via B2CORE's LifecycleService. ### Webhook wait logic [#webhook-wait-logic] When Wait for webhook before polling is `yes` (current default, see [Wait for webhook before polling](#wait-for-webhook-before-polling)): ### Polling result mapping [#polling-result-mapping] Each poll result from `GET /api/v1/deposits/{externalID}` maps to a B2CORE internal action: | PSP response status | B2CORE action | | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | `"inProgress"` + deadline not exceeded | Continue polling (retry) | | `"inProgress"` + deadline exceeded | Move to `unexpected` | | `"success"` | Move to `success`, stop polling. Save `finalAmount` and `finalCurrencyCode` | | `"failed"` | Move to `failed`, stop polling. Save `reason` | | `"unprocessable"` | Move to `unexpected`, stop polling. Save `reason`. Requires admin investigation | | HTTP 5xx / timeout / parse error | Treat as an `unexpected` poll attempt. Continue polling if the deadline is not exceeded | | HTTP 404 with `X-Safe-To-Fail-After-Seconds` | Continue polling. After the indicated time plus a safety margin (5 minutes), if still 404, move to `failed` with reason "deposit redirect URL is expired" | | HTTP 404 without the header | Continue polling. Wait for the deposit to appear on the PSP side or the sync deadline to be exceeded | ## Deposit status lifecycle [#deposit-status-lifecycle] This section describes B2CORE deposit statuses. For the mapping of PSP response statuses to B2CORE statuses, see [Start result mapping](#start-result-mapping) and [Polling result mapping](#polling-result-mapping). ### Full status diagram [#full-status-diagram] ### Recovery from the `unexpected` status [#recovery-from-the-unexpected-status] An admin can perform these manual transitions via the LifecycleService: | Transition | When to use | | ---------------------------- | -------------------------------------------------------------------------------- | | `unexpected` → `in_progress` | Retry polling (for example, after a PSP outage is resolved) | | `unexpected` → `success` | Only if the last poll attempt was `unprocessable` and the admin confirms success | | `unexpected` → `failed` | The admin confirms the deposit failed | ### Deposit status definitions [#deposit-status-definitions] The following table defines each B2CORE deposit status: | Status | Business meaning | | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `in_progress` | The deposit is being processed. Covers all intermediate states: pending bank transfer, 3DS verification in progress, awaiting manual review on the PSP side, the client interacting with the PSP payment page, and similar. This is a non-terminal status — B2CORE continues polling. | | `success` | The broker has received the client's money. The PSP has confirmed the funds were credited. The `finalAmount` and `finalCurrencyCode` fields reflect the actual amount and currency received, which may differ from the initial request due to fees or conversion. | | `failed` | The deposit did not go through. The client did **not** lose any money, and the broker did **not** receive any funds. Examples: card declined, bank transfer rejected, user canceled on the PSP page, or redirect link expired. | | `unexpected` | The deposit could not be resolved automatically and requires manual admin action via B2CORE (see [Recovery from the `unexpected` status](#recovery-from-the-unexpected-status)); automatic polling has stopped. Entered on a deadline timeout while `in_progress`, or when the PSP reports `unprocessable`. | ### Deposit creation timing [#deposit-creation-timing] PSPs follow one of two patterns for deposit creation: | Pattern | Behavior | Polling impact | | ---------------------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------- | | **Immediate creation** | The PSP creates the deposit record on `POST /api/v1/deposits`. | `GET /api/v1/deposits/{externalID}` returns a result immediately after start. | | **Deferred creation** | The PSP creates the deposit record only after the end user completes the PSP payment page. | `GET /api/v1/deposits/{externalID}` returns `404 Not Found` until the user completes the page. | For deferred creation, the PSP **should** return the `X-Safe-To-Fail-After-Seconds` header with the 404 response. This header tells B2CORE how long the redirect link is valid. After `redirect_time + header_value + safety_margin`, if the deposit is still 404, B2CORE marks it as `failed` with reason **"deposit redirect URL is expired"**. If the header is absent, B2CORE continues polling until the deposit appears or the sync deadline (default 4 hours) is exceeded, at which point the deposit moves to `unexpected`. ## Behavioral requirements [#behavioral-requirements] ### Distributed tracing [#distributed-tracing] All HTTP requests from B2CORE to the PSP include standard tracing headers per the [W3C Trace Context](https://www.w3.org/TR/trace-context/) specification: * `traceparent` — contains the trace ID, parent span ID, and trace flags. * `tracestate` — vendor-specific trace data. PSP implementations should propagate these headers to their downstream services for end-to-end observability. ### PSP payment page currency lock [#psp-payment-page-currency-lock] When the start deposit response includes a redirect to a PSP payment page: * The PSP page **must not** allow the end user to change the `currencyCode` to any analog, equivalent, or alternative currency. * The currency shown on the PSP page must match exactly what was sent in the start deposit request. * If the PSP page allows currency selection, the currency must be pre-selected and locked. ### IP whitelisting recommendation [#ip-whitelisting-recommendation] While not required by the API specification, PSP implementations are **strongly recommended** to configure IP whitelisting on their side. This provides an additional layer of security beyond JWT authentication, limiting API access to known B2CORE IP addresses. To make the Canonical driver available in your environment, please reach out to your account manager. Kindly specify how exactly and for what purposes you plan to use the Canonical driver so we can arrange access accordingly. [ChipPay](https://www.chippay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. ChipPay processes payments in `CNY`, which serves as its settlement currency, while the B2CORE PPS sends and receives amounts to and from ChipPay in `USDT`. For this reason, `USDT` must be added as a PS currency in the deposit and withdrawal methods configured in B2CORE. Follow the instructions below to configure the ChipPay connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to ChipPay. Before proceeding with the instructions, you must have signed up for ChipPay and have an active account. If you have any questions, consult the official [ChipPay Help Center](https://chippayhelp.zendesk.com/hc/en-gb) or contact their support team. ## Configure connections to ChipPay [#configure-connections-to-chippay] If you plan to use ChipPay for both deposits and withdrawals, you must configure separate connections, each dedicated to a specific deposit or withdrawal method. Each connection must be configured with the appropriate driver to ensure the correct operation of the respective deposit or withdrawal method. To configure a connection to ChipPay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_ChipPay` or `Withdrawals_ChipPay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select: * **ChipPay P2P buying order** — for deposits processed through ChipPay payment orders. Clients can pay using one of the available methods configured in your ChipPay merchant account, such as bank cards, **AliPay**, or **WeChat Pay**, if those options are enabled. * **ChipPay express buying order** — for deposits via bank card payments. * **ChipPay** — for withdrawals via bank card payments. In the **Credentials** section that appears, configure the ChipPay-specific settings: * In the **API base URL** field, specify `https://open-v2.chippay.com/`. * In the **Merchant ID** field, enter your ChipPay Merchant ID. * Generate a pair of 4096-bit RSA *private* and *public* keys using a secure tool, such as **OpenSSL** or another trusted method. For security reasons, it isn't recommended to use online tools to generate the keys. * In the **Private key** field, specify the *private* key, and make sure to specify the corresponding *public* key in your ChipPay account. Click **Save** to create the connection. The **ChipPay** connection for deposits or withdrawals will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need additional ChipPay connections for other payment methods, follow the same instruction to create a new connection with a different driver. The image below displays three configured ChipPay connections: one for the withdrawal method and two for deposit methods. External connections to ChipPay ## Add a deposit method through ChipPay [#add-a-deposit-method-through-chippay] To add and set up a method for making deposits through ChipPay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through ChipPay will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **ChipPay P2P buying order** or **ChipPay express buying order**. * In the **Connection** dropdown, select the previously configured [ChipPay connection for deposits](#configure-connections-to-chippay). If you selected the **ChipPay P2P buying order** driver, skip the **Configuration** section, as no settings are required for this deposit method. If you selected the **ChipPay express buying order** driver, in the **Configuration** section that appears, fill in the following fields: * In the **Exchange rate adjustment** dropdown, select: * **Yes** — to adjust the exchange rate provided by ChipPay when converting deposited funds into `CNY`, which is the settlement currency used by ChipPay for processing payments. * **No** — to use the default rate provided by ChipPay. * If you selected **Yes**, specify the adjustment value (as a percentage) in the **Adjustment value** field. The rate can only be adjusted within a ±3% range. For example, entering `3` increases the exchange rate by 3%, while `-3` decreases it by 3%. The adjusted rate will appear in the details of the ChipPay P2P buying order created to process the deposit. Click **Save** to create the deposit method. The **ChipPay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-chippay` to display the [predefined icon](../../integrations/payment-systems) for the ChipPay deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USDT`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). ChipPay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test is performed based on the settings specified in the method form and the data provided in the selected external connection. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **ChipPay** deposit method is now configured in the B2CORE Back Office. If you want to support both deposit methods offered by ChipPay, add and set up another deposit method that uses a different driver and connection. ## Add a withdrawal method through ChipPay [#add-a-withdrawal-method-through-chippay] To add and set up a method for making withdrawals through ChipPay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through ChipPay will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **ChipPay**. * In the **Connection** dropdown, select the previously configured [ChipPay connection for withdrawals](#configure-connections-to-chippay). Skip the **Configuration** section, as no settings are required for ChipPay withdrawals. Click **Save** to create the withdrawal method. The **ChipPay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-chippay` to display the [predefined icon](../../integrations/payment-systems) for the ChipPay withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USDT`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). ChipPay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test is performed based on the settings specified in the method form and the data provided in the selected external connection. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **ChipPay** withdrawal method is now configured in the B2CORE Back Office. [Jetapay](https://jetapay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and bank account withdrawals. Jetapay processes transactions only in `USD`, with a minimum amount of 10 USD and a maximum of 5,000 USD. Follow the instructions below to configure the Jetapay connection and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Jetapay. Before proceeding with the instructions, you must have signed up for Jetapay and have an active account. ## Configure connections to Jetapay [#configure-connections-to-jetapay] If you plan to use Jetapay for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to Jetapay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Jetapay` or `Withdrawals_Jetapay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **Jetapay**. In the **Credentials** section that appears, configure the Jetapay-specific settings: * In the **API base URL** field, specify `https://api.jetapay.com`. * In the **Token** fields, enter the token generated in your Jetapay account, which will be used to authenticate requests sent to the Jetapay API. Click **Save** to create the connection. The **Jetapay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via Jetapay, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through Jetapay [#add-a-deposit-method-through-jetapay] To add and set up a method for making deposits through Jetapay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select `USD`. * In the **Driver** dropdown, select **Jetapay**. * In the **Connection** dropdown, select the previously configured [Jetapay connection for deposits](#configure-connections-to-jetapay). Skip the **Configuration** section, as no settings are required for the Jetapay deposit method. Click **Save** to create the deposit method. The **Jetapay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the deposit method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USD`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Jetapay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Jetapay** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through Jetapay [#add-a-withdrawal-method-through-jetapay] To add and set up a method for making withdrawals through Jetapay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select `USD`. * In the **Driver** dropdown, select **Jetapay**. * In the **Connection** dropdown, select the previously configured [Jetapay connection for withdrawals](#configure-connections-to-jetapay). Skip the **Configuration** section, as no settings are required for the Jetapay withdrawal method. Click **Save** to create the withdrawal method. The **Jetapay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USD`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Jetapay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Jetapay** withdrawal method is now configured in the B2CORE Back Office. [KoraPay](https://www.korahq.com/payin) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits, withdrawals to bank accounts, and withdrawals to to mobile wallets via mobile money. Follow the instructions below to configure the KoraPay connection and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to KoraPay. Before proceeding with the instructions, you must have signed up for KoraPay and have an active account. You can consult the official [KoraPay documentation](https://developers.korapay.com/) or contact their support in case you have any questions. ## Supported currencies [#supported-currencies] Below is the table listing the currencies supported for deposits and withdrawals via KoraPay: For `XAF` and `XOF` currencies, amounts are rounded down to the nearest multiple of 5, as required by KoraPay. For example, if a client enters 2,573 `XAF`, it will be rounded down to 2,570 for the transaction. ## Configure connections to KoraPay [#configure-connections-to-korapay] If you plan to use KoraPay for both deposits and withdrawals, you must configure separate connections, each dedicated to a specific deposit or withdrawal method. Each connection must be configured with the appropriate driver to ensure the correct operation of the respective deposit or withdrawal method. To configure a connection to KoraPay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_KoraPay` or `Withdrawals_KoraPay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select: * **KoraPay** — for deposits. * **KoraPay bank account** — for withdrawals to bank accounts. * **KoraPay mobile money** — for withdrawals to mobile wallets via mobile money. In the **Credentials** section that appears, configure the KoraPay-specific settings: * In the **API base URL** field, specify `https://api.korapay.com`. * In the **Secret key** field, enter the secret key from your KoraPay account. * In the **Public key** field, enter the public key from your KoraPay account. To find both your secret and public keys, sign in to your KoraPay account, navigate to **Settings**, and open the **API Configuration** tab. API keys in KoraPay Click **Save** to create the connection. The **KoraPay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need additional KoraPay connections for other payment methods, follow the same instruction to create a new connection with a different driver. ## Add a deposit method through KoraPay [#add-a-deposit-method-through-korapay] To add and set up a method for making deposits through KoraPay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies that are supported for deposits, such as `NGN`, `GHS`, `KES`, `XAF`, and `XOF`. Deposits through KoraPay will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **KoraPay**. * In the **Connection** dropdown, select the previously configured [KoraPay connection for deposits](#configure-connections-to-korapay). In the **Configuration** section, set the **Merchant bears cost** option to: * **Yes** — the broker (merchant) pays the transaction fee. * **No** — the trader (client) pays the transaction fee. Click **Save** to create the deposit method. The **KoraPay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-korapay` to display the [predefined icon](../../integrations/payment-systems) for the KoraPay deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process deposits in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). KoraPay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **KoraPay** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through KoraPay [#add-a-withdrawal-method-through-korapay] To add and set up a method for making withdrawals through KoraPay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through KoraPay will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select: * **KoraPay bank account** — for withdrawals to bank accounts. Only withdrawals to Nigerian bank accounts are supported. * **KoraPay mobile money** — for withdrawals to mobile wallets via mobile money. Withdrawals are supported for Kenyan (KES), Ghanaian (GHS), Ivorian (XOF), and Cameroonian (XAF) mobile money accounts. * In the **Connection** dropdown, select the previously configured [KoraPay connection for withdrawals](#configure-connections-to-korapay). In the **Configuration** section, complete the following settings: For the **KoraPay bank account** driver: * In the **Merchant bears cost** dropdown, select: * **Yes** — the broker (merchant) pays the transaction fee. * **No** — the trader (client) pays the transaction fee. For the **KoraPay mobile money** driver: * Configure the **Merchant bears cost** option as described above. * In the **Country** dropdown, select the where this withdrawal method will be available, such as Kenya, Ghana, Côte d’Ivoire, or Cameroon. Click **Save** to create the withdrawal method. The **KoraPay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-korapay` to display the [predefined icon](../../integrations/payment-systems) for the KoraPay withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). KoraPay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **KoraPay** withdrawal method is now configured in the B2CORE Back Office. To add another withdrawal method via KoraPay using a different driver, follow the same instructions and select the other driver. [LuqaPay](https://luqapay.com/) can be connected to B2CORE through PSS, supporting withdrawals via bank transfers in `TRY`. Follow the instructions below to configure the LuqaPay connection and set up the withdrawal method in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to LuqaPay. Before proceeding with the instructions, you must have signed up for LuqaPay and have an active account. ## Configure a connection to LuqaPay [#configure-a-connection-to-luqapay] To configure a connection to LuqaPay for making withdrawals: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Withdrawals_LuqaPay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. In the **Driver** dropdown that appears, select **LuqaPay**. In the **Credentials** section that appears, configure the LuqaPay-specific settings: * In the **API base URL** field, specify: * `https://wallet.luqapay.com` — for the production environment * `https://sandbox-wallet.luqapay.com` — for the sandbox testing environment * In the **API key** field, enter the API key generated in your LuqaPay account. * In the **API secret key** field, enter the API secret generated in your LuqaPay account. Click **Save** to create the connection. The **LuqaPay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. ## Add a withdrawal method through LuqaPay [#add-a-withdrawal-method-through-luqapay] To add and set up a method for making withdrawals through LuqaPay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through LuqaPay will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **LuqaPay**. * In the **Connection** dropdown, select the previously configured [LuqaPay connection](#configure-a-connection-to-luqapay). In the **Configuration** section, select **Türkiye** in the **Country** dropdown. This is the only supported country for this integration. Click **Save** to create the withdrawal method. The **LuqaPay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `TRY`. This is the only currency supported for processing withdrawals with this integration. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). LuqaPay withdrawal method — Settings tab Click **Save** to apply the changes. The **LuqaPay** withdrawal method is now configured in the B2CORE Back Office. ## Set up a webhook in LuqaPay [#set-up-a-webhook-in-luqapay] To receive status updates for withdrawals in B2CORE, a notification webhook must be set up on the side of LuqaPay. ### Copy the webhook URL from the B2CORE Back Office [#copy-the-webhook-url-from-the-b2core-back-office] In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Find the configured **LuqaPay** withdrawal method and click **Edit** to open the method details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Provide the webhook URL to LuqaPay [#provide-the-webhook-url-to-luqapay] Send the copied webhook URL to the LuqaPay support for configuration on their side. [PayPaymentAsia](https://www.paymentasia.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. Follow the instructions below to configure the PaymentAsia connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to PaymentAsia. Before proceeding with the instructions, you must have signed up for PaymentAsia and have an active account. ## Supported currencies [#supported-currencies] Below is the table listing the currencies supported for deposits and withdrawals via PaymentAsia: ## Configure connections to PaymentAsia [#configure-connections-to-paymentasia] If you plan to use PaymentAsia for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to PaymentAsia: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_PaymentAsia` or `Withdrawals_PaymentAsia`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **PaymentAsia**. In the **Credentials** section that appears, configure the PaymentAsia-specific settings: ## For deposits: [#for-deposits] * In the **Payment base URL** field, specify `https://payment.pa-sys.com`. * In the **Gateway base URL** field, specify `https://gateway.pa-sys.com`. * In the **Merchant token** field, enter the token generated in your PaymentAsia account. * In the **Secret code** field, enter the secret code generated in your PaymentAsia account. You can find both the **Merchant token** and **Secret code** in your PaymentAsia account under **Merchants** > **Info**. ## For withdrawals: [#for-withdrawals] Specify the **Gateway base URL**, **Merchant token**, and **Secret code** fields as described above. Click **Save** to create the connection. The **PaymentAsia** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via PaymentAsia, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through PaymentAsia [#add-a-deposit-method-through-paymentasia] To add and set up a method for making deposits through PaymentAsia: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through PaymentAsia will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PaymentAsia**. * In the **Connection** dropdown, select the previously configured [PaymentAsia connection for deposits](#configure-connections-to-paymentasia). Skip the **Configuration** section, as no settings are required for the PaymentAsia deposit method. Click **Save** to create the deposit method. The **PaymentAsia** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-asia` to display the [predefined icon](../../integrations/payment-systems) for the PaymentAsia deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process deposits in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PaymentAsia deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PaymentAsia** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through PaymentAsia [#add-a-withdrawal-method-through-paymentasia] To add and set up a method for making withdrawals through PaymentAsia: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through PaymentAsia will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PaymentAsia**. * In the **Connection** dropdown, select the previously configured [PaymentAsia connection for withdrawals](#configure-connections-to-paymentasia). In the **Configuration** section, select one or more banks in the **Available banks** dropdown, which clients can choose when making withdrawals in the B2CORE UI. The list of banks must correspond to the [currencies available for withdrawals](#supported-currencies). These currencies should be added on the **PS Currencies** tab after creating the withdrawal method. If a currency doesn’t have a corresponding bank selected in the **Available banks** dropdown, withdrawals in that currency won't be available. Click **Save** to create the withdrawal method. The **PaymentAsia** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-asia` to display the [predefined icon](../../integrations/payment-systems) for the PaymentAsia withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PaymentAsia withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PaymentAsia** withdrawal method is now configured in the B2CORE Back Office. [PayPal](https://www.paypal.com) can be connected to B2CORE **only** through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. Follow the instructions below to configure the PayPal connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to PayPal. Before proceeding with the instructions, you must have signed up for PayPal and have an active account. ## Configure connections to PayPal [#configure-connections-to-paypal] If you plan to use PayPal for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to PayPal: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_PayPal` or `Withdrawals_PayPal`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **PayPal**. In the **Credentials** section that appears, configure the PayPal-specific settings: * In the **API base URL** field, specify `https://api-m.paypal.com`. * In the **Client ID** field, enter the ID of the REST API app that you created in your PayPal account. * In the **Client secret** field, enter the client secret associated with that app. To find your client ID and secret, sign in to your PayPal account and navigate to **My Apps & Credentials** in the main menu. On the **Live** tab, select your app to view and copy the credentials. Click **Save** to create the connection. The **PayPal** connection for deposits or withdrawals will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via PayPal, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through PayPal [#add-a-deposit-method-through-paypal] To add and set up a method for making deposits through PayPal: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through PayPal will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PayPal**. * In the **Connection** dropdown, select the previously configured [PayPal connection for deposits](#configure-connections-to-paypal). In the **Configuration** section that appears, configure the following parameter: * In the **Amount type** dropdown, select how the final deposit amount will be calculated: * **Net amount** (the default option) — the amount received by the broker after PayPal transaction fees are deducted. If no commission is set for the method in B2CORE, this net amount will be deposited to the client’s account. If a commission is set, it will be deducted from the net amount, and the client will receive a smaller amount. In both cases, the broker doesn't incur any losses. * **Gross amount** — the full deposit amount before PayPal transaction fees are deducted. If no commission is set for the method in B2CORE, the broker will receive less than the gross amount due to PayPal fees and will have to cover the difference, resulting in a loss. For more details on setting commissions, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods). Click **Save** to create the deposit method. The **PayPal** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-paypal` to display the [predefined icon](../../integrations/payment-systems) for the PayPal deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab. To enable the method to process deposits in a specific currency, ensure it is added on this tab (for the tab description, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PayPal deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PayPal** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through PayPal [#add-a-withdrawal-method-through-paypal] To add and set up a method for making withdrawals through PayPal: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through PayPal will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PayPal**. * In the **Connection** dropdown, select the previously configured [PayPal connection for withdrawals](#configure-connections-to-paypal). Skip the **Configuration** section, as no settings are required for the PayPal withdrawal method. Click **Save** to create the withdrawal method. The **PayPal** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-paypal` to display the [predefined icon](../../integrations/payment-systems) for the PayPal withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab (for the tab description, refer to [Payout methods](../../back-office-guide/system/payout-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PayPal withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PayPal** withdrawal method is now configured in the B2CORE Back Office. [PayRetailers](https://payretailers.com/en/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. Follow the instructions below to configure the PayRetailers connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to PayRetailers. Before proceeding with the instructions, you must have signed up for PayRetailers and have an active account. You can consult the official [PayRetailers documentation](https://payretailers.dev/docs/welcome) or contact their support in case you have any questions. ## Supported currencies [#supported-currencies] Below is the table listing the currencies supported for deposits and withdrawals via PayRetailers: ## Configure connections to PayRetailers [#configure-connections-to-payretailers] If you plan to use PayRetailers for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to PayRetailers: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_PayRetailers` or `Withdrawals_PayRetailers`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **PayRetailers**. In the **Credentials** section that appears, configure the PayRetailers-specific settings: * In the **API base URL** field, specify: * `https://api.payretailers.com` — for the production environment * `https://api-sandbox.payretailers.com` — for the sandbox testing environment * In the **Shop ID** field, enter the identifier assigned to your account by PayRetailers. * In the **Secret key** field, specify the secret key from your PayRetailers account. * In the **Subscription key** field, specify the subscription key from your PayRetailers account. All of these details are provided by PayRetailers during the onboarding process and can also be found in the **Shops** section of your PayRetailers account. PayRetailers — Shops menu Click **Save** to create the connection. The **PayRetailers** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via PayRetailers, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through PayRetailers [#add-a-deposit-method-through-payretailers] To add and set up a method for making deposits through PayRetailers: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through this method will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PayRetailers**. * In the **Connection** dropdown, select the previously configured [PayRetailers connection for deposits](#configure-connections-to-payretailers). In the **Configuration** section that appears, fill in the following fields: * In the **Channel** dropdown, select the payment channel: * **Online** — for online payments * **Wallet** — for payments via e-wallets * **Credit card** — for funding deposits with bank cards * **Cash** — for making cash payments through banks * In the **Country** dropdown, select the country where the payment will be processed. Click **Save** to create the deposit method. The **PayRetailers** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-payretailers` to display the [predefined icon](../../integrations/payment-systems) for the PayRetailers deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process deposits in a specific currency, ensure it is added on this tab. For PayRetailers **deposits**, the currencies used to process deposits are tied to the country selected in the method **Configuration** section. A single country may support more than one **deposit currency**: * **Argentina** → ARS, USD * **Brazil** → BRL, USD * **Chile** → CLP, USD * **Colombia** → COP, USD * **Costa Rica** → CRC, USD * **Ecuador** → USD * **El Salvador** → USD * **Mexico** → MXN, USD * **Panama** → USD * **Peru** → PEN, USD * **Rwanda** → RWF, USD * **Tanzania** → TZS, USD * **Kenya** → KES, USD * **Nigeria** → NGN, USD * **South Africa** → ZAR, USD For example, for Brazil, deposits can be processed in `BRL` and `USD`, both of which can be added on the **PS Currencies** tab. Additionally, the method can be restricted for use in a specific country by applying country restrictions (for details, refer to [How to restrict the use of deposit and withdrawal methods](how-to-restrict-the-use-of-deposit-and-withdrawal-methods#how-to-restrict-the-use-by-country)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PayRetailers deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PayRetailers** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through PayRetailers [#add-a-withdrawal-method-through-payretailers] To add and set up a method for making withdrawals through PayRetailers: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through this method will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **PayRetailers**. * In the **Connection** dropdown, select the previously configured [PayRetailers connection for withdrawals](#configure-connections-to-payretailers). In the **Configuration** section, select the payment channel in the **Channel** dropdown. Click **Save** to create the withdrawal method. The **PayRetailers** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-payretailers` to display the [predefined icon](../../integrations/payment-systems) for the PayRetailers withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. For PayRetailers **withdrawals**, each currency is tied to a specific country in a strict one-to-one relationship. This means that a withdrawal in a given currency is available only for its corresponding country. As a result, clients must select the appropriate country and provide the required bank details for that location. The following mapping shows which country is associated with each **withdrawal currency**: * **Argentina** → ARS * **Brazil** → BRL * **Chile** → CLP * **Colombia** → COP * **Ecuador** → USD * **Mexico** → MXN * **Peru** → PEN * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). PayRetailers withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **PayRetailers** withdrawal method is now configured in the B2CORE Back Office. [Payrock](https://payroc.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss). It supports: * Deposits in the following currencies: `CNY` (via Alipay, P2P, and bank transfers), `JPY` (via P2C and bank transfers), and `EGP` (via mobile money). * Withdrawals in: `CNY` (via Alipay, P2P, and bank transfers) and `JPY` (via P2C). In Payrock, each currency corresponds to a specific country, which means that the details shown in the payment form will be specific to that country — for example, the list of available banks for transfers. Follow the instructions below to configure the Payrock connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Payrock. Before proceeding with the instructions, you must have signed up for Payrock and have an active account. You can consult the official [Payrock documentation](https://support.payroc.com/s/) or contact their support in case you have any questions. ## Configure connections to Payrock [#configure-connections-to-payrock] If you plan to use Payrock for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to Payrock: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Payrock` or `Withdrawals_Payrock`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **Payrock**. In the **Credentials** section that appears, configure the Payrock-specific settings: * In the **API base URL** field, specify `https://gateway-dev.payrock.io`. * In the **Merchant code** field, enter the Merchant code assigned to your account by Payrock. * In the **Merchant key** field, enter the secret key provided by Payrock for your merchant account, used to authenticate API requests. You need to request the **Merchant code** and **Merchant key** from the Payrock support. Click **Save** to create the connection. The **Payrock** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via Payrock, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through Payrock [#add-a-deposit-method-through-payrock] To add and set up a method for making deposits through Payrock: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through Payrock will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Payrock**. * In the **Connection** dropdown, select the previously configured [Payrock connection for deposits](#configure-connections-to-payrock). Skip the **Configuration** section, as no settings are required for the Payrock deposit method. Click **Save** to create the deposit method. The **Payrock** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the deposit method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process deposits in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Payrock deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Payrock** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through Payrock [#add-a-withdrawal-method-through-payrock] To add and set up a method for making withdrawals through Payrock: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through Payrock will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Payrock**. * In the **Connection** dropdown, select the previously configured [Payrock connection for withdrawals](#configure-connections-to-payrock). Skip the **Configuration** section, as no settings are required for the Payrock withdrawal method. Click **Save** to create the withdrawal method. The **Payrock** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Payrock withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Payrock** withdrawal method is now configured in the B2CORE Back Office. [Paytiko](https://www.paytiko.com/) can be connected to B2CORE through PSS, with support for deposits only. For a full list of payment systems that can be connected through PSS, refer to [Integrations > Payment systems](../../integrations/payment-systems). Such systems are marked with `Yes` in the **PSS-supported** column. Follow the instructions below to configure the Paytiko connection and set up the deposit method in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Paytiko. Before proceeding with the instructions, you must have signed up for Paytiko and have an active account. ## Configure a connection to Paytiko [#configure-a-connection-to-paytiko] To configure a connection to Paytiko for making deposits: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Paytiko`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **PaymentSystemDeposit**. In the **Driver** dropdown that appears, select **Paytiko**. In the **Credentials** section that appears, configure the Paytiko-specific settings: * In the **API base URL** field, specify `https://core.paytiko.com`. * In the **Secrete key** field, enter your secret key. To find your secret key, sign in to your Paytiko account and navigate to **Payment settings** > **Merchants**, where you can copy it. Create the connection to Paytiko Click **Save** to create the connection. The **Paytiko** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. ## Add a deposit method through Paytiko [#add-a-deposit-method-through-paytiko] To add and set up a method for making deposits through Paytiko: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through Paytiko will be available for accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Paytiko**. * In the **Connection** dropdown, select the previously configured [Paytiko connection](#configure-a-connection-to-paytiko). Skip the **Configuration** section, as no settings are required for Paytiko. Create the Paytiko deposit method Click **Save** to create the deposit method. The **Paytiko** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, select **Fiat** in the **Group** dropdown. * In the **Icon** field, specify `paymethod-paytiko` to display the [predefined icon](../../integrations/payment-systems) for the Paytiko deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab (for the tab description, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Deposit method details Click **Save** to apply the changes. The **Paytiko** deposit method is now configured in the B2CORE Back Office. ## Set up a webhook in your Paytiko account [#set-up-a-webhook-in-your-paytiko-account] To receive status updates for initiated deposits in B2CORE, you need to set up a notification webhook in your Paytiko account. ### Copy the webhook URL from the B2CORE Back Office [#copy-the-webhook-url-from-the-b2core-back-office] In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Find the configured **Paytiko** deposit method and click **Edit** to enter the method details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Add the webhook URL to your Paytiko account [#add-the-webhook-url-to-your-paytiko-account] In your Paytiko account, navigate to **Payment settings** > **Merchants**. In the **Merchant settings**, paste the copied webhook URL into the **Url** field under the **External service** section. Add the webhook URL to your Paytiko account Click **Save** to apply the changes. The **Paytiko** deposit method is now fully configured and available for clients to use when making deposits in the B2CORE UI. [Praxis](https://praxis.tech/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. Follow the instructions below to configure the Praxis connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Praxis. Before proceeding with the instructions, you must have signed up for Praxis and have an active account. ## Configure connections to Praxis [#configure-connections-to-praxis] If you plan to use Praxis for both deposits and withdrawals, you must configure separate connections, each dedicated to a specific deposit or withdrawal method. Withdrawals through Praxis can be processed to **bank cards** or via an **alternative payment method** (APM) such as e-wallets. Each connection must be configured with the appropriate driver to ensure the correct operation of the respective deposit or withdrawal method. To configure a connection to Praxis: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Praxis` or `Withdrawals_Praxis`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select: * **Praxis cashier** — for processing deposits. * **Praxis bank card** — for withdrawals to bank cards. * **Praxis alternative payment method** — for withdrawals via an APM, such as e-wallets. In the **Credentials** section that appears, configure the Praxis-specific settings: * In the **Environment** dropdown (applicable only to the **Praxis bank card** driver), select **Production**. * In the **API base URL** field, specify `https://gw.praxisgate.com`. * In the **API secret** fields, enter the secret key provided by Praxis. * In the **Merchant ID** field, enter your Praxis Merchant ID. * In the **Application key** field, enter the key generated in your Praxis account. Click **Save** to create the connection. The **Praxis** connection for deposits or withdrawals will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need additional Praxis connections for other payment methods, follow the same instruction to create a new connection with a different driver. The image below displays three configured Praxis connections: one for the deposit method and two for withdrawal methods. External connections to Praxis ## Add a deposit method through Praxis [#add-a-deposit-method-through-praxis] To add and set up a method for making deposits through Praxis: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through Praxis will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Praxis cashier**. * In the **Connection** dropdown, select the previously configured [Praxis connection for deposits](#configure-connections-to-praxis). Skip the **Configuration** section, as no settings are required for the Praxis deposit method. Click **Save** to create the deposit method. The **Praxis** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-praxis` to display the [predefined icon](../../integrations/payment-systems) for the Praxis deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab. To enable the method to process deposits in a specific currency, ensure it is added on this tab (for the tab description, refer to [Deposit methods](../../back-office-guide/system/deposit-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Praxis deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test is performed based on the settings specified in the method form and the data provided in the selected external connection. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Praxis** deposit method is now configured in the B2CORE Back Office. In your Praxis account, make sure to apply the settings outlined below for proper processing of deposits. ## Set up the settings for deposit processing in your Praxis account [#set-up-the-settings-for-deposit-processing-in-your-praxis-account] Sign in to your Praxis account and apply the following settings: * The **Allow Payment Link Generation** option must be enabled. You can't activate this option on your own. To enable it, submit a request to Praxis support. * The **Validate IP** option should be either disable or contain the IP address of the host where your B2CORE Back Office resides. * The **Validate domain** option: * If you have the [mobile app](../../release-notes/release-notes-mobile) in addition to the B2CORE UI, this option must be disabled. * If you only have the B2CORE UI, this option should be either disabled or contain the domain on which your B2CORE UI resides. ## Add a withdrawal method through Praxis [#add-a-withdrawal-method-through-praxis] To add and set up a method for making withdrawals through Praxis: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through Praxis will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select: * **Praxis bank card** — the driver for withdrawals to bank cards. * **Praxis alternative payment method** — the driver for withdrawals via an APM (Alternative payment method), such as e-wallets. * In the **Connection** dropdown, select the previously configured [Praxis connection for withdrawals](#configure-connections-to-praxis). In the **Configuration** section that appears: * The **Gateway hash** field displays: * **Card processor** — if you selected the **Praxis bank card** driver. * **E-Wallet** — if you selected the **Praxis alternative payment method** driver. * In the **Profile ID** dropdown (applicable only to the **Praxis bank card** driver), select your Praxis profile type. Click **Save** to create the withdrawal method. The **Praxis** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-praxis` to display the [predefined icon](../../integrations/payment-systems) for the Praxis withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * Add the needed currencies on the **PS Currencies** tab. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab (for the tab description, refer to [Payout methods](../../back-office-guide/system/payout-system#details)). * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Praxis withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test is performed based on the settings specified in the method form and the data provided in the selected external connection. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Praxis** withdrawal method is now configured in the B2CORE Back Office. If you need both withdrawals to bank cards and e-wallets, add and set up another withdrawal method that uses a different driver and connection. [Proxpay](https://www.proxpay.co/auth/login) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss). It supports deposits via QR codes and withdrawals to bank accounts, processed in `THB`. Follow the instructions below to configure the Proxpay connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Proxpay. Before proceeding with the instructions, you must have signed up for Proxpay and have an active account. ## Configure connections to Proxpay [#configure-connections-to-proxpay] If you plan to use Proxpay for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to Proxpay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Proxpay` or `Withdrawals_Proxpay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **Proxpay**. In the **Credentials** section that appears, configure the Proxpay-specific settings. ### For deposits: [#for-deposits] * In the **API base URL** field, specify: * `https://api.proxpay.co` — for the production environment * `https://stg-api.proxpay.co` — for the sandbox testing environment * In the **API key** field, enter the API key provided by Proxpay to authenticate requests. * In the **Username** and **Password** fields, specify the credentials associated with your Merchant ID. * In the **API start base URL** field, specify `https://payment.thehabito.com`. This URL is only intended for the production environment and isn't available for the testing environment. * In the **Start token** field, enter the token used to initiate API sessions with Proxpay. * In the **Merchant ID** field, specify your Merchant ID assigned by Proxpay. * In the **Proxpay merchant ID** filed, specify the unique merchant identifier used for QR code deposits. ### For withdrawals: [#for-withdrawals] * In the **API base URL** field, specify: * `https://api.proxpay.co` — for the production environment * `https://stg-api.proxpay.co` — for the sandbox testing environment * In the **API key** field, enter the API key provided by Proxpay to authenticate requests. * In the **Username** and **Password** fields, specify the credentials associated with your Merchant ID. * In the **Merchant ID** field, specify your Merchant ID assigned by Proxpay. You need to request all the credentials required for configuring connections from the Proxpay support. Click **Save** to create the connection. The **Proxpay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via Proxpay, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through Proxpay [#add-a-deposit-method-through-proxpay] To add and set up a method for making deposits through Proxpay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through Proxpay will be available to accounts denominated in the selected currencies. For these currencies, conversion rates for `THB` must be configured. * In the **Driver** dropdown, select **Proxpay**. * In the **Connection** dropdown, select the previously configured [Proxpay connection for deposits](#configure-connections-to-proxpay). In the **Configuration** section, enter the value for the **Product detail** field as provided by the Proxpay support. Click **Save** to create the deposit method. The **Proxpay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the deposit method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `THB`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Proxpay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Proxpay** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through Proxpay [#add-a-withdrawal-method-through-proxpay] To add and set up a method for making withdrawals through Proxpay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through Proxpay will be available from accounts denominated in the selected currencies. For these currencies, conversion rates for `THB` must be configured. * In the **Driver** dropdown, select **Proxpay**. * In the **Connection** dropdown, select the previously configured [Proxpay connection for withdrawals](#configure-connections-to-proxpay). Skip the **Configuration** section, as no settings are required for the Proxpay withdrawal method. Click **Save** to create the withdrawal method. The **Proxpay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `THB`. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Proxpay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Proxpay** withdrawal method is now configured in the B2CORE Back Office. ## Set up webhooks in Proxpay [#set-up-webhooks-in-proxpay] To receive status updates for deposits and withdrawals in B2CORE, notification webhooks must be set up on the side of Proxpay. ### Copy webhook URLs from the B2CORE Back Office [#copy-webhook-urls-from-the-b2core-back-office] You will need separate webhook URLs for both deposit and withdrawal methods. In the B2CORE Back Office, navigate to: * **System** > **Deposit system** > **Deposit methods** * **System** > **Payout system** > **Payout methods** Find the configured Proxpay deposit or withdrawal method and click **Edit** to open its details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Provide URLs to Proxpay [#provide-urls-to-proxpay] Send the copied webhook URLs (for both deposits and withdrawals) to the Proxpay support for configuration on their side. [Sticpay](https://www.sticpay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals. Follow the instructions below to configure the Sticpay connection and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Sticpay. Before proceeding with the instructions, you must have signed up for Sticpay and have an active account. ## Supported currencies [#supported-currencies] Below are the tables listing the currencies supported for deposits and withdrawals via Sticpay. Transactions are processed through wallets created in your Sticpay account. To enable a particular currency, you must first create a wallet in that currency. ### Fiat currencies [#fiat-currencies] The following fiat currencies are supported for **both deposits and withdrawals**: ### Cryptocurrencies [#cryptocurrencies] The following cryptocurrencies are supported for **deposits only**: ## Minimum deposit and withdrawal amounts [#minimum-deposit-and-withdrawal-amounts] Sticpay applies a dynamic minimum amount to deposits and withdrawals, equivalent to **1 USD** based on Sticpay’s exchange rates. If a deposit or withdrawal request is created below this minimum threshold (in conversion to USD), Sticpay will reject the transaction. For deposits, a client will see an error if the amount is below the limit when redirected to the Sticpay page. For withdrawals, if the amount is below the limit, the transaction will fail when processed on the Sticpay side, and the client won’t see the reason for the failure. To prevent this, it is strongly recommended to configure a minimum withdrawal amount for each supported currency in the Sticpay withdrawal method in the B2CORE Back Office. ## Configure API settings in your Sticpay account [#configure-api-settings-in-your-sticpay-account] To enable integration between Sticpay and B2CORE, you need to configure specific API settings in your Sticpay account. To configure API settings: Sign in to your Sticpay account and navigate to the **Sticpay API** section. Configure the following settings, which are required for deposit and withdrawal methods to function correctly with B2CORE: * Select the **Enable** checkbox to activate API-based payments. * Select the **Unique order-no** checkbox to ensure that each transaction has a unique order number, preventing duplicates. * In the **Success URL** field, specify the URL to which clients will be redirected after a successful deposit, using the format: `https://{your-Front-Office-URL}/en/payment/success` * In the **Failure URL** field, specify the URL to which clients will be redirected after a failed deposit, using the format: `https://{your-Front-Office-URL}/en/payment/failed` * In the **Referrer URL** field, specify the URL to which clients will be redirected after canceling a deposit (for example, the **Funds** > **Deposit** page of your B2CORE UI), using the format: `https://{your-Front-Office-URL}/en/funds/deposit` Make sure to replace `{your-Front-Office-URL}` with the domain of your B2CORE UI. * In the **Callback URL** field, enter the webhook URL generated on the **Webhooks** tab of the deposit method settings after configuring the method in the B2CORE Back Office (for details, refer to [Set up a webhook in your Sticpay account](#set-up-a-webhook-in-your-sticpay-account)). * Select the **Plain JSON Callback** checkbox to ensure callback responses are formatted as plain JSON. * In the **Whitelist IPs** field, enter the comma-separated IP addresses from which requests to your API will be accepted. * In the **Encryption type** dropdown, select **SHA256** to use this encryption method for request signing and validation. Only **SHA256** is supported for integration with B2CORE. Sticpay API settings Click **Save** to apply your changes. ## Configure connections to Sticpay [#configure-connections-to-sticpay] If you plan to use Sticpay for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to Sticpay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Sticpay` or `Withdrawals_Sticpay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **Sticpay**. In the **Credentials** section that appears, configure the Sticpay-specific settings: * In the **Interface version** dropdown, select **Live** or **Sandbox**, depending on whether you're setting up a production or test integration. * In the **API base URL** field, specify `https://api.sticpay.com`, which is used for both production and sandbox environments. * In the **Merchant email** field, enter the email address associated with your Sticpay merchant account. The email can be found in the **Account** section. * In the **API key** field, enter the API key generated in the **Sticpay API** section of your account. Click **Save** to create the connection. The **Sticpay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via Sticpay, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through Sticpay [#add-a-deposit-method-through-sticpay] To add and set up a method for making deposits through Sticpay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through Sticpay will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Sticpay**. * In the **Connection** dropdown, select the previously configured [Sticpay connection for deposits](#configure-connections-to-sticpay). Skip the **Configuration** section, as no settings are required for the Sticpay deposit method. Click **Save** to create the deposit method. The **Sticpay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-sticpay` to display the [predefined icon](../../integrations/payment-systems) for the Sticpay deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process deposits in a specific currency, ensure it is added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Sticpay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Sticpay** deposit method is now configured in the B2CORE Back Office. ## Set up a webhook in your Sticpay account [#set-up-a-webhook-in-your-sticpay-account] To receive status updates for initiated deposits in B2CORE, you need to set up a notification webhook in your Sticpay account. ### Copy the webhook URL from the B2CORE Back Office [#copy-the-webhook-url-from-the-b2core-back-office] In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Find the configured **Sticpay** deposit method and click **Edit** to enter the method details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Add the webhook URL to your Sticpay account [#add-the-webhook-url-to-your-sticpay-account] In your Sticpay account, navigate to the **Sticpay API** section. Paste the copied webhook URL into the **Callback URL** field. Click **Save** to apply the changes. ## Add a withdrawal method through Sticpay [#add-a-withdrawal-method-through-sticpay] To add and set up a method for making withdrawals through Sticpay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through Sticpay will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **Sticpay**. * In the **Connection** dropdown, select the previously configured [Sticpay connection for withdrawals](#configure-connections-to-sticpay). Skip the **Configuration** section, as no settings are required for the Sticpay withdrawal method. Click **Save** to create the withdrawal method. The **Sticpay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-sticpay` to display the [predefined icon](../../integrations/payment-systems) for the Sticpay withdrawal method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. Sticpay applies a dynamic minimum withdrawal amount, equivalent to **1 USD** based on Sticpay's exchange rates. If a withdrawal is created below this minimum, the transaction will fail when processed on the Sticpay side, and the client won’t see the reason for the failure. To prevent this, specify a minimum amount for each currency (in conversion to USD) when adding it to the **PS Currencies** tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Sticpay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Sticpay** withdrawal method is now configured in the B2CORE Back Office. [TopChange Pay](https://www.topchange.net/) (TC Pay) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals in `USD`, `IRR`, `EUR`, `AED`, `TRY`, `CNY`, `RUB`, and `USDT`. Follow the instructions below to configure the TC Pay connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to TC Pay. Before proceeding with the instructions, you must have signed up for TC Pay and have an active account. You can consult the official [TC Pay documentation](https://topchange1.zendesk.com/) or contact their support in case you have any questions. ## Configure connections to TopChange Pay [#configure-connections-to-topchange-pay] If you plan to use TC Pay for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to TC Pay: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_TC_Pay` or `Withdrawals_TC_Pay`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **TC Pay**. In the **Credentials** section that appears, configure the TC Pay-specific settings: * In the **API base URL** field, specify `https://pg.topayment.net`. * In the **Merchant ID** field, enter the Merchant ID assigned to your account by TC Pay. * Generate a pair of RSA *private* and *public* keys using the **TC RSA Key Generator**. You can consult the official [TC Pay documentation](https://topchange1.zendesk.com/) or contact their support in case you have any questions. * In the **Private RSA key** field, specify the *private* key, and make sure to specify the corresponding *public* key in your TC Pay account. Click **Save** to create the connection. The **TC Pay** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via TC Pay, follow the same instruction to create a new connection for the other operation. ## Add a deposit method through TopChange Pay [#add-a-deposit-method-through-topchange-pay] To add and set up a method for making deposits through TC Pay: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through TC Pay will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **TC Pay**. * In the **Connection** dropdown, select the previously configured [TC Pay connection for deposits](#configure-connections-to-topchange-pay). In the **Configuration** section, fill in the **Terminal ID** associated with your TC Pay merchant account. This ensures that transactions are correctly routed and attributed to the appropriate payment terminal. Note that the allowed currency is determined by the specified Terminal ID. Click **Save** to create the deposit method. The **TC Pay** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the deposit method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process deposits in a specific currency, ensure it is added on this tab. For TC Pay, each deposit method can support only one currency under the **PS Currencies** tab. Therefore, if you want to allow your clients to deposit in all supported currencies (`USD`, `IRR`, `EUR`, `AED`, `TRY`, `CNY`, `RUB`, and `USDT`), you must create eight separate deposit methods — one for each currency, corresponding to the specified **Terminal ID**. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). TC Pay deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **TC Pay** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through TC Pay [#add-a-withdrawal-method-through-tc-pay] To add and set up a method for making withdrawals through TC Pay: In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Withdrawals through TC Pay will be available from accounts denominated in the selected currencies. * In the **Driver** dropdown, select **TC Pay**. * In the **Connection** dropdown, select the previously configured [TC Pay connection for withdrawals](#configure-connections-to-topchange-pay). In the **Configuration** section, fill in the **Terminal ID** associated with your TC Pay merchant account. This ensures that transactions are correctly routed and attributed to the appropriate payment terminal. Note that the allowed currency is determined by the specified Terminal ID. Click **Save** to create the withdrawal method. The **TC Pay** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currency. To enable the method to process withdrawals in a specific currency, ensure it is added on this tab. For TC Pay, each withdrawal method can support only one currency under the **PS Currencies** tab. Therefore, if you want to allow your clients to withdraw in all supported currencies (`USD`, `IRR`, `EUR`, `AED`, `TRY`, `CNY`, `RUB`, and `USDT`), you must create eight separate withdrawal methods — one for each currency, corresponding to the specified **Terminal ID**. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). TC Pay withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **TC Pay** withdrawal method is now configured in the B2CORE Back Office. [UniPayment](https://unipayment.io/en/) can be connected to B2CORE through PSS, with support for deposits via bank cards, processed in `EUR`, `GBP`, and `USD`. Follow the instructions below to configure the UniPayment connection and set up the deposit method in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to UniPayment. Before proceeding with the instructions, you must have signed up for UniPayment and have an active account. You can consult the official [UniPayment Help Center](https://help.unipayment.io/en/) or contact their support in case you have any questions. ## Configure a connection to UniPayment [#configure-a-connection-to-unipayment] To configure a connection to UniPayment for making deposits: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_UniPayment`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **PaymentSystemDeposit**. In the **Driver** dropdown that appears, select **UniPayment**. In the **Credentials** section that appears, configure the UniPayment-specific settings: * In the **API base URL** field, specify: * `https://api.unipayment.io/` — for the production environment * `https://sandbox-api.unipayment.io/` — for the sandbox testing environment * In the **Client ID** field, enter the client identifier generated in your UniPayment account. * In the **Client secret** field, enter the secret key associated with your UniPayment client. To generate both your client ID and secret, sign in to your UniPayment account, click the profile icon and select **API Management**. Click **Save** to create the connection. The **UniPayment** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. ## Add a deposit method through UniPayment [#add-a-deposit-method-through-unipayment] To add and set up a method for making deposits through UniPayment: In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select one or more currencies. Deposits through UniPayment will be available to accounts denominated in the selected currencies. * In the **Driver** dropdown, select **UniPayment**. * In the **Connection** dropdown, select the previously configured [UniPayment connection](#configure-a-connection-to-unipayment). In the **Configuration** section, fill in the following fields: * In the **Application ID** field, enter the identifier of the app created in your UniPayment account. * In the **Payment method type** dropdown, select **Card**. App in UniPayment Click **Save** to create the deposit method. The **UniPayment** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify `paymethod-unipayment` to display the [predefined icon](../../integrations/payment-systems) for the UniPayment deposit method in the B2CORE UI. To use a custom icon, specify the URL of the image to be displayed. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add the needed currencies, such as `EUR`, `GBP`, and `USD`. Deposits through UniPayment will be processed in the currencies added on this tab. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). UniPayment deposit method — Settings tab Click **Save** to apply the changes. The **UniPayment** deposit method is now configured in the B2CORE Back Office. [Visionpay (HILZI)](https://visionpay.com/) can be connected to B2CORE through [PSS](../../integrations/payment-systems#payment-system-service-pss), with support for deposits and withdrawals processed in `USD` via the Whish Money app. Follow the instructions below to configure the Visionpay (HILZI) connections and set up the deposit and withdrawal methods in the B2CORE Back Office. These instructions correspond to the [General procedure](how-to-add-deposit-and-withdrawal-methods-through-pss) for adding methods for PSS-supported payment systems, but include details specific to Visionpay. Before proceeding with the instructions, you must have signed up for Visionpay and have an active account. All the details required for configuring connections to Visionpay, including the API base URL and credentials, must be requested from the Visionpay support. ## Configure connections to Visionpay (HILZI) [#configure-connections-to-visionpay-hilzi] If you plan to use Visionpay (HILZI) for both deposits and withdrawals, you must configure two separate connections: one for deposits and another for withdrawals. To configure a connection to Visionpay (HILZI): In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores (for example, `Deposits_Hilzi` or `Withdrawals_Hilzi`). * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select: * **PaymentSystemDeposit** — to add a connection that will be used for a deposit method. * **PaymentSystemWithdrawal** — to add a connection that will be used for a withdrawal method. In the **Driver** dropdown that appears, select **Hilzi**. In the **Credentials** section that appears, configure the Visionpay-specific settings: * In the **API base URL** field, specify the base URL provided by Visionpay for your integration environment. * In the **Login** and **Password** field, enter the credentials provided by Visionpay. You need to request the **API base URL** and credentials from the Visionpay support. Click **Save** to create the connection. The **Visionpay (HILZI)** connection will appear in the list of external connections. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** column), click the **Edit** button to open the connection details and set the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. If you need to support both deposits and withdrawals via Visionpay (HILZI), follow the same instruction to create a new connection for the other operation. ## Add a deposit method through Visionpay (HILZI) [#add-a-deposit-method-through-visionpay-hilzi] To add and set up a method for making deposits through Visionpay (HILZI): In the B2CORE Back Office, navigate to **System** > **Deposit system** > **Deposit methods**. Click **+Create** in the upper-right page corner. On the **Create a deposit method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemDeposit**. After selecting **PaymentSystemDeposit**, the following fields appear: * In the **Available account currencies** dropdown, select `USD`. * In the **Driver** dropdown, select **Hilzi**. * In the **Connection** dropdown, select the previously configured [Visionpay (HILZI) connection for deposits](#configure-connections-to-visionpay-hilzi). Skip the **Configuration** section, as no settings are required for the deposit method. Click **Save** to create the deposit method. The **Visionpay (HILZI)** deposit method will appear in the list of deposit methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the deposit method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USD`, the only supported currency for processing deposits. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Visionpay (HILZI) deposit method — Settings tab Click **Test configuration** to validate the connection settings of the deposit method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Visionpay (HILZI)** deposit method is now configured in the B2CORE Back Office. ## Add a withdrawal method through Visionpay (HILZI) [#add-a-withdrawal-method-through-visionpay-hilzi] To add and set up a method for making withdrawals through Visionpay (HILZI): In the B2CORE Back Office, navigate to **System** > **Payout system** > **Payout methods**. Click **+Create** in the upper-right page corner. On the **Create a payout method** page, fill in the following fields: * In the **Name** field, enter a name for the method. The name must be unique and may only contain Latin letters, numbers, dashes, and underscores. * In the **Caption** field, enter a caption for the method. This caption will be assigned to the method in the Back Office and will be visible to clients in the B2CORE UI. * In the **Provider** dropdown, select **PaymentSystemWithdrawal**. After selecting **PaymentSystemWithdrawal**, the following fields appear: * In the **Available account currencies** dropdown, select `USD`. * In the **Driver** dropdown, select **Hilzi**. * In the **Connection** dropdown, select the previously configured [Visionpay (HILZI) connection for withdrawals](#configure-connections-to-visionpay-hilzi). Skip the **Configuration** section, as no settings are required for the withdrawal method. Click **Save** to create the withdrawal method. The **Visionpay (HILZI)** withdrawal method will appear in the list of withdrawal methods. Click **Edit** to enter the method details and complete the following fields: * On the **Settings** tab, use the **Group** dropdown to select one or more groups where the method should be included. * In the **Icon** field, specify the URL of an image that will be displayed as the icon for the withdrawal method in the B2CORE UI. * Check the method status. If the method is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. * On the **PS Currencies** tab, add `USD`, the only supported currency for processing withdrawals. * If needed, configure commissions for the method on the **Commissions** tab (for details, refer to [How to configure commissions for deposit and withdrawal methods](how-to-configure-commissions-for-deposit-and-withdrawal-methods)). Visionpay (HILZI) withdrawal method — Settings tab Click **Test configuration** to validate the connection settings of the withdrawal method. The test result will be displayed on the page. After successfully validating the configuration, click **Save**. The **Visionpay (HILZI)** withdrawal method is now configured in the B2CORE Back Office. ## Set up webhooks in Visionpay (HILZI) [#set-up-webhooks-in-visionpay-hilzi] To receive status updates for deposits and withdrawals in B2CORE, notification webhooks must be set up on the side of Visionpay. ### Copy webhook URLs from the B2CORE Back Office [#copy-webhook-urls-from-the-b2core-back-office] You will need separate webhook URLs for both deposit and withdrawal methods. In the B2CORE Back Office, navigate to: * **System** > **Deposit system** > **Deposit methods** * **System** > **Payout system** > **Payout methods** Find the configured Visionpay (HILZI) deposit or withdrawal method and click **Edit** to open its details. Go to the **Webhooks** tab. Copy the URL displayed in the **Notification URL** field. ### Provide URLs to Visionpay [#provide-urls-to-visionpay] Send the copied webhook URLs (for both deposits and withdrawals) to the Visionpay support for configuration on their side. You can restrict the use of deposit and withdrawal methods based on **verification level**, **country**, or **client type**. Additionally, you can apply a combination of these restrictions to fine-tune access. ## How to restrict the use by verification level [#how-to-restrict-the-use-by-verification-level] You can restrict the use of deposit or withdrawal methods so that they can only be used by clients who have achieved specific [verification levels](../../back-office-guide/verification/levels) (for example, due to regulator requirements). To restrict the use of a deposit or withdrawal method by verification level: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Select the method and click the **Edit** button in the method row. Click **Actions** in the upper-right page corner, and then select **Verification level restrictions** in the dropdown. In the **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option forbids the use of the method for selected verification levels. * **Allow only** — this option allows the use of the method only for selected verification levels. * In the **Rules** dropdown, select one or several verification levels. Click **Save** to apply the changes. ## How to restrict the use by country [#how-to-restrict-the-use-by-country] You can restrict the use of deposit or withdrawal methods so that they can only be used by clients from specific countries. To restrict the use of a deposit or withdrawal method by country: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Select the method and click the **Edit** button in the method row. Click **Actions** in the upper-right page corner, and then select **Country restrictions** in the dropdown. In the **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option forbids the use of the method for selected countries. * **Allow only** — this option allows the use of the method only for selected countries. * In the **Rules** dropdown, select one or several countries. Click **Save** to apply the changes. ## How to restrict the use by client type [#how-to-restrict-the-use-by-client-type] You can restrict the use of deposit or withdrawal methods so that they can only be used by clients belonging to a specific [type](../../back-office-guide/clients/types), such as *individual* or *corporate*. To restrict the use of a deposit or withdrawal method by client type: Navigate to **System** > **Deposit system** > **Deposit methods** or\ to **System** > **Payout system** > **Payout methods**. Select the method and click the **Edit** button in the method row. Click **Actions** in the upper-right page corner, and then select **Client type restrictions** in the dropdown. In the **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option forbids the use of the method for selected client types. * **Allow only** — this option allows the use of the method only for selected client types. * In the **Rules** dropdown, select one or several client types. Click **Save** to apply the changes. To create a wallet: Navigate to **Products** > **Products**. Click +**Create**, and then select **eWallet** in the dropdown. Fill out the form: * The **Platform** field displays **eWallet**. * In the **Platform Group** dropdown, select **eWallet**. * In the **Currency** dropdown, select one or more currencies that you want to enable for the wallet. * In the **Name** field, enter the wallet name that will be displayed on the [Products](../../back-office-guide/products/products) page * In the **Group** dropdown, select a [group](../../back-office-guide/products/groups). The wallet will be displayed in the selected group in the B2CORE UI. * In the **Factory** dropdown, select `1`, as wallets can't be denominated in currency subunits. Only standard currency denominations are allowed for wallets. * In the **Type** dropdown, select **Personal**. Click **Save**. Fill out the details: * Set the **Caption**, which will be displayed in the B2CORE UI. Set localizations if needed. * Set **Status** to **Enabled**. * Set **Group rights** to **eWallet** or select the **Rights** if group rights were not configured. * Set **Max accounts** to **1**. * Set an external **Link** to display the available currencies or other information. This link appears in the B2CORE UI as the `i` icon. * Set **Autocreation on login** to **Yes** to make this wallet available to each client upon initial sign-in to the B2CORE UI. Click **Save** to apply the changes. You can restrict access to a product so that it can only be used by clients who have achieved specific verification levels (for example, due to regulator requirements). Verification levels must be already created and configured (for details, refer to [Manage verification options](../manage-verification-options/)). Navigate to **Products** > **Products**. Choose a product the use of which you want to restrict, and click the **Edit** button located in the product row. Click **Actions** in the upper-right page corner, and then select **Verification level restrictions** in the dropdown. In the displayed **Restrictions** popup, fill in the following information: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Deny only** — this option forbids the use of the product for selected verification levels. * **Allow only** — this option allows the use of the product only for selected verification levels. * In the **Rules** dropdown, select one or several verification levels. Click **Save** to apply the changes. To view all interest payments made to all clients, go to [Finance > Transactions](../../back-office-guide/finance/transactions) and filter the **Type** column by **Savings Payment**. The payments in the **Done** status are listed in the **Transactions**. To view interest payment details for a client in a specific savings program: Navigate to **Savings** > **Plans**. Click view-button displayed next to the plan for which you want to review interest payment details. In the plan details, go to the **Payments** section: * For `Fixed` strategies, the payments list includes scheduled payments as well as payments that have already been made to the client’s wallet. From this list, you can calculate the total amount of interest that the client will receive in the program. * For `Flexible` strategies, the list displays only payments made to a client. From this list, you can calculate the total amount of interest that has been paid. For each payment, you can view: * **Amount** – the payment amount. * **Due date** – for `Fixed` strategies, the date and time when the payment is scheduled to be made. For `Flexible` strategies, no scheduled payments are displayed. * **Status** — the payment status: * `Scheduled` — indicates that a payment is scheduled but hasn’t yet been made. * `Paid` — indicates that a payment has been made to a client. * `Cancelled` — indicates that a payment was cancelled because the client decided to withdraw the investment amount before the end of the plan length (for `Fixed` strategies) or before the end of the penalty period (for `Flexible` strategies). * `Paid date` – the date and time when the interest was paid to the client. Payment details in a Fixed savings planPayment details in a Fixed savings plan Enable one-click access to trading platform web terminals for your clients directly from the B2CORE UI and mobile apps for Android and iOS for a seamless trading experience. To enable clients to open web trading terminals from B2CORE UI and mobile app: In the Back Office, navigate to **Products** > **Platforms**. Select the platform and click the **Edit** button. On the **Edit platform** page, specify the URL of the web trading terminal for the selected platform in the **Web Terminal URL** field. Click **Save** to apply the changes. For the selected platform, the **Trade** button will appear on account cards in the B2CORE UI and mobile app, enabling clients to open the web terminal with a single click. For **cTrader**, the terminal will directly open the account from which the **Trade** button was clicked, eliminating the need for clients to search for the desired account. This instruction describes how to create a platform, product group, and products that are required for enabling B2TRADER functionalities via the the B2CORE Back Office. Before you start configuring the B2TRADER platform and product in the Back Office, make sure that a connection to B2TRADER has already been set up by your account manager who is assigned the permissions to manage external connections. ## How to create a platform for B2TRADER [#how-to-create-a-platform-for-b2trader] To create a platform for B2TRADER: Navigate to **Products** > **Platforms**. Click **Create** in the upper-right page corner, and then select **B2TraderBrokeragePlatform** in the dropdown. In the **Create platform** popup, fill in the following fields: * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office. * In the **Available connection providers** dropdown, select **B2TraderBrokeragePlatform**. * In the **Connection** dropdown, select the previously configured B2TRADER connection. Click **Save** to proceed. On the **Edit platform** page, specify the following settings: * In the **Short caption** field, you can optionally specify a short platform name. * Make sure that **No** is selected in the **Demo** dropdown. * In the **Status** dropdown, select **Enabled**. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. After the connection settings have been successfully validated, click **Save**. ## How to create a product group for B2TRADER [#how-to-create-a-product-group-for-b2trader] To create a product group for B2TRADER: Navigate to **Products** > **Groups**. Click **+Create** in the upper-right page corner. On the **Create group** page, fill in the following fields: * In the **Caption** field, enter a caption that you want to use for the group. This caption will be assigned to the product group in the Back Office and will be visible to clients in the B2CORE UI. * In the **Description** field, enter a group description. * In the **Type** dropdown, select **Default**. Click **Save** to create the product group. ## How to create a product for B2TRADER [#how-to-create-a-product-for-b2trader] To manage both live and demo accounts, as well as **Hedging** and **Netting** types, separate products must be created for B2TRADER in the B2CORE Back Office. To create a product for B2TRADER: Navigate to **Products** > **Products**. Click **Create** in the upper-right page corner, and then select the caption assigned to the previously configured [B2TRADER platform](#how-to-create-a-platform-for-b2trader) in the dropdown. In the **Create product** popup, fill in the following fields: * In the **Platform group** dropdown, select the appropriate group existing on the B2TRADER platform. * In the **Currency** dropdown, select the currency for the product. The available currency options in B2CORE depend on the settings of the selected platform group. * In the **Account type** dropdown, select **Hedging** or **Netting**. * In the **Name** field, enter a unique name for the product. * In the **Group** dropdown, select the previously created [product group](#how-to-create-a-product-group-for-b2trader) to include the product into that group. * In the **Type** dropdown, select: * **Trade** — if you create a product for managing live accounts * **Demo** — if you create a product for managing demo accounts Click **Save** to proceed. On the **Edit product** page, specify the following product settings: * In the **Name** field, you can modify the product name. The name must be unique. * In the **Caption** field, enter a caption for the product. This caption will be assigned to the product in the Back Office and will be visible to clients in the B2CORE UI. * In the **Default** leverage field, enter the default leverage ratio that will be assigned to accounts created automatically when the **Auto creation on login** option is triggered. * In the **Leverage** field, enter one or more leverage ratios that client can select when creating accounts via the B2CORE UI. * In the **Rights** and **Default account rights** dropdowns, select the required permissions that will be applied to the product (such as `Enabled`, `Deposit`, `Withdraw`, `Visible`, `Transfer deposit`, `Transfer withdraw`, and `Exchange`). * In the **Max accounts** field, enter an integer value to define the maximum number of accounts that clients can create when using this product. * To set no limit on the number of accounts, specify **-1**. * To forbid clients to create accounts, specify **0**. * In the **Mail** dropdown, select: * **Send** or **Default** — to automatically send email notifications to clients when new accounts are created, providing them with the necessary details to start trading. * **Don't send** — to disable email notifications about new accounts. * In the **Mail template** dropdown, select the email template `accountCreated` that will be used to send notifications about new accounts. * In the **Start amount** field, specify the amount that will be automatically deposited to *demo* accounts upon their creation. * In the **Auto creation on login** dropdown, select: * **Yes** – to automatically create accounts based on the product settings when clients first sign in to the B2CORE UI. * **No** – to create accounts based on this product manually. * In the **Agreement link** field, specify a link to the document to which clients must consent in order to open accounts via the B2CORE UI. * In the **Link info** field, specify a link to a resource with additional product information, which clients can access when creating accounts via the B2CORE UI. * On the **Currencies** tab, you can review the currency associated with the product and add more currencies if necessary. The available currency options are limited by the settings of the platform groups configured on the B2TRADER platform. * After configuring the product settings, activate it by selecting **Enabled** in the **Status** dropdown. Click **Save** to create the product. B2TRADER accounts can now be created based on the product via the Back Office or B2CORE UI. Any changes to product settings will directly impact how the product is displayed and functions for clients in the B2CORE UI. This instruction describes how to create platforms, product groups, and products that are required for enabling DXtrade via the Back Office. To manage live and demo trading accounts, you must configure two separate platforms and products. However, if both live and demo accounts are located on the same DXtrade platform in your infrastructure and are separated only by groups, it isn’t necessary to create two platforms. In this case, create one platform and two products — one for live accounts and one for demo accounts — in the B2CORE Back Office. Before you start configuring DXtrade platforms and products in the Back Office, make sure that a connection to DXtrade has already been set up by your account manager who is assigned the permissions to manage external connections. ## How to create a platform for DXtrade [#how-to-create-a-platform-for-dxtrade] If both live and demo accounts are located on the same DXtrade platform in your infrastructure, create a single platform in the B2CORE Back Office. If they are located on separate platforms, create two separate platforms for DXtrade. To create a platform for DXtrade: Navigate to **Products** > **Platforms**. Click the **Create** in the upper-right page corner, and then select **DXtrade** in the dropdown. * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office (such as **DXtrade Live** or **DXtrade Demo**). * In the **Available connection providers** dropdown, select **DXtrade**. * In the **Connection** dropdown, select **DXtrade**. Click **Save** to proceed. On the **Edit platform** page, specify the following settings: * In the **Short caption** field, you can optionally specify a short platform name. * If you configure a demo platform for DXtrade, select **Yes** in the **Demo** dropdown; otherwise, make sure that **No** is selected. * In the **Status** dropdown, select **Enabled**. * In the **Web Terminal URL**, optionally specify the URL of the web trading terminal for DXtrade. If specified, the **Trade** button will be displayed on account cards in the B2CORE UI, enabling clients to open the web terminal by clicking the button. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. After the connection settings have been successfully validated, click **Save**. ## How to create a product group for DXtrade [#how-to-create-a-product-group-for-dxtrade] To create a product group for DXtrade: Navigate to **Products** > **Groups**. Click **+Create** in the upper-right page corner. On the **Create group** page, fill in the following fields: * In the **Caption** field, enter a caption that you want to use for the group. * In the **Description** field, enter a group description. * In the **Type** dropdown, select **Default**. Click **Save** to create the product group. ## How to create a product for DXtrade [#how-to-create-a-product-for-dxtrade] To separate live and demo accounts, two products must be created in the B2CORE Back Office — one for live accounts and one for demo accounts. To create a product for DXtrade: Navigate to **Products** > **Products**. Click the **Create** in the upper-right page corner, and then select the previously created [DXtrade platform](#how-to-create-a-platform-for-dxtrade) in the dropdown. In the **Create product** popup, fill in the following fields: * In the **Platform Group** dropdown, select **Default**. * In the **Currency** dropdown, select one or more currencies that you want to enable for the product. * In the **Account number prefix** field, enter a prefix to be added to DXtrade account numbers. This helps distinguish, for example, live and demo accounts or accounts belonging to different brands within one DXtrade infrastructure. The maximum prefix length is 14 characters. The prefix is applied only to newly created accounts. Existing accounts remain unchanged. * Set up the following DXtrade-specific settings: **Auto Execution**, **Commissions**, **Financing**, **Limits**, **Margining**, **Spreads**, and **Trading**, which are used to customize trading conditions on the DXtrade platform. After the product is created, the DXtrade-specific settings can't be modified. * In the **Name** field, enter a name that you want to use for the product. * In the **Group** dropdown, select the previously created [product group](#how-to-create-a-product-group-for-dxtrade). * In the **Type** dropdown, select: * **Trade** — if you create a product for managing live accounts * **Demo** — if you create a product for managing demo accounts Click **Save** to proceed. On the **Edit product** page, specify the following product settings: * In the **Rights** and **Default account rights** dropdowns, select the required permissions that will be applied to the product (such as `Enabled`, `Visible`, `Trade enabled`, `Transfer deposit`, and `Transfer withdraw`). * In the **Max accounts** field, enter an integer value to define the maximum number of accounts that clients can create when using this product. * To set no limit on the number of accounts, specify **-1**. * To forbid clients to create accounts, specify **0**. * In the **Mail** dropdown, **Don't send** must be selected. Upon creating the first account, a client receives an email with the credentials for the trading terminal. No emails are sent when subsequent accounts are created. * In the **Start amount** field, specify the amount that will be automatically deposited to demo trading accounts upon their opening. * In the **Auto creation on login** dropdown, select either of the two values: * **Yes** — to automatically create trading accounts based on the product settings for all clients upon their first sign in to the B2CORE UI. * **No** — to create trading accounts manually. * In the **Status** dropdown, select **Enabled**. * If you want to enable additional currencies for the product, add them on the **Currencies** tab. You may also want to configure the other product settings available on the **Edit product** page. Click **Save** to create the product. All settings changes made on the **Edit product** page will directly impact how the product is displayed and functions in the B2CORE UI for clients. This instruction describes how to create a platform and product that are required for enabling Match-Trader via the Back Office, as well as how to create Match-Trader trading accounts for your clients. For managing live and demo trading accounts, it is required to configure two separate platforms and products. Before you start configuring Match-Trader platforms and products in the Back Office, make sure that a connection to Match-Trader has already been set up by your account manager who is assigned the permissions to manage external connections. ## How to create a platform for Match-Trader [#how-to-create-a-platform-for-match-trader] To create a platform for Match-Trader: Navigate to **Products** > **Platforms**. Click the **Create** in the upper-right page corner, and then select **MatchTrader** in the dropdown. In the **Create platform** popup, fill in the following fields: * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office (such as **MatchTrader** or **MatchTrader Demo**). * In the **Available connection providers** dropdown, select **MatchTrader**. * In the **Connection** dropdown, select **MatchTrader**. Click **Save** to proceed. On the **Edit platform** page, specify the following settings: * In the **Short caption** field, you can optionally specify a short platform name. * If you configure a demo platform for Match-Trader, select **Yes** in the **Demo** dropdown; otherwise, make sure that **No** is selected. * In the **Status** dropdown, select **Enabled**. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. After the connection settings have been successfully validated, click **Save**. ## How to create a product for Match-Trader [#how-to-create-a-product-for-match-trader] To create a product for Match-Trader: Navigate to **Products** > **Products**. Click **Create** in the upper-right page corner, and then select: * **MatchTrader** — if you create a product for managing live accounts * **MatchTrader Demo** — if you create a product for managing demo accounts In the **Create product** popup, fill in the following fields: * In the **Platform Group** dropdown, select **Fiat**. * In the **Currency** dropdown, select one or more currencies that you want to enable for the product. * In the **Name** field, enter a name that you want to use for the product. * In the **Group** dropdown, select the appropriate group that has been previously configured in **Products** > **Groups**. * In the **Type** dropdown, select: * **Trade** — if you create a product for managing live accounts * **Demo** — if you create a product for managing demo accounts Click **Save** to proceed. On the **Edit product** page, specify the following product settings: * In the **Rights** and **Default account rights** dropdowns, select the required permissions that will be applied to the product (such as `Enabled`, `Visible`, `Trade enabled`, `Transfer deposit`, and `Transfer withdraw`). * In the **Max accounts** field, enter an integer value to define the maximum number of accounts that clients can create when using this product. * To set no limit on the number of accounts, specify **-1**. * To forbid clients to create accounts, specify **0**. * In the **Start amount** field, specify the amount that will be automatically deposited to demo trading accounts upon their opening. * In the **Auto creation on login** dropdown, select either of the two values: * **Yes** — to automatically create trading accounts based on the product settings for all clients upon their first sign in to the B2CORE UI. * **No** — to create trading accounts manually. * In the **Status** dropdown, select **Enabled**. * If you want to enable additional currencies for the product, add them on the **Currencies** tab. You may also want to configure the other product settings available on the **Edit product** page. Click **Save** to create the product. All settings changes made on the **Edit product** page will directly impact how the product is displayed and functions in the B2CORE UI for clients. ## How to create Match-Trader accounts for clients [#how-to-create-match-trader-accounts-for-clients] To create a Match-Trade trading account for a client via the Back Office: Navigate to **Clients** > **Accounts**. Click **+Create** in the upper-right page corner, and then select a client for whom you want to create the account. On the **Create account** page, specify the following settings: * In the **Product group** dropdown, select **Fiat**. * In the **Product** dropdown, select: * **MatchTrader** — to create a live trading account. * **MatchTrader Demo** — to create a demo account. * In the **Currency** dropdown, select a currency in which the account must be denominated. * In the **Leverage** dropdown, select a leverage ratio to be assigned to the account. To create an account in B2CORE using the trading account that already exists on the Match-Trade platform, select the option **Create account that already exists on external platform**, and then specify the existing Match-Trader account number in the **External account number** field. Click **Save** to create the account. The created Match-Trader account is available to the client upon navigating to **Platforms** > **MatchTrader** in the B2CORE UI. To start trading on the Match-Trader platform, deposit or transfer funds to the newly created Match-Trader account. This can be done by the admin via the Back Office (for details, refer to [How to create a deposit](../manage-finances/how-to-create-a-deposit), [How to create a transfer](../manage-finances/how-to-create-a-transfer), and [How to create a payout](../manage-finances/how-to-create-a-payout)) or by a client via the B2CORE UI. ## How to archive Match-Trader accounts [#how-to-archive-match-trader-accounts] Match-Trader trading accounts can be archived via the Back Office. Only the accounts with zero balances can be archived. If there are available funds on a trading account, transfer them to another client account denominated in the same currency as an archived account. To archive a Match-Trader account: Navigate to **Clients** > **Accounts**. Select a Match-Trader account that you want to archive and click the **Edit** button located in the account row. On the **Edit account** page, click the **Actions** button, and then select **Archive**. Click **Save** to apply the changes. The account has been marked with **A**, indicating that it is archived and hidden from the client in the B2CORE UI. The archived accounts are unavailable for trading and depositing. The archived accounts can be restored so that clients can use them again. To do this, click the **Actions** button, and then select **Unarchive**. This instruction describes how to configure platforms and products required for enabling OneZero and PrimeXM via the Back Office, as well as how to create OneZero and PrimeXM accounts for your clients. Before you start configuring OneZero or PrimeXM platforms and products in the Back Office, make sure that connections to these platforms have already been set up by your account manager who is assigned the permissions to manage external connections. ## How to create a platform for OneZero [#how-to-create-a-platform-for-onezero] To create a platform for OneZero: Navigate to **Products** > **Platforms**. Click **Create** in the upper-right corner of the page, and then select **OneZero** in the dropdown. In the **Create platform** popup, fill in the following fields: * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office. Click **Save** to proceed. On the **Edit connection** page, specify the following settings: * In the **Service location** field, specify `https://onezero.b2broker.net/api/rest/`. * In the **Token endpoint** field, specify `https://onezero.b2broker.net/api/token`. * In the **Service user** and **Service password** fields, enter the login and password that are used for the service connection. * In the **REST Api version** field, specify **1.01**. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. In the **Status** dropdown, select **Enabled**. Click **Save** to create the platform. ## How to create a platform for PrimeXM [#how-to-create-a-platform-for-primexm] To create a platform for PrimeXM: Navigate to **Products** > **Platforms**. Click **Create** in the upper-right page corner, and then select **PrimeXM** in the dropdown. In the **Create platform** window, fill in the following fields: * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office. Click **Save** to proceed. On the **Edit connection** page, specify the following settings: * In the **Pxm username** and **Pxm password** fields, specify the login and password that are used to connect to the PrimeXM server. * In the **Rabbitmq host** field, specify `xcore-api-ld4.primexm.com`. * In the **Rabbitmq port** field, specify **5673**. * In the **Rabbitmq user** and **Rabbitmq password** fields, specify the login and password that are used to connect to RabbitMQ. * In the **Rabbitmq vhost** field, specify `/primebrokerage_uk`. * In the **Rabbitmq exchange** field, specify `XServerAPI`. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. In the **Status** dropdown, select **Enabled**. Click **Save** to create the platform. ## How to create products for OneZero and PrimeXM [#how-to-create-products-for-onezero-and-primexm] To create products for OneZero and PrimeXM: Navigate to **Products** > **Products**. Click **Create** in the upper-right page corner, and then select either **OneZero** or **PrimeXM** in the dropdown. In the **Create product** popup, fill in the following fields: * In the **Platform Group** dropdown, select **Group**. * In the **Currency** dropdown, select one or more currencies that you want to enable for the product. * In the **Name** field, enter the name that you want to use for the product. * In the **Group** dropdown, select the appropriate group that have been previously configured in **Products** > **Groups**. * In the **Type** dropdown list, select **External**. Click **Save** to proceed. On the **Edit product** page, specify the appropriate settings for your product: * In the **Rights** and **Default account rights** dropdowns, select the required permissions that you want to apply to the product (such as `Enabled`, `Deposit`, `Withdraw`, `Visible`, `Transfer deposit`, `Transfer withdraw`, and `Exchange`). * In the **Status** dropdown, select **Enabled**. * If you want to enable additional currencies for the product, add them on the **Currencies** tab. You may also want to configure the other product settings available on the **Edit product** page. Click **Save** to create the product. All settings changes made on the **Edit product** page will directly impact how the product is displayed and functions in the B2CORE UI for clients. ## How to create OneZero and PrimeXM accounts for clients [#how-to-create-onezero-and-primexm-accounts-for-clients] OneZero and PrimeXM accounts are created in B2CORE based on the accounts that have already been registered on the corresponding external platforms. To create a OneZero or PrimeXM account for a client via the Back Office: Navigate to **Clients** > **General**. From the clients list, select a client for whom you want to create a OneZero or PrimeXM account, and then click **Edit**. Go to the **Accounts** tab, and then click **+Create** in the upper-right page corner. On the **Creating account** page, fill in the following fields: * In the **Product group** dropdown, select **External**. * In the **Product** dropdown, select the product previously created for OneZero or PrimeXM. * In the **Currency** dropdown, select the corresponding currency. * In the **Leverage** dropdown, select the leverage ratio. * Enable the option to **Create account that exists on external platform**. * In the **External account number** field, specify the ID of an account that has been already registered on the corresponding external platform. Click **Save** to create the account. After the account has been created, it is available to the client upon navigating to **Platforms** > **OZ/PXM** via the B2CORE UI. This instruction describes how to create a connection, platforms and products that are required for enabling TradeLocker functionalities via the the B2CORE Back Office. For managing live and demo trading accounts, you need to create one connection to TradeLocker, but configure two separate platforms and products. After creating user groups in TradeLocker, they aren't automatically available to systems where TradeLocker is integrated. To make them visible, please contact TradeLocker support with a corresponding request. ## How to configure a connection to TradeLocker [#how-to-configure-a-connection-to-tradelocker] To configure a connection to TradeLocker in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **TradeLocker**. Click **Save** to create the connection. The **TradeLocker** connection will appear in the list of external connections. Click **Edit** to enter the connection details and complete the following fields: * In the **API Base URL** field, specify `https://api.tradelocker.com`. * In the **API Key** field, specify your API key provided by TradeLocker. This key is used to authenticate requests to the API. * The **Trading Terminals** section displays the URLs of the TradeLocker live and demo terminals. In the B2CORE UI, when clients click the **Trade** button on the account card, they are redirected to the corresponding terminal, enabling them to start trading in one click. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. ## How to create a platform for TradeLocker [#how-to-create-a-platform-for-tradelocker] To manage live and demo trading accounts, create two separate platforms for TradeLocker in the B2CORE Back Office. To create a platform for TradeLocker: Navigate to **Products** > **Platforms**. Click **Create** in the upper-right page corner, and then select **TradeLocker** in the dropdown. In the **Create platform** popup, fill in the following fields: * In the **Name** field, enter a name that you want to use for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office (such as **TradeLocker** or **TradeLocker Demo**). * In the **Available connection providers** dropdown, select **TradeLocker**. * In the **Connection** dropdown, select the previously configured [TradeLocker connection](#configure-a-connection-to-tradelocker). Click **Save** to proceed. On the **Edit platform** page, specify the following settings: * In the **Short caption** field, you can optionally specify a short platform name. * If you configure a demo platform for TradeLocker, select **Yes** in the **Demo** dropdown; otherwise, make sure that **No** is selected. * In the **Status** dropdown, select **Enabled**. * In the **Settings** section, specify the name of your TradeLocker server in the **Trading Server name** field. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. After the connection settings have been successfully validated, click **Save**. ## How to create a product group for TradeLocker [#how-to-create-a-product-group-for-tradelocker] To create a product group for TradeLocker in the B2CORE Back Office: Navigate to **Products** > **Groups**. Click **+Create** in the upper-right page corner. On the **Create group** page, fill in the following fields: * In the **Caption** field, enter a caption for the product group. This caption will be assigned to the product group in the Back Office and will be visible to clients in the B2CORE UI. * In the **Description** field, enter a group description. * In the **Type** dropdown, select **Default**. Click **Save** to create the product group. ## How to create a product for TradeLocker [#how-to-create-a-product-for-tradelocker] To manage live and demo trading accounts, create two separate products for TradeLocker in the B2CORE Back Office. To create a product for TradeLocker: Navigate to **Products** > **Products**. Click the **Create** in the upper-right page corner, and then select: * **TradeLocker** — if you create a product for managing live accounts * **TradeLocker Demo** — if you create a product for managing demo accounts In the **Create product** popup, fill in the following fields: * In the **Platform Group** dropdown, select the appropriate group existing on your TradeLocker server. TradeLocker accounts created based on this product via B2CORE will be assigned to this group. * In the **Currency** dropdown, select one or more currencies that you want to enable for the product. * In the **Name** field, enter a name that you want to use for the product. * In the **Group** dropdown, select the previously configured [TradeLocker product group](#how-to-create-a-product-group-for-tradelocker). * In the **Type** dropdown, select: * **Trade** — if you create a product for managing live accounts * **Demo** — if you create a product for managing demo accounts Click **Save** to proceed. On the **Edit product** page, specify the following product settings: * In the **Name** field, you can modify the product name. The name must be unique. * In the **Caption** field, enter a caption for the product. This caption will be assigned to the product in the Back Office and will be visible to clients in the B2CORE UI. * Leave the **Leverage** and **Default leverage** fields empty. The leverage parameter isn't applied directly to accounts on the TradeLocker platform. Instead, leverage is configured per instrument within the platform. * In the **Rights** and **Default account rights** dropdowns, select the required permissions that will be applied to the product (such as `Enabled`, `Visible`, `Trade enabled`, `Transfer deposit`, and `Transfer withdraw`). The default rights will be assigned to TradeLocker accounts created automatically when the **Auto creation on login** option is triggered. For a list of possible permissions, refer to [Product permissions](../../back-office-guide/references/product-permissions). * In the **Max accounts** field, enter an integer value to define the maximum number of TradeLocker accounts that a client can create for each currency added to the product. For example, if `USD` and `EUR` are added as currencies to the product and the **Max accounts** option is set to `1`, the client can create one account in `USD` and one account in `EUR` based on this product. * To set no limit on the number of accounts, specify **-1**. * To forbid clients to create accounts, specify **0**. * In the **Mail** dropdown, select **Don't send**. This option is required to ensure that email notifications in B2CORE work correctly using the designated `TradeLockerUserCreated` email template. * In the **Start amount** field, specify the amount that will be automatically deposited to *demo* TradeLocker accounts upon their creation. * In the **Min deposit amount (USD)** field, you can optionally specify the minimum deposit, in USD, required to create a TradeLocker account based on this product. * In the **Auto creation on login** dropdown, select: * **Yes** — to automatically create TradeLocker accounts based on the product settings when clients first sign in to the B2CORE UI. * **No** — to create TradeLocker accounts based on this product manually. * In the **Agreement link** field, specify a link to the document to which clients must consent in order to open TradeLocker accounts via the B2CORE UI. * In the **Link info** field, specify a link to a resource with additional product information, which clients can access when creating TradeLocker accounts via the B2CORE UI. * On the **Currencies** tab, you can review the currency associated with the product and add more currencies if necessary. * After configuring the product settings, activate it by selecting **Enabled** in the **Status** dropdown. Click **Save** to create the product. TradeLocker accounts can now be created based on the product via the Back Office or B2CORE UI. Any changes to product settings will directly impact how the product is displayed and functions for clients in the B2CORE UI. This instruction explains how to create platforms, product groups, and products that are required for enabling MT4 and MT5 functionalities via the B2CORE Back Office. For managing live and demo trading accounts on both MT4 and MT5, it's required to configure separate platforms, product groups, and products for each in the Back Office. No external connections are required for MT platforms. Connections to these platforms are established within B2CORE via the internal WEBAPI service. All credentials needed to connect to the respective MT platform are configured in **Products** > **Platforms**. ## How to create a platform for MT [#how-to-create-a-platform-for-mt] To create a platform for MT: Navigate to **Products** > **Platforms**. Click **Create** in the upper-right page corner, and then select **MetaTrader 4** or **MetaTrader 5** in the dropdown. In the **Create platform** popup, fill in the following fields: * In the **Name** field, enter a unique name for the platform. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office. * In the **Income transfer request** dropdown, select: * **Yes** — to require admin approval and create requests for transfers to MT accounts via the B2CORE UI. * **No** — to process transfers to MT accounts via the B2CORE UI without requests. * In the **Outcome transfer request** dropdown, select: * **Yes** — to require admin approval and create requests for transfers from MT accounts via the B2CORE UI. * **No** — to process transfers from MT accounts via the B2CORE UI without requests. Click **Save** to proceed. On the **Edit platform** page, specify the following settings: * In the **Short caption** field, you can optionally specify a short platform caption. * If you configure a demo platform for MT, select **Yes** in the **Demo** dropdown; otherwise, make sure that **No** is selected. * In the **Status** dropdown, select **Enabled**. In the **Settings** section, specify the following connection setting: ### MetaTrader connection [#metatrader-connection] * In the **Host** field, specify the IP address and port number for accessing the MT server. * In the **Login** field, enter the login for accessing the MT Manager. * In the **Password** field, enter the password for accessing the MT Manager. ### WEBAPI connection [#webapi-connection] The WEBAPI connection settings are provided by your account manager. * In the **Host** field, specify the domain name and port number for accessing WEBAPI. * In the **Access token** field, specify the token used to access WEBAPI. ### Settings [#settings] In this section, specify the additional settings: * In the **Max inactivity days** field, enter the number of days after which MT accounts will be archived if no activity is detected during that period. * In the **Web Terminal URL** field, specify the URL of the web trading terminal. When specified, the **Trade** button will appear on account cards for the respective platform in the B2CORE UI and mobile app, enabling clients to navigate to trading with a single click. * In the **Use reporting on the platform** dropdown, select: * **Enabled** — to activate the **Send reports** option for MT accounts created via B2CORE. * **Disabled** — to keep the **Send reports** option disabled for MT accounts created via B2CORE. Click **Test connection** to validate the connection settings. The checkmark displayed on the **Test connection** button indicates that the connection has been configured properly. After the connection settings have been successfully validated, click **Save**. ## How to create a product group for MT [#how-to-create-a-product-group-for-mt] To create a product group for MT: Navigate to **Products** > **Groups**. Click **+Create** in the upper-right page corner. On the **Create group** page, fill in the following fields: * In the **Caption** field, enter a caption for the product group. This caption will be assigned to the product group in the Back Office and will be visible to clients in the B2CORE UI. * In the **Description** field, enter a group description. * In the **Type** dropdown, select **Default**. Click **Save** to create the product group. ## How to create a product for MT [#how-to-create-a-product-for-mt] To create a product for MT: Navigate to **Products** > **Products**. Click the **Create** in the upper-right page corner, and then select: * **MetaTrader 5 Live** — to create a product for managing live accounts on MT5 * **MetaTrader 5 Demo** — to create a product for managing demo accounts on MT5 * **MetaTrader 4 Live** — to create a product for managing live accounts on MT4 * **MetaTrader 4 Demo** — to create a product for managing demo accounts on MT4 In the **Create product** popup, fill in the following fields: * In the **Platform Group** dropdown, select the appropriate group existing in your MT manager. MT accounts created based on this product via B2CORE will be assigned to this group. * In the **Currency** dropdown, select the currency for the product. The available currency options in B2CORE depend on the settings of the selected platform group. For example, if a platform group in the MT manager is configured for `USD`, then `USD` will be the default currency option for MT accounts created with this product via B2CORE. * In the **Name** field, enter a unique name for the product. * In the **Group** dropdown, select the previously created [product group](#how-to-create-a-product-group-for-mt) to include the product into that group. * In the **Factory** dropdown, select `100` to denominate MT accounts created with this product in currency subunits (for example, cents); otherwise, leave `1`. * In the **Type** dropdown, select: * **Trade** — if you create a product for managing live accounts * **Demo** — if you create a product for managing demo accounts Click **Save** to proceed. On the **Edit product** page, specify the following product settings: * In the **Name** field, you can modify the product name. The name must be unique. * In the **Caption** field, enter a caption for the product. This caption will be assigned to the product in the Back Office and will be visible to clients in the B2CORE UI. * In the **Default leverage** field, enter the default leverage ratio that will be assigned to MT accounts created automatically when the **Auto creation on login** option is triggered. * In the **Leverage** field, enter one or more leverage ratios that client can select when creating MT accounts via the B2CORE UI. * In the **Rights** and **Default account rights** dropdowns, select the required permissions that will be applied to the product (such as `Enabled`, `Visible`, `Trade enabled`, `Transfer deposit`, and `Transfer withdraw`). The default rights will be assigned to MT accounts created automatically when the **Auto creation on login** option is triggered. For a list of possible permissions, refer to [Product permissions](../../back-office-guide/references/product-permissions). * In the **Max accounts** field, enter an integer value to define the maximum number of MT accounts that a client can create for each currency added to the product. For example, if `USD` and `EUR` are added as currencies to the product and the **Max accounts** option is set to `1`, the client can create one account in `USD` and one account in `EUR` based on this product. * To set no limit on the number of accounts, specify **-1**. * To forbid clients to create accounts, specify **0**. * In the **Mail** dropdown, select: * **Send** or **Default** — to automatically send email notifications to clients when new MT accounts are created, providing them with the necessary details to start trading. * **Don't send** — to disable email notifications about new MT accounts. * In the **Mail template** dropdown, select the email template that will be used to send notifications about new MT accounts. * In the **Start amount** field, specify the amount that will be automatically deposited to *demo* MT accounts upon their creation. * In the **Min deposit amount (USD)** field, you can optionally specify the minimum deposit, in USD, required to create an MT account based on this product. * In the **Auto creation on login** dropdown, select: * **Yes** — to automatically create MT accounts based on the product settings when clients first sign in to the B2CORE UI. * **No** — to create MT accounts based on this product manually. * The **First transfer activation** option is only applicable to MT5. In the dropdown, select: * **Yes** — to create MT5 accounts without the `Trade enabled` permission. This permission will be assigned to the account upon the client's first successful transfer. * **No** — to create MT5 accounts with the `Trade enabled` permission, immediately active for trading. * In the **Agreement link** field, specify a link to the document to which clients must consent in order to open MT accounts via the B2CORE UI. * In the **Link info** field, specify a link to a resource with additional product information, which clients can access when creating MT accounts via the B2CORE UI. * On the **Currencies** tab, you can review the currency associated with the product and add more currencies if necessary. The available currency options are limited by the settings of the platform groups configured in the MT manager. * After configuring the product settings, activate it by selecting **Enabled** in the **Status** dropdown. Click **Save** to create the product. MT accounts related to the respective platform can now be created based on the product via the Back Office or B2CORE UI. Any changes to product settings will directly impact how the product is displayed and functions for clients in the B2CORE UI. If both MT4 and MT5 platforms are needed, follow the same instructions to configure the other platform. You can ask your clients to pass accreditation tests as part of your verification procedure. To enable a certain user group (usually, it is the “Admins” group) to create client accreditation tests, this user group should be assigned all the permissions related to the **Client Tests**, **Client Tests Answers** and **Client Tests Questions**. These permissions can be found under the **Verification** permission group (for details, refer to [How to add a user group and grant permissions](../manage-system-settings/how-to-add-a-user-group-and-grant-permissions)). To create a client accreditation test, do the following: Navigate to **Verification** > **Client tests**, and then click **+Create** in the upper-right corner of the page. In the **Create client test** window, fill in the following fields: * In the **Caption** field, specify a title for your test. This title will be displayed in the B2CORE UI. * In the **Details** field, specify a test’s description or any other helpful information that clients should know before they start passing the test. Such information will be displayed under the test’s title in the B2CORE UI. * From the **Visible** drop-down list, select either **Yes** or **No** to show or hide this test in the B2CORE UI. We recommend that you select **No** at this step and switch the test visibility setting to **Yes** after finishing adding questions and answers to your test. Click **Save** to create the test. To add questions and answer choices to your test, click the **Edit** button located in the test row. On the **Edit client test** page, switch to the **Questions** tab, and then click **+Create** in the upper-right corner of the page. In the **Create client test questions** window that is displayed, fill in the following fields: * In the **Question** field, enter a text of a question. * From the **Type** drop-down list, select a question type. The following question types are available: * **open** — an open-ended question that can be answered in a free form. * **close** — a close-ended question that can be answered by choosing a single or multiple correct answers from a given list of options. * **questionnaire** — a multiple-choice question that can be answered by choosing one or more answers from a given list of options. * **poll** — a multiple-choice question that can be answered by choosing a single answer from a given list of options. * From the **Visible** drop-down list, select either **Yes** or **No** to show or hide this question. * Click **Save**. Add as many questions as required for your test by repeating Steps 5 and 6 of this procedure. Add answer options to the questions of **closed**, **questionnaire,** and **poll** types, by clicking Add answer options in the question row. In the **Edit client test answer** window that is displayed, fill in the following fields: * In the **Text** field, enter an answer to the question. * From the **Correct** drop-down list, select either **Yes** or **No** to mark this answer option as correct or incorrect. The correct answer options must be indicated only for questions of the **close** type. You can choose to add a single or multiple correct answers to a question. * From the **Visible** drop-down list, select either **Yes** or **No** to show or hide this answer option. * Click **Save** to add the answer option. Add as many answer options as required for each question included in your test by repeating Steps 8 and 9 of this procedure. After you have finished adding questions and answers to your test, switch the test visibility setting to **Yes** on the **Clients test** page. The client accreditation test is now available to your clients via the B2CORE UI. In addition, you can force your clients to pass this test before submitting documents for obtaining a particular verification level (for details, refer to [How to create verification levels](how-to-use-the-kyc-constructor#how-to-create-verification-levels) to learn more). This article provides instructions on how to configure B2CORE to use the KYC provider, [ShuftiPro](https://shuftipro.com/). With ShuftiPro, you can conduct document and face verification to validate the identity of *individual* clients, as well as address and location verification. In addition to document verification, you can enable the SuftiPro Anti-money laundering (AML) check to screen your clients against multiple AML data sources, helping to protect your company from potential money laundering activities. Before proceeding with the instructions, you must have signed up for SuftiPro and have an active account. ## How to configure a connection to ShuftiPro [#how-to-configure-a-connection-to-shuftipro] Only admins who are assigned the permissions to manage external connections can set up a connection to ShuftiPro. To set up a connection: In the B2CORE Back Office, navigate to **System** > **External Connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, specify a name that you want to use for the connection. * In the **Caption** field, specify a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **ShuftiPro**. Click **Save** to create the connection. In the connections list, find the ShuftiPro connection that you've created and click **Edit** to enter the connection details. On the **Edit connection** page, specify the following settings: * In the **API host** field, specify `https://api.shuftipro.com`. * In the **Client ID** and **Secret key** fields, specify the client ID and secret key value to access ShuftiPro. * In the **New signature (for secrets after March 2023)** field, select either: * **No** — for clients who registered with ShuftiPro before March 15, 2023. * **Yes** — for clients who registered with ShuftiPro or updated their secret keys after March 15, 2023. This is needed to validate a key signature returned in ShuftiPro API responses (for details, refer to [Response Signature](https://developers.shuftipro.com/docs/verification_endpoints/responses#response-signature) in the ShuftiPro documentation). * In the **Allow documents screenshots** dropdown, select **Enabled** to allow clients to upload document screenshots for verification, instead of requiring only live captures. By default, this option is disabled. * In the **Check AML** dropdown, select **Enabled** to use the SuftiPro Anti-money laundering (AML) check. In this case, when clients submit documents for upgrading their verification levels they will be additionally screened against SuftiPro AML data sources, including multiple global watchlists, FATF lists, PEP lists, and Sanction lists, to prevent the risk of money laundering. By default, this option is disabled. When the AML check is enabled, a client must meet two conditions to obtain a higher verification level: the submitted documents must be verified, and the AML check must be successful. If either condition fails, the verification level upgrade will be rejected. * In the **Show OCR form**, select: * **Enabled** — to display the OCR form during verification, enabling clients to review and confirm the information extracted from their submitted documents. * **Disabled** — to hide the form and skip the confirmation step. By default, the form is enabled. In the **Enabled** dropdown, select **Yes**. Click **Save** to apply the settings. ## How to create document groups for ShuftiPro verification [#how-to-create-document-groups-for-shuftipro-verification] For **document verification**, create three document groups named `passport`, `id_card`, and `driving_license`. These groups enables you to request your clients to submit passports, national identity cards, and driving licenses for identity verification. For **address verification**, multiple documents recognized by [SuftiPro for address verification](https://developers.shuftipro.com/docs/coverage/documents#address-verification--validation) are supported, including the document type named `any`. Therefore, create the necessary document groups using names that match the ShuftiPro document types, such as `rent_agreement`, `bank_letter_receipt`, `employer_letter`, `utility_bill`, `tax_bill`, `any`, or others. These groups enable you to request your clients to submit respective documents to confirm their address and location details, such as city or country. The document type `any` enables clients to submit any document that includes their name and address for address verification. It's not tied to any specific document type, providing more flexibility and convenience for clients when confirming their addresses. For **face verification**, create the document group named `selfie`. To create a document group: In the B2CORE Back Office, navigate to **Verification** > **Document groups**. Click **+Create** in the upper-right page corner. On the **Create document group** page, fill in the following fields: * In the **Name** field, specify the name of a document group. Ensure to specify document group names exactly as provided above, in lower case. For example: `passport`, `id_card`, `driving_license`, `selfie`, and so on. For address verification, make sure to specify document group names exactly as listed in the [supported ShuftiPro document types](https://developers.shuftipro.com/docs/coverage/documents#address-verification--validation). For example: `rent_agreement`, `bank_letter_receipt`, `employer_letter`, `utility_bill`, `tax_bill`, `any`, or others. The document group named `any` allows clients to submit any document that includes their name and address, rather than a specific document type. This gives clients more flexibility when verifying their address. Make sure that **Yes** is selected in the **Enabled** dropdown. Click **Save** to create the document group. ## How to create document types for ShuftiPro verification [#how-to-create-document-types-for-shuftipro-verification] For each document group that you've created, create a document type. To create a document type: In the B2CORE Back Office, navigate to **Verification** > **Document types**. Click **+Create** in the upper-right page corner. On the **Create document type** page, fill in the following fields: * In the **Name** field, specify the name of a document type. Document type names must be the same as the names of the previously created document groups. For example: `passport`, `id_card`, `selfie`, `rent_agreement`, `bank_letter_receipt`, `employer_letter`, `utility_bill`, `tax_bill`, `any`, or others. In the **Status** dropdown, select **Enabled**. Click **Save** to create the document type. ## How to create verification levels for ShuftiPro [#how-to-create-verification-levels-for-shuftipro] You can create verification levels or modify the existing levels to use ShuftiPro for document, address, and face verification. To create a verification level: In the B2CORE Back Office, navigate to **Verification** > **Levels**. Click **+Create** in the upper-right page corner. On the **Create verification level** page, fill in the following fields: * In the **Index** field, specify a non-zero integer value. The zero (`0`) index is always assigned to the default verification level. For other verification levels, the index must be greater than zero, such as `1` for Level 1, `2` for Level 2 and so on. * In the **Wizard** dropdown, select `ShuftiProSDK`. The ShuftiPro popup will open in the B2CORE UI, enabling clients to follow the verification instructions and submit the required documents. * In the **Caption** field, specify a level name that will be displayed in the B2CORE UI and mobile app, such as `Level 1`. If required, specify the localization properties for this field by clicking the button located on the right side of the field. * In the **Desktop Description** field, specify a description of the level to be displayed in the B2CORE UI. This description can include the permissions granted to clients once they obtain this level. The description for the B2CORE UI can be specified in the HTML format. If required, specify the localization properties for this field. * In the **Mobile Description** field, specify a level description to be displayed in the mobile app. The description for the mobile app can be specified in the JSON format. If required, specify the localization properties for this field. * In the **Visible** dropdown, select **Yes**. * In the **Default** dropdown, select **No**. (`Level 0` is always the default verification level). * In the **Assigned Client Right** dropdown, select a permission level defining the set of permissions that you want to grant to your clients after obtaining this verification level (for details, refer to [Client rights](../../back-office-guide/system/client-rights)). * In the **Document groups** dropdown, select one or more required document groups. For example, you can select `passport` and `selfie` if you want your clients to submit their passports and pass face verification to receive this level. * In the **Client tests** dropdown, optionally select one or more accreditation tests if you want to force your clients to pass these tests before they can submit their documents for verification. The list of available tests includes all the tests with visibility set to **Yes**, which are displayed on the [Client tests](../../back-office-guide/verification/client-tests) page. Click **Save** to create the level. ## How to add the domain for callbacks in ShuftiPro [#how-to-add-the-domain-for-callbacks-in-shuftipro] To ensure that callbacks from ShuftiPro are successfully delivered and verification updates are received in B2CORE, you must add the domain part of your callback URL in your ShuftiPro account settings. To add the domain: Sign in to your SuftiPro account. Go to **Settings** > **API Keys** > **Callback/Redirect URLs**. Add the domain part of your callback URL. The domain of your callback URL is the same as the domain of your B2CORE Back Office. For example, if your Back Office URL is `https://{your-Back-Office-URL}`, enter only `{your-Back-Office-URL}` — without `https://`. Make sure to replace `{your-Back-Office-URL}` with the actual domain of your B2CORE Back Office. Add the domain for callbacks in ShuftiPro Save your changes. This article provides instructions on how to configure B2CORE to use the KYC and KYT provider, [SumSub](https://sumsub.com/). Before proceeding with the instructions, you must have signed up for SumSub and have an active account. For KYT checks, **SumSub Fraud Prevention** must also be enabled and properly configured. ## How to configure a connection to SumSub [#how-to-configure-a-connection-to-sumsub] Only admins who are assigned the permissions to manage external connections can set up a connection to SumSub. To set up a connection: In the B2CORE Back Office, navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name that you want to use for the connection. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **SumSubstance**. Click **Save** to create the connection. In the connections list, find the SumSub connection that you've created and click **Edit** to enter the connection details. On the **Edit connection** page, specify the following settings: * In the **Service Location** field, specify `https://api.sumsub.com/`. * In the **Client ID** field, specify your SumSub account name. To view your account name, in the SumSub interface, go to **Settings** > **Account Details**. * In the **Webhook Secret Key** field, specify a webhook secret. You should generate the webhook in the SumSub interface. To do this, in the SumSub interface, go to **Dev space** > **Webhooks** (for the required webhook configuration, refer to [SumSub webhook configuration](how-to-use-sumsubstance#sumsub-webhook-configuration)). * Leave the **Login** and **Password** fields empty. * In the **Token** and **Token Secret** fields, specify a token and a secret key value generated in the SumSub interface. To generate them, in the SumSub interface, go to **Dev space** > **App Tokens**. * To apply different verification flows to *individual* and *corporate* clients, select **Enabled** in the **Client Resetting Mode** dropdown. When the **Client Resetting Mode** option is enabled, this means that repeated verification is required for clients whose type has been changed from *individual* to *corporate*, or vice versa. After changing a type, the following happens: * In the B2CORE Back Office, a client’s verification level resets to `Level 0`, which is the default verification level. * All pending [client’s requests](../../back-office-guide/clients/requests) to obtain a higher verification level are automatically rejected. * In the SumSub system, an applicant is set back to the initial level, and all documents that have been previously uploaded for this applicant are invalidated. All files and documents that have been previously uploaded for this client in the B2CORE Back Office will still be available. In the **Transaction monitoring** section, configure the settings for KYT checks using the **SumSub Fraud Prevention**. These checks are currently supported for fiat and crypto deposits and withdrawals. * In the **Enabled** dropdown, select: * **Yes** — to enable transaction monitoring via **SumSub** and receive results in B2CORE. * **No** — to disable transaction monitoring via **SumSub**. * In the **Currency Filter** dropdown: * Select one or more currencies to monitor transactions only in the selected currencies. * Leave the list empty to monitor transactions in all currencies. Click **Save** to apply the settings. ## How to create document groups for SumSub verification [#how-to-create-document-groups-for-sumsub-verification] Create document groups to enable clients to submit various documents supported by SumSub for verification. For each document (such as an ID card, passport, driver’s license, and others) that you want to make available for verification, create a separate document group with the appropriate name. To create a document group: In the B2CORE Back Office, navigate to **Verification** > **Document groups**. Click **+Create** in the upper-right page corner. On the **Create document group** page, fill in the following fields: * In the **Name** field, specify the name of a document group. Ensure to specify document group names exactly as the names of [document types supported by SumSub](https://docs.sumsub.com/reference/add-id-documents#supported-document-types), such as `ID_CARD`, `PASSPORT`, `DRIVERS`, `RESIDENCE_PERMIT`, and so on. For example, if you want your clients to submit their ID cards for document verification, create a document group with the name `ID_CARD`. * In the **Caption** field, specify a document group caption that will be displayed in the B2CORE UI. * In the **Type** dropdown, select **One**. * In the **Description** field, specify a description for the document group that is used in the Back Office. Make sure that **Yes** is selected in the **Enabled** dropdown. Click **Save** to create the document group. ## How to create document types for SumSub verification [#how-to-create-document-types-for-sumsub-verification] For each document group that you've created, create a document type. To create a document type: In the B2CORE Back Office, navigate to **Verification** > **Document types**. Click **+Create** in the upper-right page corner. On the **Create document type** page, fill in the following fields: * In the **Name** field, specify the name of a document type. Document type names must be the same as the names of the previously created document groups. For example, `ID_CARD`, `PASSPORT`, `DRIVERS`, `RESIDENCE_PERMIT`, and so on. * In the **Caption** field, specify a document type caption that will be displayed in the B2CORE UI. * In the **Description** field, specify a description for the document type that will be displayed in the B2CORE UI. * In the **Group** dropdown, select a document group with which this document type must be associated. * In the **Max files** field, specify the maximum number of files that clients can upload for this document type. In the **Status** dropdown, select **Enabled**. Click **Save** to create the document type. ## How to create verification levels for SumSub in the B2CORE Back Office [#how-to-create-verification-levels-for-sumsub-in-the-b2core-back-office] You can create verification levels or modify the existing levels to use SumSub for verification. To create a verification level: In the B2CORE Back Office, navigate to **Verification** > **Levels**. Click **+Create** in the upper-right page corner. On the **Create verification level** page, fill in the following fields: * In the **Index** field, specify a non-zero integer value. The zero (`0`) index is always assigned to the default verification level. For other verification levels, the index must be greater than zero, such as `1` for Level 1, `2` for Level 2 and so on. * In the **Wizard** dropdown, select `SnsWizardSDK`. * In the **Caption** field, specify a level name that will be displayed in the B2CORE UI and mobile app, such as `Level 1`. If required, specify the localization properties for this field by clicking the button located on the right side of the field. * In the **Desktop Description** field, specify a description of the level to be displayed in the B2CORE UI. This description can include the permissions granted to clients once they obtain this level. The description for the B2CORE UI can be specified in the HTML format. If required, specify the localization properties for this field. * In the **Mobile Description** field, specify a level description to be displayed in the mobile app. The description for the mobile app can be specified in the JSON format. If required, specify the localization properties for this field. * In the **Visible** dropdown, select **Yes**. * In the **Default** dropdown, select **No**. (`Level 0` is always the default verification level). * In the **Assigned Client Right** dropdown, select a permission level defining the set of permissions that you want to grant to your clients after obtaining this verification level (for details, refer to [Client rights](../../back-office-guide/system/client-rights)). * In the **Document groups** dropdown, select one or more required document groups. For example, you can select `ID_CARD` and `RESIDENCE_PERMIT` if you want your clients to submit their ID cards and residence permits for verification to receive this level. * In the **Client tests** dropdown, optionally select one or more accreditation tests if you want to force your clients to pass these tests before they can submit their documents for verification. The list of available tests includes all the tests with visibility set to **Yes**, which are displayed on the [Client tests](../../back-office-guide/verification/client-tests) page. Click **Save** to create the level. ## How to create levels and flows in the SumSub interface [#how-to-create-levels-and-flows-in-the-sumsub-interface] The B2CORE Back Office supports two types of clients: *individual* and *corporate*. The SumSub system provides the capability to set up a separate verification flow for each of the types. To use this option, make sure that you enabled the **Client Resetting Mode** when [configuring a connection to SumSub](how-to-use-sumsubstance#how-to-configure-a-connection-to-sumsub). To add a new level: In the SumSub interface, navigate to **Integrations** > **Applicant Levels**. Click **Add new level**. Select the required steps. Level names must be specified in the following formats: * For *individual* clients: `level1`, `level2`, and so on. * For *corporate* clients: `level3corporate`, `level4corporate`, and so on. These formats ensure correct mapping between levels in SumSub and B2CORE. The mapping is based on the **Index** assigned to each verification level in B2CORE. You can find indexes in the respective column on the [Verification > Levels](../../back-office-guide/verification/levels) page of the B2CORE Back Office and use them in the level names for SumSub. For example: * `level1` in SumSub maps to the level with **Index** = 1 in B2CORE * `level2` in SumSub maps to the level with **Index** = 2 in B2CORE * `level3corporate` in SumSub maps to the level with **Index** = 3 in B2CORE * `level4corporate` in SumSub maps to the level with **Index** = 4 in B2CORE and so on. To add a new flow: In the SumSub interface, navigate to **Integrations** > **Verification Flow**. Click **Add new**. Select the required options. For each flow, select a compatible level. ## SumSub webhook configuration [#sumsub-webhook-configuration] **Reviewed** * Name: `REVIEWED` * Receiver: `HTTP Endpoint` * Target: `https://{your-Back-Office-URL}/api/v1/verification-sns/handle` * Type: `Applicant reviewed (applicantReviewed)` * Secret key: the secret key generated in SumSub Make sure to replace `{your-Back-Office-URL}` with the domain of your B2CORE Back Office, *not* the B2CORE UI. For example, the target for webhooks may look like this: `https://example.com/api/v1/verification-sns/handle`. Before you begin to configure a custom KYC (Know Your Customer) procedure, consider the following: * the number of verification levels that clients can obtain (you can use the built-in KYC provider or one of the [supported third-party KYC providers](../../integrations/kyc-providers) to run a verification procedure at each level) * the permissions that clients are granted after obtaining each verification level, as well as possible limits that can be applied to specific permissions * the documents that clients are required to submit to obtain each verification level. Moreover, it’s possible to configure separate KYC procedures for clients of different types, such as individual and corporate clients. You can also grant different initial verification levels to clients of different types after they sign up to the B2CORE UI (for details, refer to [How to add and configure the registration wizard](../manage-system-settings/how-to-set-up-the-registration-wazard/how-to-add-and-configure-the-registration-wizard) and specifically the article about [how to configure the User Registration step](../manage-system-settings/how-to-set-up-the-registration-wazard/how-to-configure-the-user-registration-step)). Follow the steps below to create and set up verification levels, define the documents that clients must submit at each level, as well as configure the way the verification levels and their descriptions are displayed to clients in the B2CORE UI. ## How to create document groups [#how-to-create-document-groups] At this step, create document groups, for example, “Proof of ID”, “Proof of residence” and so on. Document groups are used to categorize documents required for verification. To create a document group: Navigate to **Verification** > **Document groups**, and then click **+Create** in the upper-right page corner. On the **Create document group** page, fill out the form: * Set the group **Name**, which will be displayed only in the Back Office. * Set **Type** to **One**. * Set **Caption** — the name of the document group in the B2CORE UI. Set localizations if needed. * Set **Description** — here, you can provide hints to your clients about the verification procedure. This information can be presented in the HTML format. Set localizations if needed. * Set **Enabled** to **Yes**. Click **Save** to create the document group. ## How to create document types [#how-to-create-document-types] A KYC document is a formal document such as an ID card, a passport, driver’s license, or bank statement, which can verify the identity and address of a client. At this step, define documents that clients should provide in order to get verified at each level. To define a document: Navigate to **Verification** > **Document types**, and then click **+Create** in the upper-right page corner. On the **Create document type** page, fill out the form: * Set the document **Name**, which will be displayed only in the Back Office. * Set **Caption** to specify the document name to be displayed in the B2CORE UI. Set localizations if needed. * Set **Description** — the description can be specified in the HTML format. Set localizations if needed. * Set **Status** to **Enabled**. * Set the document **Group** — it should be one of the groups created at the previous step. * Set **Max files** to indicate how many documents of this type your client can upload. Click **Save** to define the document type. ## How to create verification levels [#how-to-create-verification-levels] At this step, create the required verification levels. For each B2CORE instance, `Level 0` is already set up and is used as the default level. To create a new verification level: Navigate to **Verification** > **Levels**, and then click **+Create** in the upper-right page corner. On the **Create verification level** page, fill out the form: * Set the level **Index**, this value must be greater than 0. * Set **Wizard** — select `DocumentsWizard` to use the built-in KYC provider and display in the B2CORE UI a form for uploading required documents based on the specified document type. * Set **Caption** — the level name to be displayed to clients in the B2CORE UI and mobile app. If required, specify the localization properties for this field by clicking the button located on the right side of the field. * Set **Next Level** — select the next verification level that clients can obtain after they are granted the level that you currently configure. Leave this field empty to allow clients of different types, such as individual and corporate, to obtain different verification levels. The next level that a client is proposed to obtain in the B2CORE UI is the level with the next higher index according to the applied client type restrictions (for details, refer to [How to restrict the use of verification levels by client types](how-to-use-the-kyc-constructor#how-to-restrict-the-use-of-verification-levels-by-client-types)). * Set **Desktop Description** — the level description displayed to clients in the B2CORE UI. For a level description, you can list the permissions granted to clients after obtaining this level. The description for the B2CORE UI can be specified in the HTML format (see [Example](how-to-use-the-kyc-constructor#example) below). If required, specify the localization properties for this field. * Set **Mobile Description** — the level description displayed to clients in the mobile app. The description for the mobile app can be specified in the JSON format. If required, specify the localization properties for this field. * Set **Visible** to: * **Yes** — to create the level that will be displayed in the KYC flow to clients in the B2CORE UI. * **No** — to create a hidden level (for example, one with specific transaction limits) that can be assigned to clients only manually via the Back Office. * Set **Default** to **No** (since the default level is always Level 0). * In the **Assigned Client Right** dropdown, select a permission level defining a set of permissions that you want to grant to your clients after obtaining this verification level (to learn more, refer to [How to create permission levels](how-to-use-the-kyc-constructor#how-to-create-permission-levels)). * Select a client accreditation test in the **Client Tests** dropdown if you want to force your clients to pass the selected test before they can submit the documents required to obtain this verification level. The list of available client tests includes all the tests with visibility set to **Yes**, which are displayed on the [Client tests](../../back-office-guide/verification/client-tests) page. * Select **Document Groups** from among those created at [Step 1](how-to-use-the-kyc-constructor#how-to-create-document-groups), which specify the documents required for a client to be granted this verification level. Multiple groups can be selected. Click **Save** to create the verification level. ### Example [#example] The following HTML code example illustrates how to specify a level description for the B2CORE UI: ```html

Verification Level 0


To obtain Verification Level 1, submit the following documents:

  • A list of documents that a client must submit or other requirements that must be met for receiving Level 1.
```
To mark an operation as enabled for this verification level, change `glyphicon glyphicon-error` to `glyphicon glyphicon-success` in the HTML code. The level description will be displayed in the B2CORE UI as follows: The level description in the B2CORE UI ## How to restrict the use of verification levels by client type [#how-to-restrict-the-use-of-verification-levels-by-client-type] To configure separate verification procedures, for example for individual clients and corporate clients, indicate the levels that can be obtained only by clients of a specific type. To apply client type restrictions to a verification level: Navigate to **Verification** > **Levels**. Select the verification level, and click **Edit**. On the **Update verification level** page, click the **Actions** button, and select **Client type restriction**. In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Allow only** — to allow the use of the verification level only for a specific client type. * **Deny only** — to prohibit the use of the verification level for a specific client type. * In the **Rule** dropdown, select the client type to which you want to apply the selected rule. Click **Save** to apply the changes. ### Example [#example-1] Suppose that both *individual* and *corporate* clients are assigned the default `Level 0` after they sign up to the B2CORE UI. The following levels should be configured to support separate verification procedures for clients, based on **client type**: * Individual clients: `Level 0` → `Level 1` → `Level 2` Client type restriction: **Allow only** = `individual` * Corporate clients: `Level 0` → `Level 3` → `Level 4` Client type restriction: **Allow only** = `corporate` The next level that a client is allowed to obtain is the level with the next higher index according to the applied restrictions by client type. This may be useful when you want to use different [KYC providers](../../integrations/kyc-providers) for running verification procedures for individual and corporate clients. ## How to restrict the use of verification levels by jurisdiction or country [#how-to-restrict-the-use-of-verification-levels-by-jurisdiction-or-country] To configure more specific verification procedures, you can restrict the use of verification levels based on a client’s jurisdiction or country. To apply such restrictions to a verification level: Navigate to **Verification** > **Levels**. Select the verification level, and click **Edit**. On the **Update verification level** page, click the **Actions** button, and select: * **Jurisdiction restriction** — to apply the restriction based on the client’s jurisdiction. * **Country restriction** — to apply the restriction based on the client’s country. In the **Restrictions** popup, fill in the following fields: * In the **Enabled** dropdown, select **Yes**. * In the **Type** dropdown, select either of the two options: * **Allow only** — to allow the use of the verification level only for the selected jurisdictions or countries. * **Deny only** — to prohibit the use of the verification level for the selected jurisdictions or countries. * In the **Rule** dropdown, select one or more jurisdictions or countries to which you want to apply the rule. Click **Save** to apply the changes. ### Example [#example-2] Suppose that both *individual* and *corporate* clients are initially assigned the default `Level 0` after signing up to the B2CORE UI. The following levels should be configured to support separate verification procedures for clients, based on **client type** and **jurisdiction**: * Individual clients in the **EU**: `Level 0` → `Level 1` → `Level 2` Client type restriction: **Allow only** = `individual` and Jurisdiction restriction: **Allow only** = `EU` These levels are accessible only to individual clients from the **EU** jurisdiction. * Individual clients in **CY** (Cyprus): `Level 0` → `Level 3` → `Level 4` Client type restriction: **Allow only** = `individual` and Jurisdiction restriction: **Allow only** = `CY` These levels are accessible only to individual clients from the **CY** jurisdiction. * Corporate clients in the **EU**: `Level 0` → `Level 5` → `Level 6` These levels are accessible only to corporate clients from the **EU** jurisdiction. Client type restriction: **Allow only** = `corporate` and Jurisdiction restriction: **Allow only** = `EU` * Corporate clients in **CY** (Cyprus): `Level 0` → `Level 7` → `Level 8` Client type restriction: **Allow only** = `corporate` and Jurisdiction restriction: **Allow only** = `CY` These levels are accessible only to corporate clients from **CY** jurisdiction. The next level that a client is allowed to obtain is the level with the next higher index according to the applied restrictions by client type and jurisdiction. ## How to create permission levels [#how-to-create-permission-levels] Permission levels are a set of operations that clients are allowed to make in the B2CORE UI. The permission levels are associated with verification levels. When clients obtain a particular verification level, they are granted the permissions associated with this verification level. To create a permission level: Navigate to **System** > **Client Rights**, and click **+Create** in the upper-right corner of the page. In the **Create role** window that is displayed, fill in the following fields: * **Name** — specify the name of the verification level, which should not include any capital letters. * **Caption** — specify the permission level description. Click **Save** to create the permission level. Click the **Edit** button located in the permission level row. In the **Parent Role** dropdown, select a previous permission level that clients must obtain before they can get this level. This field doesn't apply to the default permission level. Select the permissions that you want to grant to your clients at this level: * **Verification** — if selected, clients are allowed to obtain a higher verification level in the B2CORE UI. * **Converter** — if selected, clients can exchange funds in the B2CORE UI. * **Deposits** — if selected, clients can deposit funds in the B2CORE UI. * **Withdrawals** — if selected, clients can withdraw funds in the B2CORE UI. * **Internal Transfers** — if selected, funds can be transferred from one client to another within the same B2CORE system. Click **Save** to apply the changes. ## How to set up deposit, withdrawal, and transfer limits by verification levels [#how-to-set-up-deposit-withdrawal-and-transfer-limits-by-verification-levels] For each verification level, you can limit the amounts that clients who are granted this level can deposit, withdraw, and transfer. All limit values are calculated in USD. To set up limits for a particular level: Navigate to **Verification** > **Levels**. Select a verification level for which you want to set up limits, and then click the **Edit** button located in the level row. On the **Update verification level** page, fill in the fields displayed under the **Limits** section: * To limit the amount that clients can deposit per day, specify the maximum allowed value in the **Daily deposit** field. * To limit the amounts that clients can withdraw per day and per month, specify the maximum allowed values in the **Daily withdraw** and **Monthly withdraw** fields. * To set the minimum amount that clients can transfer from their wallets to trading accounts, specify the **Transfer min.** field. It won’t be allowed to transfer amounts that are less than the assigned limit. * To allow clients to withdraw certain amounts without obtaining approvals, specify the maximum allowed amount in the **Auto withdraw** field. The amounts that do not exceed the assigned limit can be withdrawn by clients automatically (without the admin approval). * To set the maximum allowed amount for internal transfer operations per day, specify the **Daily internal transfer** field. If a client wants to make an internal transfer after reaching a specified limit, a request for the internal transfer is created and must be approved by an admin. If a client makes an internal transfer to or from an MT account, the MT platform settings override the **Daily internal transfer** option. If the **Request required for transfer from** and **Request required for transfer to** options are enabled for the MT platform, the **Daily internal transfer** option is ignored, and requests for internal transfers are always created and must be approved by an admin. To apply no limits, enter **-1** in the corresponding field described above. To prohibit clients from making a specific transaction, enter **0** in the corresponding field described above. Click **Save** to apply the changes. **See also** [How to use SumSub](how-to-use-sumsubstance) [How to use ShuftiPro](how-to-use-shuftipro) Managers are users with access to the Back Office who are responsible for organizing work and communicating with clients assigned to them. Newly registered clients are automatically distributed among the existing managers. Before adding a manager, ensure that the relevant user is created on the [System > Users > Users](../../back-office-guide/system/users/users) page, and then proceed to add this user as a manager. To add a manager: Navigate to **Clients** > **Managers**. Click **+Create** in the upper-right page corner. On the **Create manager** page, fill in the following fields: * In the **Email** dropdown, select the email address of the user who has been already registered in the Back Office on the **System** > **Users** > **Users** page. * In the **Name** field, enter the manager's full name. * In the **Phone** field, optionally specify the manager's phone number. * In the **Enabled** dropdown, select **Yes** or **No** to set the manager's profile status. Clients can be assigned only to `Enabled` managers. * In the **Title** field, optionally enter the manager’s title (such as `Mr` or `Mrs`). * In the **Default** dropdown, select: * **Yes** — to set this manager as the default. All new clients will be automatically assigned to this manager, considering country restrictions. * **No** — to keep this manager as non-default. Click **Save** to create the manager profile. ## How to apply country restrictions to a manager [#how-to-apply-country-restrictions-to-a-manager] With country restrictions, clients are automatically assigned to the appropriate managers according to the clients' countries. To apply country restrictions to a manager: Navigate to **Clients** > **Managers**. Select the manager and click **Edit**. On the **Edit manager** page, click the **Actions** button in the upper-right page corner, and then select **Country restrictions** in the dropdown. In the **Restrictions** popup, fill in the following fields: * Set the **Enabled** dropdown to **Yes**. * In the **Type** dropdown, select the rule type: * **Deny only** — the manager can be assigned to all clients, except for those from the selected countries. * **Allow only** — the manager can only be assigned to clients from the specified countries. * In the **Rules** dropdown, select one or more countries to which either the **Deny only** or **Allow only** rule will be applied. Click **Save** to apply the changes. To create user groups and assign to them custom permissions: Navigate to **System** > **Users** > **Groups**. Click **+Create** in the upper-right page corner. In the **Caption** field, enter a name for your group (for example, “Managers”). Grant the required permissions to a user group by selecting the appropriate checkboxes under the **Rights** section. All permissions are categorized into groups that correspond to the main menu items, and listed in alphabetical order. To quickly select all permissions or a particular permission type, click **Check** and select one of the following options: **All**, **View**, **Create**, **Update**, or **Delete**. To unselect all permissions, click **Uncheck all**. Click **Save** to create the user group. You can add new Back Office users, such as admins, only if you have the necessary permissions to manage users. To add a new Back Office user: Navigate to **System** > **Users** > **Users**. Click **+Create** in the upper-right page corner. On the **Create user** page, fill in the following fields: Create user page * In the **Email** field, enter the user's email address. * In the **Password** field, enter a password. You can also generate a secure password by clicking the **Generate** button on the right side of the field. To view the generated password, enable the **Show password** option. * In the **Status** dropdown, select **Enabled**. * In the **Groups** dropdown, select one or more groups in which the new user will be included (for details, refer to [How to add a user group and grant permissions](how-to-add-a-user-group-and-grant-permissions)). The selected groups define the permissions that the new user will have. The **Administrators** group grants all the available permissions to the users included in this group. * In the **Name** field, enter the user’s first and last names. * Select the **Send to email** checkbox to send credentials to the specified user email address. * Select the **Mask data** checkbox to prevent the user from viewing client personal data. With this option enabled, such data as client names, email addresses, and phone numbers will be masked with asterisks (`*`) for this particular Back Office user. Click **Save** to register the new user in the Back Office. For newly registered Back Office users, two-factor authentication (2FA) via email codes is enabled by default. After entering their credentials, users will be prompted to enter verification codes sent to their email addresses when signing in to the Back Office. To enable a language for use in the B2CORE UI or disable it: Navigate to **System** > **Localizations**. Select the language from the list and click **Edit**. To switch on the language, set **Enabled** to **Yes**. To switch off the language, set **Enabled** to **No**. If the selected language is marked as the default one, it can’t be disabled. Click **Save** to apply the changes. To block registration for clients from a specific country: Navigate to **System** > **Countries**. The list of countries available for registration is displayed on the **Countries** page. For a country for which you want to block registration, toggle the **Enabled** switch to an inactive state. In the displayed popup, click **Yes** to confirm the action. The selected country is now unavailable in the Registration form. You can view and change the images displayed in the Back Office. To be able to view and change the Back Office images, you must be assigned the permissions to **View Backend images** and **Edit Backend images**, which can be found under the **System** permission group (for details, refer to [How to add a user group and grant permissions](how-to-add-a-user-group-and-grant-permissions)). To change an image specified for a Back Office element, remove the current image by clicking the **Delete** button, and then add a new one. To add a new image: Navigate to **System** > **Backend images**, and then click the **+Create** button located in the upper-right corner of the page. In the **Type** dropdown, select a Back Office element to which you want to apply a new image. The following options are available: * the main menu logo * the logo on the login page * the background image on the login page Click **Upload an image** and locate the image on your computer to assign to a selected user interface element. Click **Save** to update the specified image. You can modify the workflows of wizards used for configuring procedures that run in the B2CORE UI, such as client registration, authorization, password recovery, and others. To change a wizard workflow: Navigate to **System** > **Wizards**. Select the wizard you want to change and click the **Edit** button. Go to the **Workflow** tab. For wizards that support additional steps, you can add or remove them from the workflow: * To add a step, click **Add**, select the desired step, and click **Save**. * To delete a step, click the **bin** icon in the step row, and then confirm the deletion in the displayed popup. You can also restrict workflow steps for specific countries or client types: * Click the **Actions** button in the step row. * Select the restriction type: **Country restrictions** or **Client type restrictions**. * In the displayed popup, fill in the following fields: * In the **Type** dropdown, select the rule type: * **Allow only** — to allow the use of the step only for specific countries or client types. * **Deny only** — to prohibit the use of the step for specific countries or client types. * In the **Rules** dropdown, select one or more countries, or client types to which you want to apply the selected rule. * Set the **Enabled** option to **Yes** to apply the restriction. Click **Save** to apply the changes to the wizard workflow. To use the **RudderStack** platform with B2CORE and collect data on various events in the B2CORE UI, configure a connection to RudderStack. Before configuring a connection in the Back Office, you must have signed up for RudderStack and have an active account with the configured *sources*, which are places from which event data will be collected, and *destinations*, which are the platforms where you want to send your event data for analytics. You can consult the official [RudderStack documentation](https://www.rudderstack.com/docs/) or contact their support in case you have any questions. To configure a connection in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In **Name** field, enter a name that you want to use for the connection. * In the **Caption** field, enter a caption that will be applied to the platform in the Back Office. * In the **Provider** dropdown, select **RudderStack**. Click **Save** to create the connection. Find the newly created connection in the list and click **Edit**. On the **Edit connection** page, fill in the following fields: * In the **Data Plane URL** field, specify the URL for routing and processing events. * In the **Write Key** field, specify the unique identifier of your source. RudderStack uses this key to send events from a source to the specified destination. You can find these parameters on your RudderStack Homepage. RudderStack Homepage * In the **Enabled** dropdown, select **Yes**. Click **Save** to apply the changes. To use the **Zendesk** support platform with B2CORE, configure a connection to Zendesk. Once configured, clients can click the **HelpDesk** menu in the B2CORE UI or [mobile app](../../release-notes/release-notes-mobile) to be redirected to the Zendesk interface via single sign-on (SSO), eliminating the need for additional authentication. In Zendesk, they can submit and manage tickets, access live chat support, and utilize AI-powered features to receive assistance. Before configuring a connection in the Back Office, you must have signed up for Zendesk and have an active account with the configured SSO options. You can consult the official [Zendesk documentation](https://support.zendesk.com/hc/en-us) or contact their support in case you have any questions. To configure a connection in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In **Name** field, enter a unique name for the connection. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **Zendesk**. Click **Save** to create the connection. Find the newly created connection in the list and click **Edit**. On the **Edit connection** page, fill in the following fields: ### Common settings [#common-settings] * In the **Zendesk URL** field, specify your Zendesk URL, such as: `https://{your-subdomain}.zendesk.com` This URL is used by Zendesk to call API methods to verify JSON Web Tokens (JWTs) required for single sign-on from your mobile app. Ensure that this URL is also entered and saved in your Zendesk **Admin Center** while configuring SSO for the mobile SDK in **Channels** > **Mobile SDK** menu. Zendesk URL in Channels > Mobile SDK * In the **SSO Redirect URL (brand url)** field, specify the URL of the Zendesk page to which your clients will be redirected after successful authentication via single sign-on, such as: `https://{your-subdomain}.zendesk.com/hc/en-us` ### SSO Settings [#sso-settings] * In **SSO Shared Secret** field, specify the secret from Zendesk, which is used to generate JWTs required for single sign-on. This secret is generated in the Zendesk **Admin Center** during SSO configuration and must be copied from there. Shared secret in Zendesk ### Mobile SDK Settings [#mobile-sdk-settings] These settings are required only if you have a [mobile app](../../release-notes/release-notes-mobile) and need to enable SSO between your app and Zendesk. If you don't have the mobile app, these settings aren't necessary. * In the **App ID** field, specify the app identifier from Zendesk. * In the **Client ID** field, specify the client identifier from Zendesk. * In the **SDK JWT Secret** field, specify the secret generated in Zendesk, which is used to sign JWTs sent from B2CORE to Zendesk for single sign-on. All these values are generated in your Zendesk **Admin Center** when configuring SSO for the mobile SDK in the **Channels** > **Mobile SDK** menu and must be copied from there. ### Mobile SDK in Zendesk [#mobile-sdk-in-zendesk] In Zendesk **Admin Center** in **Channels** > **Mobile SDK**, insert the **JWT URL**. The URL must have the following format: `https://{your-Back-Office-URL}/api/v2/my/helpdesk/zendesk/auth/mobile/exchange` Make sure to replace `{your-Back-Office-URL}` with the domain of your B2CORE Back Office. Mobile SDK settings in Zendesk Once the necessary settings are specified in the B2CORE Back Office, select **Yes** in the **Enabled** dropdown. Click **Save** to apply the changes. If you previously used **SupportPal** as your help desk platform, refer to [How to switch from SupportPal to Zendesk](how-to-switch-from-supportpal-to-zendesk) to make sure that your clients submit new tickets only through Zendesk but can still view their SupportPal ticket history. ## How to configure the Zendesk chatbot [#how-to-configure-the-zendesk-chatbot] To use the Zendesk chatbot in B2CORE, you need to configure the widget and authentication settings in your Zendesk account. The chatbot will be displayed in the B2CORE UI, allowing clients to ask questions, quickly find the information that they need, report issues, and seamlessly switch to a live operator, all without requiring additional authentication. To set up the chatbot widget and generate the required credentials: In Zendesk Admin Center, navigate to **Channels** > **Messaging and social** > **Messaging**. Add a web widget. Copy the widget code snippet to get the **Widget Key**, which is the UUID-style identifier. The key will be required when configuring the widget settings in the B2CORE Back Office. To set up automatic authentication for clients interacting with the chatbot, navigate to **Account** > **Security** > **End user authentication**. On the **Messaging** tab, click **Create key**. Copy the values from the **Messaging Auth ID** and **Messaging Auth Shared Secret** fields. These values will be required when configuring the widget settings in the B2CORE Back Office. ## How to configure chatbot settings in the B2CORE Back Office [#how-to-configure-chatbot-settings-in-the-b2core-back-office] After configuring the chatbot in Zendesk, proceed with the respective settings in the B2CORE Back Office to enable the bot in the B2CORE UI: In the B2CORE Back Office, navigate to **System** > **External connections**. Find the existing Zendesk connection in the list and click **Edit**. On the **Edit connection** page, fill in the following fields: ### Widget Settings [#widget-settings] * In the **Enable Widget on WEB** dropdown, select **Yes** to enable displaying the chatbot in the B2CORE UI and mobile app. * In the **Widget ID** field, enter the **Widget Key** you copied from Zendesk. * In the **Widget Auth Key ID** field, enter the **Messaging Auth ID** retrieved from Zendesk. * In the **Widget Auth Key Secret** field, enter the **Messaging Auth Shared Secret** retrieved from Zendesk. Click **Save** to apply the changes. The Zendesk chatbot is now displayed in the B2CORE UI, enabling clients to quickly access support and resolve their questions. Email templates are used to notify clients and [Back Office users](../../back-office-guide/system/users/users) about specific system events. You can configure custom email templates instead of pre-configured ones. For a full list of supported event types and related pre-configured email templates, refer to [Email template types](../../back-office-guide/references/email-template-types). Some types are used to notify clients, while others are for [Back Office users](../../back-office-guide/system/users/users). To configure an email template: Navigate to **System** > **Templates** > **Email** > **Templates**. Click **+Create** in the upper-right page corner. On the **Create email template** page, fill in the following fields: * In the **Type** dropdown, select the [event type](../../back-office-guide/references/email-template-types) for which the email template will be used. For example, `accountCreated`: when a wallet or trading account (such as on the **MetaTrader** platform) is created for a client, this template will be used to send an email notification. * In the **Locale** dropdown, select the language of the email template. * In the **Enabled** dropdown, select **Yes**. * In the **Subject** field, enter the subject of the email template. * In the **Email template** field, specify the HTML layout for the email template. Click **Preview** to render the HTML and check how the template will appear in an email, ensuring there are no layout errors. If the template is enabled, it can be saved only after it is successfully rendered and displayed in the preview area. Click **Save** to create the template. The template will be used to send email notifications for the selected event type. ## How to add download links for trading terminals to email templates [#how-to-add-download-links-for-trading-terminals-to-email-templates] Adding download links for trading terminals to email templates can be helpful when sending account creation emails to clients, allowing them to easily access the required terminals. To add the download links: Navigate to **System** > **Templates** > **Email** > **Templates**. Select the required template, such as `accountCreated`, `cTraderAccountCreated`, `MatchTraderClientCreated`, or others. These templates are used to send emails to clients when accounts on the respective platforms are created. Including download links for the corresponding terminals may be useful. Click the **Edit** button to open the template details. In the **Email template** field, add the download links in HTML format. Example: ```html For Web: Open
For Windows: Download
For Mac: Download
For Linux: Download
For iOS: Download
For Android: Download
``` If using the above example, make sure to replace `{link-to-web-trading-terminal}` and `{download-link}` with the actual URLs for each trading terminal, and `{color-code}` with the desired color code for the links. You can also adjust other styles, such as `text-decoration`, as needed to match your email template design.
Click **Preview** to render the HTML and check how the template will appear in the email, ensuring there are no layout errors. If the template is enabled, it can be saved only after it is successfully rendered and displayed in the preview area. Click **Save** to apply the changes.
The email template will include the trading terminal download links, making it easier for clients to access the platforms directly from their notifications. It's possible to configure the settings in the Back Office to display download links for iOS and Android apps, along with download instructions, in the B2CORE UI. Once configured, the download button will appear on the **Sign In** page, enabling clients to download the apps without needing to sign in. Additionally, the button will be displayed at the top of the **Dashboard** after clients sign in. To configure the mobile app download settings: Navigate to **System** > **Settings**. In the **Mobile** section, configure the following settings: * In **Mobile application** dropdown, select the platforms for which you want to provide mobile app download links: * **iOS** — select this option to provide a link for downloading your iOS app from the Apple Store. * **Android** — select this option to provide a link for downloading your Android app from Google Play. * **Android APK Registry** — select this option to provide a link for downloading the Android APK. If your mobile apps for both iOS and Android are live, you can select several options. * If you selected **iOS**, specify the URL for downloading the iOS app from the Apple Store in the **iOS URL** field. * If you selected **Android**, specify the URL for downloading the Android app from Google Play in the **Android URL** field. * If you selected **Android APK Registry**, specify the universally unique identifier (UUID) of your Android APK in the **Android APK Registry ID** field. This UUID is used to generate the download link for the Android APK. If you don't have the UUID, contact your account manager for assistance. Click **Save** to apply the changes. Below is the example that shows the mobile app download button displayed on the **Sign In** page of the B2CORE UI. The download options for iOS and Android Upon clicking the button, the options for downloading the apps for the respective platforms are displayed. The download button for mobile apps on the Sign In page For Android, the APK installation instructions are detailed below. The Android APK installation steps Create bulk actions to perform specific actions in respect to multiple clients at a time. To create a bulk action: Navigate to **System** > **Bulk actions**. Click **+Create** in the upper-right corner of the page. From the **Action** drop-down list, select an action type that you want to perform as a bulk action. The following action types are available: * ban clients * change a client type * change an internal client type * change a verification level * make a deposit * zero out balances In the **Name** field, enter a name for your bulk action. In the **Description** field, enter a description for your bulk action. Click **Upload csv file** and select a CSV file that has previously been downloaded to your computer, containing the email addresses of the clients to whom the bulk action applies (for details, refer to [How to export a CSV file with email addresses](how-to-export-a-csv-file-with-email-addresses)). Depending on the bulk action type that you selected, additional fields may be displayed that you need to fill in. Click **Save** to apply the changes. The bulk action has been created and executed. To verify whether it has been executed successfully, check the **Status** column on the **Bulk actions** page. To create a request resolution type: Navigate to **System** > **Requests** > **Resolutions Types**. Click +**Create**. Fill out the form: * Set the **Name** of the type (for example, `financial`). * Set the **Caption** — the title of the type that will be displayed in the resolution types drop-down list (for example, `Financial Rejection`). * Set **Enabled** to **Yes**. Click **Save** to create the resolution type. To create a request resolution: Navigate to **System** > **Requests** > **Resolutions**. Click **+Create**. Fill out the form: * Set the **Name** of the resolution (for example, `suspicious`). * Set the **Caption** — the title of the resolution that will be displayed in the resolutions drop-down list (for example, `Suspicious Transaction`). * Set **Enabled** to **Yes**. * Select **Resolution type** from the list. The resolution type must be previously created in the system (for details, refer to [How to create a request resolution type](how-to-create-a-request-resolution-type)). Click **Save** to create the resolution. This guide is for brokers who want their clients to be able to log in or register using their Google or Apple account, in addition to (or instead of) email and password. It explains what you need to prepare on your side and what happens once you hand the information to B2Broker. This is a **joint setup**: you own the Google/Apple developer accounts and credentials, B2Broker wires them into your B2CORE instance. Nothing is enabled until both sides are done. This feature has a **one-time setup fee**. Contact your account manager or our support team to confirm the fee and availability before requesting access. ## What you get [#what-you-get] * A "Sign in with Google" and/or "Sign in with Apple" button on your login and registration pages. * New users who sign up this way are created automatically — no separate registration form. * Users who already have a password account can also link a Google/Apple account later (linking is by email address). ## Before you start [#before-you-start] * Confirm with your B2Broker account manager that social sign-in is available for your B2CORE instance. This depends on you already running on the current identity platform. * Decide **which providers** you want: Google only, Apple only, or both. Apple requires a paid Apple Developer account, so plan for that if you want it. * You will need someone on your side with access to your company's Google Cloud / Apple Developer accounts (or the ability to create new ones). ## What you need to prepare — Google [#what-you-need-to-prepare--google] 1. **A Google Cloud project.** Use an existing company project or create a new one dedicated to sign-in. 2. **OAuth consent screen.** Configure: * App name, support email, logo (this is what your users will see on the Google consent prompt). * Scopes: `openid`, `email`, `profile`. * Publishing status: while the app is in **Testing**, only explicitly added test users can sign in — anyone else gets `access_denied`. Move the app to **Published** before go-live. 3. **An OAuth 2.0 Client ID** (application type: **Web application**). * We will give you the exact **Authorized redirect URI** to register — it is tied to your B2CORE instance's hostname and looks like: ``` https:///srvsz/auth/clients/v1/self-service/methods/oidc/callback/google ``` * Add the same host (no path) as an **Authorized JavaScript origin**. 4. Copy the resulting **Client ID** and **Client secret**. ## What you need to prepare — Apple [#what-you-need-to-prepare--apple] Apple's setup has more moving parts and requires an active [Apple Developer Program](https://developer.apple.com/programs/) membership. 1. **An App ID** with the **Sign In with Apple** capability enabled (reuse an existing App ID if you have one, or create a new one). 2. **A Services ID** — this is the actual OAuth client Apple uses. When configuring it: * **Domain**: your B2CORE instance's API host (no scheme, no path). * **Return URL**: the Apple callback URL we provide, in the same shape as Google's above but ending in `/apple`. 3. **A "Sign in with Apple" private key (`.p8` file)** generated under Apple's **Keys** section, with the Sign In with Apple capability linked to your App ID. This file is only downloadable once — save it immediately somewhere safe. 4. Your **Team ID** (10-character alphanumeric, shown in your Apple Developer account header). 5. The **Key ID** of the key you created in step 3. You'll end up with five pieces of information: Services ID (client ID), Team ID, Key ID, the `.p8` private key file, and — unlike Google — there is no separate "client secret" to copy; Apple's secret is derived from the other four. ## Handing credentials to B2Broker [#handing-credentials-to-b2broker] Send us: * Google: Client ID + Client secret. * Apple: Services ID, Team ID, Key ID, and the `.p8` private key file. **Treat these as secrets** — especially the Apple private key. Send them through a secure channel your account manager provides (a secrets share link or an encrypted attachment), not plain email or chat. We'll confirm once they're stored securely on our side and let you know when the buttons are live. ## What happens next [#what-happens-next] Once we have your credentials, we enable the feature on your B2CORE instance and deploy. This typically causes a brief restart of the login service — no downtime is expected, but avoid scheduling it during peak hours. ## Testing after go-live [#testing-after-go-live] 1. Open your login page — you should see the Google/Apple button(s). 2. Sign in with a real account for each enabled provider. 3. Confirm the user lands signed in, and that their email/name look correct in your admin panel. 4. If Google is still in **Testing** mode, only test users you added to the consent screen will be able to sign in — everyone else will see `access_denied`. Publish the app before advertising the feature to real users. ## Good to know [#good-to-know] **Apple only shares the user's name and email on their very first consent.** If a user revokes your app in their Apple ID settings and signs in again later, Apple will only send back an anonymous identifier — the name may be missing from then on. This is an Apple limitation, not a bug on our side. **Apple emails may be "private relay" addresses** (`...@privaterelay.appleid.com`). These are real, working addresses — just routed through Apple. Treat them as the user's canonical email; they will not automatically match an existing password account that used the user's real email. **Google requires a verified email.** If a Google account's email isn't verified, sign-in will fail by design — this protects your user base from unverified identities. **Provider IDs are fixed** (`google`, `apple`). If you ever need to rotate credentials (for example, a leaked secret), contact B2Broker — we can update them without changing the login URLs your users already use. ## Questions / support [#questions--support] Reach out to your B2Broker account manager or support channel with your broker name and which provider(s) you're setting up. Various types of data can be exported as CSV files. This article describes how to export a CSV file containing your client email addresses. Such CSV files may be used to perform bulk actions, identifying the clients to whom bulk actions will apply. Navigate to **Clients** > **General**. You can apply filters to a clients list to display specific records that you want to export. Click **Column visibility** in the upper-right page corner. Hide all the columns except for the **Email** column. Click **Export** in the upper-right page corner. Select the CSV format. Select an export method. You can either send a CSV file to your email address or download it to your computer. The exported CSV file containing email addresses can be used to create a bulk action. To do this, open the file and remove the **Email** column header so that only email addresses are listed in the file. You can import to the Back Office data about clients, their accounts, and [IB programs](../../back-office-guide/introducing-brokers) from a CSV or TSV file. To import data: Navigate to **System** > **Import Data**. Click **+Create** in the upper-right page corner. In the **Title** field, enter a name that you want to assign to your data import operation. In the **Description** field, optionally enter a short description for your import operation. In the **Action** dropdown, select one of the following options: * `import-users` — to import client-related data * `import-accounts` — to import data about accounts for existing clients * `import-ibs` — to import IB-related data for existing clients Below, you’ll find the requirements for the necessary data and formats for each import option. In the **Delimiter** dropdown, select a delimiter character used to separate data contained in a CSV or TSV file (such as `comma`, `semicolon`, or `tab`). Click **Browse** and select a CSV or TSV file for data import. Click **Save** to start the import operation. ### The `import-users` option: [#the-import-users-option] To successfully import client-related data, a CSV or TSV file must include the Email, Last name, and First name headers. If any of these required fields are missing, the import operation will fail. Download the `template_import_users.csv` file that you can use to verify that your CSV file includes the correct headers and data formats. You can use a semicolon or tab as a delimiter instead of a comma in your file. During data import: * If an email address exists in B2CORE, client data will updated with the data from a CSV or TSV file. * If an email address doesn’t exist in B2CORE, a new client profile will be added to it. ### The `import-accounts` option: [#the-import-accounts-option] To successfully import data about client accounts, a CSV or TSV file must include the Email, Account number, Product ID, and Product currency headers. If any of these required fields are missing, the import operation will fail. Download the `template_import_accounts.csv` file that you can use to verify that your CSV file includes the correct headers and data formats. You can use a semicolon or tab as a delimiter instead of a comma in your file. During data import: * If an email address exists in B2CORE, data about client accounts will be added to it. * If an email address doesn’t exist in B2CORE, data about accounts won't be imported. ### The `import-ibs` option: [#the-import-ibs-option] The IB-related data can be imported only from a CSV file. To successfully import this type of data, a CSV file must include the IB Email, Client Email, and IB Type ID headers. If any of these required fields are missing, the import operation will fail. Download the `template_import_ibs.csv` file that you can use to verify that your CSV file includes the correct headers and data formats. You can use a semicolon or tab as a delimiter instead of a comma in your file. During data import: * If an email address specified as **IB Email** exists in B2CORE, this client will be added as an IB partner and the IB-related data will be imported for that client. * If an email address specified as **IB Email** doesn’t exist in B2CORE, the IB-related data won't be imported. After the import operation is finished, you can check its status and click the **Edit** button located in the import operation row to view the **Log messages** and **Error messages** fields listing the details about the records that were successfully imported as well as errors that occurred during import. You can import to the Back Office the data about [user groups](../../back-office-guide/system/users/#groups), including the data about permissions granted to each group, from a JSON file. To import the data about Back Office user groups: Navigate to **System** > **Users** > **Groups**. Click the **Import** button located in the upper-right corner of the page. In the **Import groups** popup, click **Browse** and navigate to a JSON file containing the data that you want to import. To choose how to import the data if a file lists the same user group names as that of the existing groups, select one of the following options in the **Replace** dropdown: * **Enabled** — to replace the existing user groups with the imported user groups. * **Disabled** — to add the imported user groups to the existing ones. In this case, incremental postfixes (such as (1), (2) and so on) are added to the names of the imported user groups. If their names don’t match the existing user group names, such groups are appended to the list of Back Office user groups. Click **Save** to import the data. Use integration with [Salesforce](https://salesforce.com/) to automatically sync client data from B2CORE to Salesforce. This integration helps centralize client information, streamline internal processes, and support sales and marketing workflows within your Salesforce environment. This integration currently supports one-way data transfer from B2CORE to Salesforce; reverse syncing isn’t available. Before proceeding with the instructions, you must sign up for Salesforce and create an **External client app**, which enables external services to interact with the Salesforce API. If you have any questions, consult the official [Salesforce Help Center](https://help.salesforce.com/) or contact their support team. ## Create an External client app in Salesforce [#create-an-external-client-app-in-salesforce] To create an External client app in Salesforce: In Salesforce, go to **Settings** > **Setup**. In the **Setup** section, enter **App Manager** in the search box, and then click it in the search results. Click **New External Client App**. In the **Basic Information** section, fill in the following fields: * **External client app name** — specify the name of your B2CORE instance. If you have several instances, use different names when configuring External client apps for each one in Salesforce. * **API name** — auto-filled based on the app name. * **Contact email** — enter the email address of the contact user. * **Distribution site** — select **Local**. This setting determines who can view and authorize in the created External client app. **Local** means that it's accessible only within your organization. Expand the **API (Enable OAuth Settings)** section and select the **Enable OAuth** checkbox. * In the **Callback URL**, specify `https://login.salesforce.com/services/oauth2/success`. * In the **OAuth scopes**, select the required permissions. The minimum set for API access is: * Manage user data via APIs (api) * Perform requests at any time (refresh\_token, offline\_access) * Access the Salesforce API Platform (sfap\_api) * Select the **Introspect all tokens** checkbox (recommended). This allows the resource server to validate access tokens without calling Salesforce for every request. In the **Flow Enablement** section, select **Enable Client Credentials Flow**. In the **Security** section, select the following: * Enable Client Credentials Flow * Require secret for Web Server Flow * Require secret for Refresh Token Flow * Require Proof Key for Code Exchange (PKCE) extension for Supported Authorization Flows * Issue JWT Web Token (JWT)-based access tokens for named users Click **Save** to create the app. After creating the app, Salesforce generates the **Consumer key** and **Consumer secret**, which serve as the app’s identifier and secret key. You can find them by opening the app card, navigating to **Settings** > **OAuth Settings**, and clicking the **Consumer Key and Secret** button. The **Consumer key** and **Consumer secret** are required for configuring the connection to Salesforce in the B2CORE Back Office. ## Further External client app configuration [#further-external-client-app-configuration] After creating your External client app, proceed with the additional configuration steps: In Salesforce, go to **Setup** > **Users** > **Users** and find the contact user specified during your **External client app** registration. Open the user’s card and in the **Permission set assignments** section, add the **API Enabled permission**. Copy the name from the **Username** field. Go to **Setup** > **External Client Apps** > **External Client App Manager**, and open your app card. In the app card, go to **Policies** > **OAuth Policies** > **OAuth Flows and External Client App Enhancements**, select the checkbox **Enable Client Credentials Flow** and enter the previously copied username. In **Policies** > **OAuth Policies** > **App Authorization**, select **Expire refresh token after specific time** and fill in the following parameters: * **Refresh Token Validity Period** — set to `365`. * **Refresh Token Validity Unit** — select `Days`. * **IP Relaxation** — select `Enforce IP restrictions`. * **Named User JWT-Based Access Token Settings** — select `Set app-specific token timeout (1 Hour)`. Click **Save** to apply the changes. ## Get your Salesforce domain [#get-your-salesforce-domain] In Salesforce, go to **Setup** > **Settings** > **Company Settings** > **My Domain**. Copy the value from the **Current My Domain URL** field. The Salesforce domain is required for configuring the connection to Salesforce in the B2CORE Back Office. ## How to configure a connection to Salesforce in the B2CORE Back Office [#how-to-configure-a-connection-to-salesforce-in-the-b2core-back-office] To configure a connection to Salesforce in the B2CORE Back Office: Navigate to **System** > **External connections**. Click **+Create** in the upper-right page corner. On the **Create connection** page, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **Salesforce**. Click **Save** to create the connection. The **Salesforce** connection will appear in the list of external connections. Click **Edit** to enter the connection details and complete the following fields: * In the **Domain URL** field, provide the URL of your Salesforce instance, such as: `https://{your-domain}.my.salesforce.com` The domain URL can be found in Salesforce by navigating to **Setup** > **Settings** > **Company Settings** > **My Domain**. * In the **Consumer key** field, specify the consumer key generated by Salesforce after creating your **External client app**. * In the **Consumer secret** field, specify the consumer secret generated in the same Salesforce Connected App. The secret is used together with the **Consumer Key** to authenticate API requests. Both the **Consumer key** and **Consumer secret** can be found in the Salesforce app card by navigating to **Settings** > **OAuth Settings** and clicking the **Consumer Key and Secret** button. * In the **Company (applied to all new leads)** field, enter the company name that should appear in Salesforce when creating new lead records, which are the Salesforce records created for each client synced from B2CORE. This field is required for Salesforce. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. After configuring the connection, all clients listed under **Clients** > **General** in the B2CORE Back Office will be automatically synced with Salesforce, where each client is added as a separate lead record. Any further updates to client personal details will also be synced with Salesforce. ## Overview of client data synced with Salesforce [#overview-of-client-data-synced-with-salesforce] The following required and optional client fields are synced from B2CORE to Salesforce in lead records: ### Required fields [#required-fields] The following required client fields are always synced from B2CORE to Salesforce: * **Last name** — if not specified, `Undefined` is sent to Salesforce. * **Company** — the company name specified in the **Company (applied to all new leads)** field of the external connection configured in the B2CORE Back Office is sent to Salesforce. ### Optional fields [#optional-fields] The following optional fields, which can be useful for business processes, are synced from B2CORE to Salesforce if they are specified in the client details in the B2CORE Back Office: * **First name** * **Middle name** * **Email** * **City** * **State** * **Address** * **Postal code** * **Country** and **Country code (ISO)** * **Phone** — if multiple phone numbers are specified for a client in the B2CORE Back Office, the confirmed number is sent to Salesforce; if none is confirmed, the most recently updated number is used. ## How to add custom fields for syncing from B2CORE to Salesforce [#how-to-add-custom-fields-for-syncing-from-b2core-to-salesforce] You can sync additional fields from B2CORE to Salesforce, such as a client’s **Status**, **Verification level**, and **Client type** to reflect them in lead records in Salesforce. In **Salesforce**, add these fields: Sign in to Salesforce. Go to **Setup** > **Object Manger**. Select the **Lead** object. In the object details, select **Fields & Relationships** and click **New**. Select the filed type, such as **Text**. Enter the **Field Label**. The **Field Name** will be auto-filled based on the label. If needed, you can specify additional field parameters. Refer to the [Salesforce Help Center](https://help.salesforce.com/) for more information. Save the changes to add the new field to the object. In the **B2CORE Back Office**, set up field mapping: Navigate to **System** > **External connections**. Find the connection configured for Salesforce and click **Edit** to open the connection details. Set up the field mapping by selecting the corresponding fields created in Salesforce for **Status**, **Client type**, and **Verification level**. Set up field mapping Click **Save** to apply the changes. Once the fields are added and mapped, the client’s **Status**, **Client type**, and **Verification level** are automatically synced from B2CORE and displayed in lead records in Salesforce. If one or more fields aren't mapped, they won't be synced to Salesforce. [Amplitude](https://amplitude.com/) is an event-based analytics platform that can be configured to receive data about client activity in the B2CORE UI, **iOS**, and **Android** apps. It provides insights into engagement, retention, and financial results, helping you evaluate performance and improve your services. ## Key concepts in Amplitude [#key-concepts-in-amplitude] In Amplitude, **events** represent actions that clients perform in B2CORE, such as sign-ups, sign-ins, deposits, withdrawals, wallet creation, and many others. Each event may include **event properties** (for example, platform name, amount, currency, or others) which provide context for deeper analysis. By tracking events, you can better understand client behavior and evaluate how they interact with the B2CORE UI, iOS, and Android apps. **Default Amplitude Events** Amplitude provides a set of default events, such as **Start Session**, **End Session**, and others. These events are marked with the Amplitude logo. **B2CORE-specific events** B2CORE offers a set of pre-defined events, such as **Deposit page clicked**, **Deposit submitted**, **Verification started**, **Verification submitted**, **Wallet created**, **Feedback**, and others. These events start tracking automatically once Amplitude is connected to your B2CORE. The full list of B2CORE-specific events available for tracking is provided in the document **Tracking B2CORE Events with Amplitude**, which can be requested via your account manager. ## Sign up for Amplitude [#sign-up-for-amplitude] Sign up for Amplitude on your own by following the official [Amplitude documentation](https://amplitude.com/docs). You can start with the free version. If you have any questions, contact their support team. ## Create a project and sources in Amplitude [#create-a-project-and-sources-in-amplitude] You should create an **account** for your organization in Amplitude, then create a **project** and add **sources** that represent the origin of the data sent to Amplitude (for example, iOS, Android, Web, or Backend). Sources are added using the appropriate [Amplitude SDK](https://amplitude.com/docs/sdks/analytics) for each platform. Amplitude sources After adding sources, share the generated API keys with B2BROKER so we can complete the SDK setup for you. This setup enables event data from your B2CORE to be sent to Amplitude. ## Check incoming events for Amplitude tracking [#check-incoming-events-for-amplitude-tracking] Once sources are configured and your Amplitude project starts receiving data from B2CORE, all received events are collected in **Data** > **Events**, along with their event properties in **Data** > **Properties**. You must verify incoming events with the `Unexpected` status against the documented events in **Tracking B2CORE Events with Amplitude** to understand their meaning and either add the events that you want to track to your Amplitude plan or delete the ones you don't need. It's recommended to perform event verification carefully, taking into account your Amplitude plan limits. Some events, such as **Page viewed**, occur very frequently (for example, on every page load) and may quickly consume the monthly event quota, potentially exceeding your Amplitude plan. Add events to your Amplitude tracking plan Events included in your Amplitude tracking plan are marked as `Live` and begin tracked in real time. ## Configure data representation in Amplitude [#configure-data-representation-in-amplitude] In your Amplitude project, access the **Dashboard** on the **Home** page. By default, it includes a set of pre-defined widgets with collected data from the default Amplitude events. You can fully customize the **Dashboard** to display the information and charts that are most relevant to you. Amplitude Home ## Build charts in Amplitude [#build-charts-in-amplitude] Charts in Amplitude turn raw event data into visual insights about how clients interact with B2CORE. Each chart is based on the events you track, enabling you to monitor engagement, conversion, retention, and user distribution. This makes it easier to understand client behavior and improve your services. To create a chart, click **Create** > **Charts** and select the desired chart type. For more details on working with charts, see the official [Amplitude documentation](https://amplitude.com/docs). Below are several examples of simple charts that you can build in Amplitude. You can add charts to your **Dashboard**, share them, and export data if needed. ### Segmentation chart [#segmentation-chart] The **Segmentation** chart compares or segments your events by event properties over a selected time period. Segmentation chart The chart above shows the number of unique clients who accessed the IB room over the past year, broken down by country. ### Funnel chart [#funnel-chart] The **Funnel** chart helps you understand how clients navigate within the UI and identify potential problem areas where they tend to drop off. A common example of a funnel is analyzing sign-ups and onboarding. Funnel chart The chart above shows the conversion rate from clients who started registration to those who completed it over the past 7 days. ### User composition [#user-composition] The **User Composition** chart provides insights into the structure of your client base. Unlike event-driven analyses, this chart relies on user properties, such as country, language, platform, or account type, rather than client actions. User composition The chart above shows the distribution of registered clients across different countries, helping you understand where your clients come from and how your client base is organized. B2CORE supports embedding third-party web applications directly into the client UI via an iframe. When a custom menu item is configured with the **Iframe** behavior, B2CORE loads your application inside the interface, providing a seamless experience for clients without leaving the platform. This guide covers two aspects: configuring the custom menu item in the B2CORE Back Office, and preparing your application to work correctly inside the B2CORE iframe. ## Prerequisites [#prerequisites] Before proceeding, ensure the following: * Your application is accessible via HTTPS. * You have access to the B2CORE Back Office with the `Update menu` permission (for details, refer to [How to add a user group and grant permissions](how-to-add-a-user-group-and-grant-permissions)). * You are familiar with the [How to add custom menu items](../manage-advertising-options/how-to-add-custom-menu-items) procedure. ## Step 1. Configure your server to allow iframe embedding [#step-1-configure-your-server-to-allow-iframe-embedding] By default, most web servers and frameworks prevent pages from being embedded in iframes on other domains. To allow B2CORE to load your application, you must configure the appropriate HTTP response headers on your server. You need to set **one or both** of the following headers: ### Content-Security-Policy [#content-security-policy] The `Content-Security-Policy` header with the `frame-ancestors` directive controls which origins are allowed to embed your page. Set this header to include your B2CORE instance origin: ``` Content-Security-Policy: frame-ancestors 'self' https://portal.example.com ``` Replace `https://portal.example.com` with the actual origin of the B2CORE UI used by your clients. You can specify multiple origins separated by spaces if your application needs to be embedded across several B2CORE instances. For more information, refer to the [Content-Security-Policy documentation on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy). ### X-Frame-Options [#x-frame-options] The `X-Frame-Options` header is an older mechanism that achieves a similar result. If you use it, set it to `ALLOW-FROM` with your B2CORE origin: ``` X-Frame-Options: ALLOW-FROM https://portal.example.com ``` The `X-Frame-Options: ALLOW-FROM` directive is not supported by all browsers. It is recommended to use the `Content-Security-Policy` header with the `frame-ancestors` directive as the primary mechanism and include `X-Frame-Options` only as a fallback for older clients. For more information, refer to the [X-Frame-Options documentation on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Frame-Options). ## Step 2. Add a custom menu item in the B2CORE Back Office [#step-2-add-a-custom-menu-item-in-the-b2core-back-office] To make your application accessible to clients, add a custom menu item with the iframe behavior: Navigate to **Promotion** > **Menu**. Click the **eye** icon in the **General** row to view the menu tree. Click **+Create** in the upper-right page corner. Fill in the required fields: * In the **Name** field, enter a unique name for the menu item. * In the **Caption** field, enter the label that clients will see in the menu. * In the **External URL** field, specify the URL of your application. * In the **Icon** field, specify the URL of an SVG icon (16x16 px, monochrome, transparent background). * In the **Custom Behavior** dropdown, select **Iframe**. Configure optional restrictions if needed: * To limit visibility to specific verification levels, select the appropriate levels in the **Verification Level Allowance** dropdown. * To limit visibility to specific client types, select the corresponding types in the **Client Type Allowance** dropdown. Enable the **Visible** checkbox to make the item appear in the menu. Click **Save** to add the custom menu item. When clients click this menu item, your application will load inside an iframe within the B2CORE UI. Two other behavior options are available for custom menu items: **Same tab** (opens the URL in the current browser tab) and **New tab** (opens the URL in a new browser tab). The iframe option is the only one that embeds your application within the B2CORE interface. ## Step 3 (optional). Implement the postMessage communication protocol [#step-3-optional-implement-the-postmessage-communication-protocol] If your application needs to identify the authenticated B2CORE user, match the B2CORE UI theme, or follow the language selected by the user, you can implement the `postMessage` communication protocol described below. This step is optional — if your application does not require user authentication, theme synchronization, or language synchronization, you can skip it. ### Message reference [#message-reference] #### Messages from your application to B2CORE [#messages-from-your-application-to-b2core] | Message type | Description | Payload | | ------------------------- | -------------------------------------------------------------------- | ------------------------------------- | | `embed-iframe-ready` | Signals that the iframe has loaded and is ready to receive messages. | `{ type: "embed-iframe-ready" }` | | `embed-request-jwt-token` | Requests a JWT authentication token from B2CORE. | `{ type: "embed-request-jwt-token" }` | #### Messages from B2CORE to your application [#messages-from-b2core-to-your-application] | Message type | Description | Payload | | ----------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | | `embed-theme-change` | Sent whenever the B2CORE UI theme changes (and once immediately after `embed-iframe-ready`). | `{ type: "embed-theme-change", theme: "dark-theme" \| "light-theme" }` | | `embed-language-change` | Sent whenever the B2CORE UI language changes (and once immediately after `embed-iframe-ready`). | `{ type: "embed-language-change", lang: "" }` | | `embed-jwt-token` | Successful response to a token request. | `{ type: "embed-jwt-token", token: "", expiresAt: "" }` | | `embed-jwt-token-error` | Error response when token generation fails. | `{ type: "embed-jwt-token-error", error: "" }` | | `embed-logout` | Sent when the B2CORE user logs out. Any token previously issued to your app is now invalid. | `{ type: "embed-logout" }` | The `lang` field contains a lowercase ISO 639-1 language code (for example, `en`, `de`, `ar`) matching the language currently selected in the B2CORE UI. A JWT token issued via `embed-jwt-token` is bound to the B2CORE user who was signed in at the time it was issued. When that user logs out, B2CORE sends `embed-logout` and the token must no longer be used. Discard any cached token, stop scheduled refreshes, and clear user-specific state on receipt of this message. If a different user then signs in, request a new token with `embed-request-jwt-token` — a fresh token is issued for the new user. ### Communication flow [#communication-flow] The sequence of messages between your application and B2CORE follows this pattern: **Signal readiness.** When your page finishes loading, send the `embed-iframe-ready` message to B2CORE. This tells the host that your application is ready to receive data. **Receive the current theme.** B2CORE responds with `embed-theme-change` containing the current theme (`dark-theme` or `light-theme`). Apply the theme to your UI. You will also receive this message whenever the user switches themes. **Receive the current language.** B2CORE also responds with `embed-language-change` containing the language code currently selected in the B2CORE UI (for example, `en` or `ar`). Apply the corresponding locale to your UI. You will receive this message again whenever the user changes the language. **Request an authentication token.** When you need to identify the current user, send `embed-request-jwt-token`. B2CORE responds with either `embed-jwt-token` (containing the JWT and its expiration time) or `embed-jwt-token-error` if token generation fails. **Refresh the token before expiry.** The JWT has an expiration time provided in the `expiresAt` field (ISO 8601 format). Request a new token before the current one expires to maintain uninterrupted access. **Handle logout.** When the B2CORE user logs out, B2CORE sends `embed-logout`. On receipt, discard the cached token, cancel any scheduled refresh, and clear user-specific state so no data leaks to the next user. If another user signs in afterwards, request a fresh token with `embed-request-jwt-token`. ### Code example [#code-example] A complete JavaScript snippet you can include in your application: ```javascript (function () { const B2CORE_ORIGIN = '*'; // Replace with your B2CORE instance origin for production let currentToken = null; let tokenRefreshTimer = null; // --- Send a message to B2CORE --- function sendToHost(message) { window.parent.postMessage(message, B2CORE_ORIGIN); } // --- Handle incoming messages from B2CORE --- function handleMessage(event) { const data = event.data; if (!data || !data.type) return; switch (data.type) { case 'embed-theme-change': applyTheme(data.theme); break; case 'embed-language-change': applyLanguage(data.lang); break; case 'embed-jwt-token': handleToken(data.token, data.expiresAt); break; case 'embed-jwt-token-error': console.error('Token error from B2Core:', data.error); break; case 'embed-logout': handleLogout(); break; } } // --- Apply theme to your UI --- function applyTheme(theme) { document.documentElement.setAttribute('data-theme', theme); } // --- Apply language to your UI --- function applyLanguage(lang) { document.documentElement.setAttribute('lang', lang); } // --- Handle received JWT token --- function handleToken(token, expiresAt) { currentToken = token; // Schedule a refresh 2 minutes before expiry if (tokenRefreshTimer) { clearTimeout(tokenRefreshTimer); } const refreshIn = new Date(expiresAt).getTime() - Date.now() - 2 * 60 * 1000; if (refreshIn > 0) { tokenRefreshTimer = setTimeout(requestToken, refreshIn); } else { requestToken(); } } // --- Request a JWT token from B2CORE --- function requestToken() { sendToHost({ type: 'embed-request-jwt-token' }); } // --- Handle B2CORE user logout --- function handleLogout() { // The token is bound to the user who just logged out — stop using it. currentToken = null; if (tokenRefreshTimer) { clearTimeout(tokenRefreshTimer); tokenRefreshTimer = null; } // Clear any user-specific state in your app here. } // --- Initialize --- window.addEventListener('message', handleMessage); sendToHost({ type: 'embed-iframe-ready' }); requestToken(); })(); ``` Replace the `B2CORE_ORIGIN` value with the actual origin of your B2CORE instance (for example, `'https://portal.example.com'`) in production. Using `'*'` is acceptable during development only, as it allows any origin to communicate with your application. ### TypeScript type definitions [#typescript-type-definitions] If your application is built with TypeScript, you can use the following type definitions: ```typescript type EmbedTheme = 'dark-theme' | 'light-theme'; // Messages: Your App -> B2CORE interface EmbedIframeReadyMessage { readonly type: 'embed-iframe-ready'; } interface EmbedRequestJwtTokenMessage { readonly type: 'embed-request-jwt-token'; } type EmbedOutboundMessage = EmbedIframeReadyMessage | EmbedRequestJwtTokenMessage; // Messages: B2CORE -> Your App interface EmbedThemeChangeMessage { readonly type: 'embed-theme-change'; readonly theme: EmbedTheme; } interface EmbedLanguageChangeMessage { readonly type: 'embed-language-change'; readonly lang: string; // ISO 639-1 code, e.g. "en", "de", "ar" } interface EmbedJwtTokenMessage { readonly type: 'embed-jwt-token'; readonly token: string; readonly expiresAt: string; // ISO 8601 } interface EmbedJwtTokenErrorMessage { readonly type: 'embed-jwt-token-error'; readonly error: string; } interface EmbedLogoutMessage { readonly type: 'embed-logout'; } type EmbedInboundMessage = | EmbedThemeChangeMessage | EmbedLanguageChangeMessage | EmbedJwtTokenMessage | EmbedJwtTokenErrorMessage | EmbedLogoutMessage; ``` ## Step 4 (optional). Validate the JWT token [#step-4-optional-validate-the-jwt-token] The JWT token issued by B2CORE can be validated against the JSON Web Key Set (JWKS) endpoint exposed by the B2CORE API (Admin Panel backend). This is typically the API/admin domain, not the client-facing UI domain: ``` https://api./.well-known/jwks.json ``` Use this endpoint to retrieve the public keys needed to verify the token signature. Most JWT libraries support JWKS-based validation out of the box. For manual inspection during development, you can decode and verify JWT tokens using the [JWT decoder tool](https://dinochiesa.github.io/jwt). **See also** [How to add custom menu items](../manage-advertising-options/how-to-add-custom-menu-items) [How to configure a menu in the B2CORE UI](../manage-advertising-options/how-to-configure-a-menu-in-the-b2core-ui) [Menu](../../back-office-guide/promotion/menu) To maintain granular access control, you can allow Back Office users, such as admins or managers, to see only specific clients. You should have a Back Office user created and assigned to a particular user group (for details, refer to [How to add an admin user](how-to-add-an-admin-user) and [How to add a user group and grant permissions](how-to-add-a-user-group-and-grant-permissions)). To make a Back Office user see only specific clients: Navigate to **System** > **Users**. Select the user who you want to be able to see only specific clients. Click the **Edit** button located in the user row. In the **Allowed Client Tags** dropdown, select one or more tags identifying the clients that should be visible to the user (for details, refer to [How to assign tags to clients](../manage-clients/how-to-assign-tags-to-clients)). Click **Save** to apply the changes. The selected Back Office user is now allowed to see only the clients who have been assigned specific tags. The following instruction explains how to migrate clients and their related data, including personal information, accounts, and KYC documents, from an external CRM to B2CORE. The migration process includes importing all required client data, with documents uploaded as digital resources and securely linked to the corresponding client profiles in B2CORE. It's strongly recommended to test the import functionality in a sandbox environment before running a full migration with actual client data. This allows you to understand the process, verify data requirements, and identify any limitations, helping to ensure a safe and error-free migration to production. To migrate clients and their related data to B2CORE: ## Import clients and their personal information [#import-clients-and-their-personal-information] Import the client list and required personal information using the `import-users` option, which is available by navigating to **System** > **Import Data**. For details, refer to [How to import client-related data](how-to-import-client-related-data) and specifically the [import-user option](how-to-import-client-related-data#the-import-users-option). ## Import client accounts [#import-client-accounts] Once clients are imported, proceed to import their account information using the `import-accounts` option, which is also available by navigating to **System** > **Import Data**. For details, refer to [How to import client-related data](how-to-import-client-related-data) and specifically the [import-accounts option](how-to-import-client-related-data#the-import-accounts-option). ## Migrate client KYC documents [#migrate-client-kyc-documents] Transfer documents submitted by clients for KYC verification, such as ID cards, passports, or other types, to B2CORE using the B2CORE API, via the endpoint: `POST` `[host]/api/v2/documents` The B2CORE API is restricted and *not* publicly available. Access to the API and its documentation must be requested via a support ticket, including a clear and detailed description of your intended use cases. By following these steps, you ensure a structured, accurate, and secure migration of client data into B2CORE, minimizing errors and preserving data integrity. Since the middle of July 2026, B2CORE provides new registration settings that replace Registration wizards. The new registration settings work together with custom fields, so you can build a registration process tailored to your needs — from a simple form with an email address and a password to a multi-step process with custom fields. The new registration settings are more flexible and easier to maintain than Registration wizards and the Advanced Data step, which were built for tech-savvy users and were harder to support. If you have mobile applications, do not turn off or delete the existing Registration wizards. End users with older app versions installed cannot register without them. We will monitor the usage of the Registration wizards and remove them in a future release, so keep them as is for now. ## Migration overview [#migration-overview] To migrate to the new registration settings, complete the following steps: 1. Optionally, set up custom fields for any information you want to collect beyond the standard profile fields. 2. Create a registration profile in **System** > **Registration** and configure its fields, options, terms, and custom fields. 3. Enable the registration profile and verify the registration process in the B2CORE UI. ## Step 1. Set up custom fields (optional) [#step-1-set-up-custom-fields-optional] Complete this step only if your registration process requires information beyond the standard fields. To collect standard fields alone, such as an email address, a password, and a phone number, skip to [Step 2](#step-2-create-a-registration-profile). To manage custom fields, navigate to **System** > **Custom Fields**. This menu contains two pages: * **Groups** — sections that organize related fields, such as Personal Information, Tax Information, or Economic Profile. * **Fields** — the individual fields, each belonging to a group and defined with a type, a label, and validation rules. Groups page in the System > Custom Fields menu Fields page in the System > Custom Fields menu To add a field, click **+Create** on the **Fields** page, then enter the label, select the group, set validation rules such as **Required**, and, for select fields, add the options that clients choose from. Field creation form with label, group, validation, and options For details on creating and managing custom fields, refer to [Custom fields](../../back-office-guide/system/custom-fields). ## Step 2. Create a registration profile [#step-2-create-a-registration-profile] To create a registration profile: Navigate to **System** > **Registration**. Click **+Create** in the upper-right page corner, then select the profile type to create, such as an individual registration profile. In the **General Settings** section, fill in the following fields: * **Caption** — the profile name displayed to clients as the registration option on the **Sign up** page in the B2CORE UI. * **Status** — set to **Enabled** to make the profile available on the **Sign up** page, or **Disabled** to hide it. * **Register As (Client Type)** — the client type assigned to clients who register through this profile, such as individual or corporate. * **Verification Level** — the initial verification level assigned to clients after registration. In the **Fields Configuration** section, enable the standard fields that clients fill in during registration, such as **Email**, **Password**, **First Name**, **Last Name**, **Country**, and **Phone**, and disable the fields you do not need. In the **Registration Options** section, select the options to apply, such as **Require age 18+**, which validates the **Birthday** field, and **Require email confirmation**. General settings, fields configuration, and registration options for a registration profile In the **Terms & Conditions** section, click **+Add Term** to add each agreement that clients accept during registration, then set its translation key and fallback caption. The fallback caption supports links, so you can point clients to a Customer Agreement or another document. In the **Custom Fields** section, select the custom fields to show in the registration form. * By default, custom fields are displayed on multiple pages, grouped by the groups you set up in Step 1. * To show all custom fields on a single registration step, select **Don't split fields by groups**. To show a custom field only when another field has a specific value, use the **Conditional Display** section. Click **+Add Rule**, select the field to show, the field to check, and the value that triggers it. Both fields must also be selected in the **Custom Fields** section. Terms and conditions, custom fields, and conditional display for a registration profile Click **Save** to create the registration profile. ## Localize fields and terms [#localize-fields-and-terms] Fill in all captions, custom fields, and terms and conditions in English first, then translate them into the languages you support in B2TRANSLATE. To transfer the translatable keys to B2TRANSLATE, click **Copy B2TRANSLATE keys JSON** in the upper-right corner of the registration profile page. The button copies the translatable keys for all custom fields and terms and conditions in the profile as JSON, which you then paste into B2TRANSLATE to translate into every language you need. ## Step 3. Verify the registration process [#step-3-verify-the-registration-process] After you set the profile status to **Enabled**, the corresponding registration option is displayed to clients on the **Sign up** page in the B2CORE UI. Complete a test registration to confirm that the fields, options, and custom fields behave as expected. The values that clients fill in for custom fields are available for each client in the **Clients** > client profile > **Custom fields** tab in the B2CORE Admin Panel, where an admin can also view and edit them. Keep the existing Registration wizards enabled until you no longer support the older mobile app versions. For details on the previous approach, refer to [How to set up the Registration wizard](how-to-set-up-the-registration-wazard). **See also** * [Custom fields](../../back-office-guide/system/custom-fields) These instructions explain how to set up 2FA services in the Back Office, enabling your clients to use Google Authenticator or SMS for 2FA in the B2CORE UI to secure their profiles. ## How to set up 2FA with Google Authenticator [#how-to-set-up-2fa-with-google-authenticator] To provide your clients with the option to use Google Authenticator for 2FA in the B2CORE UI, configure the following settings in the Back Office: Navigate to **System** > **Settings** and configure the following options in the **Two-factor authentication** section: * **Enabled Two-factor auth providers** — select **Google Authenticator** to make this 2FA option available to your clients in the B2Core UI. * **Google authenticator service name** — enter a name (for example, your company name) that will be displayed to clients in the Google Authenticator app. This name can be changed if needed. For more details, refer to [Settings](../../back-office-guide/system/settings). Verify the configuration of the related wizards: * **2FA Google Authenticator** * **2FA Google Auth** Ensure these wizards are enabled and have no restrictions: * Navigate to **System** > **Wizards**. * Find the required wizard and click **Edit**. * Go to the **Workflow** tab. * For each wizard step, click **Actions**, then select **Country restrictions**, **Client type restriction**, or **Jurisdiction restriction**. * In the **Restrictions** popup for each option, confirm that **Enabled** is set to **No**. Clients can now enable and use 2FA via Google Authenticator in the B2CORE UI to secure their profiles. ## How to set up 2FA with SMS [#how-to-set-up-2fa-with-sms] Before setting up 2FA with SMS, make sure that you have added and configured a 2FA SMS provider (such as [Twilio](../manage-communication-platforms/how-to-configure-twilio) or Vonage). To provide your clients with the option to use 2FA via SMS in the B2CORE UI, configure the following settings in the Back Office: Navigate to **System** > **Settings** and configure the following options: In the **Client settings** section: * **Unique phone** — select **Enabled** to ensure phone numbers are unique for each client. In the **Other settings** section: * **Confirmation phone code lifetime** — specify the period, in seconds, during which a verification code sent to a client phone number is valid. * **Sms limit for each recipient** — specify the maximum number of verification code messages that can be requested by a client per day. In the **Two-factor authentication** section: * **Enabled two-factor auth providers** — select **SMS** to make this 2FA option available to your clients in the B2Core UI. For more details, refer to [Settings](../../back-office-guide/system/settings). Create a template for delivering 2FA codes via SMS: * Navigate to **System** > **Templates** > **Sms** > **Confirmation Templates**. * Click **+Create** in the upper-right page corner. * On the **Create template** page, fill in the following fields: * In the **Name** field, enter `default`. * In the **Caption** field, enter a name that you want to use for the template in the Back Office (such as `2FA SMS`). * In the **Template** field, specify the message text, such as: `: Your verification code is %CODE%.` * Click **Save** to save the template. Verify the configuration of the related wizards: * **2FA SMS** * **2FA SMS Auth** * **Phone Confirm** Ensure these wizards are enabled and have no restrictions: * Navigate to **System** > **Wizards**. * Find the required wizard and click **Edit**. * Go to the **Workflow** tab. * For each wizard step, click **Actions**, then select **Country restrictions**, **Client type restriction**, or **Jurisdiction restriction**. * In the **Restrictions** popup for each option, confirm that **Enabled** is set to **No**. Clients can now enable and use 2FA via SMS in the B2CORE UI to secure their profiles. In addition, you can enable client phone number confirmation during registration by delivering verification codes via SMS (for details, refer to [How to add and configure the registration wizard](how-to-set-up-the-registration-wazard/how-to-add-and-configure-the-registration-wizard)). ### How to test operation of 2FA with SMS [#how-to-test-operation-of-2fa-with-sms] After you have configured 2FA with SMS in the Back Office, you can test its operation as follows: Sign in to the B2CORE UI. Click the profile icon in the upper-right page corner, and then select **Security** in the dropdown. In the **Two-factor authentication** section, enable the **SMS Confirmation** option. Enter your phone number in the displayed form. Click **Continue**. If you have received a verification code to a specified phone number, 2FA with SMS operates properly. You can configure a connection to the Apple Push Notification service (APNs) to enable your deployed [iOS app](../../b2core-mobile/deploying-your-ios-app) to send push notifications when the following events occur: * a deposit request is created * a request to update a client's verification level is created * an existing announcement is updated * a HelpDesk response is received To configure a connection to the APNs: Navigate to **System** > **External Connections**. Click **+Create** in the upper-right corner of the page. On the **Create connection** field, fill in the following fields: * In the **Name** field, enter a name for the connection. The name must be unique. * In the **Caption** field, enter a caption that will be applied to the connection in the Back Office. * In the **Provider** dropdown, select **ApplePushNotification**. Click **Save** to create the connection. The **ApplePushNotification** connection will appear in the list of external connections. Click **Edit** to enter the connection details and complete the following fields: * In the **App key id** field, enter the key identifier of your iOS app. * In the **App team id** field, enter the identifier assigned to your development team after enrolling in the Apple Developer Program. * In the **App bundle id** field, enter the bundle identifier of your iOS app. * In the **Private key content** field, enter your private key required to access and authenticate communication with the APNs. * In the **Production** dropdown, select **Yes** to enable your iOS app to send push notifications. Check the connection status. If the connection is inactive (**No** is displayed in the **Enabled** field), activate it by setting the **Enabled** dropdown to **Yes**. Click **Save** to apply the changes. Push notifications will now be delivered to clients who have installed and signed in to your iOS app. You can set up event notifications to be sent to [Back Office users](../../back-office-guide/system/users/#users) through the following channels: email, SMS, Slack, or Telegram. ## Prerequisites [#prerequisites] The following prerequisites are required before setting up event notifications: * If you plan to send event notifications through Slack or Telegram, create and configure a corresponding bot, and then specify the bot token in the **Slack bot** or **Telegram bot** field on the **System** > **Settings** page. To learn how to obtain the bot tokens, refer to [How to set up a Slack bot](../manage-communication-platforms/how-to-set-up-a-slack-bot) and [How to set up a Telegram bot](../manage-communication-platforms/how-to-set-up-a-telegram-bot). * If you plan to send event notifications as direct Slack or Telegram messages to Back Office users, specify for each user their Slack and Telegram identifiers in the **Slack chat Id** and **Telegram chat Id** fields on the [Back Office user details page](../../back-office-guide/system/users/#details). To learn how to get a user’s Telegram identifier, refer to [How to get Telegram chat, group and channel identifiers](../manage-communication-platforms/how-to-get-telegram-chat-group-and-channel-identifiers). * Create notification templates for each channel through which you plan to deliver event notifications. To do this, navigate to **System** > **Templates**, and then select a channel for which you want to create templates. To view the examples of email, SMS, Slack, and Telegram templates, refer to[Templates](../../back-office-guide/system/templates/). After fulfilling the prerequisites, set up an event notification as follows: Navigate to **System** > **Event Notifications**, and click **+Create** in the upper-right corner of the page. In the **Event** dropdown, select an event for which you want to trigger notifications when the event occurs (for details, refer to [Event types for triggering event notifications for Back Office users](../../back-office-guide/references/event-types-for-triggering-event-notifications-for-back-office-users)). In the **Description** field, specify a short description for the event notification. In the **Users** field, specify the email addresses of Back Office users that will receive notifications. To add all Back Office users to the list of notification recipients, click **All users**. Enable one or several channels to deliver notifications. The available options: **Email**, **Sms**, **Slack,** and **Telegram**. * After enabling the **Email** or **Sms** option, expand the **Template** dropdown and select a notification template. Email and Sms notification options * After enabling the **Slack** or **Telegram** option, do the following: * Select **Private** to send notifications to the recipients as direct Slack or Telegram messages. The messages are sent to the chats that are specified in the **Slack chat Id** and **Telegram chat Id** fields on the [Back Office user details page](../../back-office-guide/system/users/#details). * Select **Group** to send notifications to a specific group or channel. * In the displayed **Group Id** field, specify the identifier of a group or channel to which notifications will be delivered (for details, refer to [How to get Telegram chat, group, and channel identifiers](../manage-communication-platforms/how-to-get-telegram-chat-group-and-channel-identifiers)). * In the **Template** dropdown, select a notification template. Slack and Telegram notification options In the **Enabled** dropdown, select **Enabled** to send notifications after the selected event occurs. Click **Save** to save the notification settings. When switching from SupportPal to Zendesk, you aim for clients to submit new tickets only through Zendesk but still be able to view their SupportPal ticket history. To prevent clients from submitting new tickets via SupportPal while allowing them to view their existing tickets: Navigate to **System** > **External connections**. Locate the connection with `SupportPal` in the **Provider** column and click **Edit**. On the **Edit connection** page, set the **Read-only** option to **Yes**. Click **Save** to apply the changes. This guide is for brokers who want another application — your own product, a partner's app, or an identity platform like Keycloak — to let users sign in with their existing B2CORE account, instead of building a separate login. B2CORE acts as the **OpenID Connect (OIDC) identity provider**. Your application (the relying party) redirects users to B2CORE to log in, and gets back a token proving who they are. Users authenticate once against their B2CORE identity; they do not create a separate account for your app. This enables **single sign-on (SSO)**: users sign in once with their B2CORE account and gain access to your connected application without a separate login. This feature has a **one-time setup fee**. Contact your account manager or our support team to confirm the fee and availability before requesting access. ## Is this the right fit? [#is-this-the-right-fit] Use this if: * You have a web or mobile app and want a "Sign in with B2CORE" option. * You want to federate B2CORE into another identity system you already run (for example, add B2CORE as an identity provider inside your own Keycloak realm). This is standard OAuth2 / OIDC — any mainstream library or identity platform (Keycloak, Auth0, `oidc-client-ts`, `openid-client`, `go-oidc`, Passport, NextAuth, and others) can consume it, since everything the client needs is published in one discovery document. ## What you need to decide before requesting access [#what-you-need-to-decide-before-requesting-access] Have answers to these ready — your account manager will ask for them when registering your application: | Item | What we need | | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Application name** | A short, human-readable name (for our records and any consent screen). | | **Redirect URI(s)** | The exact URL(s) in your app that should receive the login response, for example `https://app.example.com/auth/callback`. Must be exact — scheme, host, path, and trailing slash all matter. | | **Post-logout redirect URI(s)** | Where users land after logging out, for example `https://app.example.com/`. | | **Scopes** | `openid` is always required. Add `profile` and `email` if you need the user's name/email. Add `offline_access` only if you need long-lived refresh tokens. | ## What you'll receive from us [#what-youll-receive-from-us] Once your application is registered, you'll receive: * A **Client ID** (matches the application name you provided). * A **Client Secret**, delivered through a secure channel. Store it the way you'd store a database password; it does not expire but can be rotated on request (see [Good to know](#good-to-know)). * The OIDC discovery URL for your B2CORE instance: ``` https:///srvsz/auth/hydra/v1/.well-known/openid-configuration ``` Point your OIDC library at this single URL — it will discover the authorization, token, userinfo, JWKS, and logout endpoints on its own. You should not need to hard-code any of the individual endpoints. ## Integrating your application [#integrating-your-application] 1. Configure your OIDC client library with the discovery URL, Client ID, and Client Secret above. 2. Use the **Authorization Code flow with PKCE** if your library supports it (recommended for both web and mobile apps). 3. Request only the scopes you actually need — `openid` at minimum, plus `profile`, `email`, and `offline_access` as applicable. 4. For the user's profile info, call the `/userinfo` endpoint (or decode the `id_token`) rather than trying to read anything out of the `access_token` — the access token is opaque and not meant to be parsed. 5. To log a user out, redirect them to the discovery document's `end_session_endpoint` with `id_token_hint` and your registered `post_logout_redirect_uri`. **Federating instead of integrating a custom app?** If you're adding B2CORE as an identity provider inside another identity platform you run (for example, Keycloak) rather than a custom app, configure it as a generic OpenID Connect provider using the same discovery URL, Client ID, and Client Secret above — the exact steps depend on your platform. Some platforms use a fixed callback URL tied to a provider alias you choose (Keycloak's broker endpoint is one example); if yours does, agree on that alias with us before we register your redirect URIs, since they must match exactly. ## Good to know [#good-to-know] **Logout is local only.** Redirecting to the logout endpoint ends the session for your app; it does not sign the user out of B2CORE itself or any other app they're signed into. There is no cross-app "logout everywhere" today. **Refresh tokens are one-shot.** Each refresh returns a new refresh token that replaces the previous one — don't reuse an old one after refreshing. **Redirect URIs must match exactly.** Add any local/dev URLs you need during testing to your initial request; changing them later means contacting us again. **Rotating your Client Secret** requires contacting B2Broker support. There is a short window between us generating the new secret and you updating your app where logins with the old secret will fail — plan the swap for low-traffic hours. ## Testing after setup [#testing-after-setup] 1. Trigger the login flow from your application (or your identity platform, if federating) and confirm it redirects through B2CORE's login page. 2. Log in with a real B2CORE account and confirm you land back in your app, signed in, with the expected user info. 3. If you requested `offline_access`, test a token refresh. 4. Test the logout flow and confirm it clears your app's session. ## Questions / support [#questions--support] Reach out to your B2Broker account manager or support channel with your broker name and the application details from the [table above](#what-you-need-to-decide-before-requesting-access). ## Problem [#problem] A [Back Office user](../../back-office-guide/system/users/users) encounters the `403 Access Denied` error when attempting to approve or reject client requests. ## Possible reasons [#possible-reasons] This issue occurs if the user lacks the required permissions. Permissions from multiple categories must be granted. ## Solution [#solution] To verify and update the permissions: In the Back Office, navigate to **System** > **Users** > **Groups**. Locate the group in which the Back Office is included. Users in the **Administrators** group are granted all available permissions. This group can’t be removed and its permissions can’t be modified. Click the **Edit** button to open the group details. In the **Right** section, ensure the permission in the following categories are enabled: * **Clients** > **Client's request** — enable the permissions related to the required request types, such as: * `View client's requests with type Deposit` * `Update client's requests with type Deposit` * and other permissions. * **Finance** — enable the permissions related to the required operations. * **System** > **Requests** — enable the following permissions: * `View request resolutions` * `View request resolutions types` Alternatively, a user can be reassigned to the group that already has all the required permissions for managing client requests. Click **Save** to apply the changes. All Back Office users included in this group will now have these permissions. With them enabled, users will be able to approve and reject client requests without encountering the `403 Access Denied` error. The Back Office user must sign out and sign in to the Back Office again for the permissions to take effect. ## Problem [#problem] A client has enabled either **Google Authenticator** or **SMS confirmation** in the **Security** section of the B2CORE UI, but can't receive 2FA codes. ## Possible reasons [#possible-reasons] **Google Authenticator**: * The client has lost access to the app or the device on which it was installed. * The app isn't generating valid codes due to incorrect time synchronization on the device. **SMS confirmation**: * The SMS provider configuration in the Back Office is incomplete or incorrect. * Your SMS provider account doesn't have sufficient balance. * The SMS provider service is temporarily unavailable. * The client’s mobile operator blocks or delays SMS messages. ## Solution [#solution] To fix 2FA issues: ### Verify client 2FA settings [#verify-client-2fa-settings] * In the Back Office, navigate to **Clients** > **General**. * Find the client in the list and click the **Edit** button. * In the client details, go to the **Settings** tab. * In the **2FA** section, check whether one of the 2FA options is enabled for the client. If not, the client must enable 2FA in the **Security** section in the B2CORE UI. 2FA section in client details ### Troubleshoot Google Authenticator [#troubleshoot-google-authenticator] If the client can't generate valid codes or has lost access to the app or device: * You may disable the option on the **Settings** tab in the client details in the Back Office. * Ask the client to re-enable the Google Authenticator 2FA in the **Security** section in the B2CORE UI. Disabling 2FA removes an additional layer of protection. This action should only be performed at the explicit request of the client and under their sole responsibility. ### Troubleshoot SMS confirmation [#troubleshoot-sms-confirmation] * In the Back Office, navigate to **System** > **SMS providers**. * In the provider list, click the **Edit** button for the related provider, such as **Twilio**, to open its configuration details. * In the the **Provider settings** section: * Verify that the credentials are correct. * Ensure that the configuration is enabled. * Confirm that your SMS provider account has a sufficient balance for message delivery. Twilio provider settings If the configuration is correct but issues persist, contact the SMS provider to check for service disruptions or delivery issues with the client’s number. ## Problem [#problem] A client doesn't receive various emails from B2CORE, such as account creation confirmations, deposit notifications, or other system messages. ## Possible reasons [#possible-reasons] This issue may occur due to one or more of the following: * Emails being marked as spam or junk by the client’s email provider. * Incorrect or misconfigured SMTP settings in the B2CORE Back Office. * Emails stuck in the queue. * Missing or misconfigured email templates. * Issues with the email service provider, such as exceeded credits, service delays, or downtime. ## Solution [#solution] To address email delivery issues: ### Check spam and junk folders [#check-spam-and-junk-folders] Ask the client to check their spam or junk folders, especially if the email status is marked as successful in **Mailing** > **System** > **Logs** in the B2CORE Back Office. ### Verify SMTP settings in the B2CORE Back Office [#verify-smtp-settings-in-the-b2core-back-office] If multiple clients experience delivery issues, verify your [SMTP configuration settings](../../how-to-articles/manage-mailing-options/how-to-configure-smtp): * Navigate to **Mailing** > **System** > **Providers**. * Click the **Edit** button for the relevant SMTP configuration to open its details. * Click the **Test connection** button to validate the SMTP settings. * A checkmark on the **Test connection** button means the settings are properly configured. * A red **Test connection** button indicates errors in the settings, which will be listed. * Correct the settings and test again until the SMTP configuration is successful. * Ensure that the configuration is enabled. For details, refer to [How to configure SMTP](../../how-to-articles/manage-mailing-options/how-to-configure-smtp). ### Track an email delivery in the Email log [#track-an-email-delivery-in-the-email-log] * Navigate to **Mailing** > **System** > **Log**. * Locate the required email and check its delivery status: IN PROGRESS, FAIL, or SUCCESS. * For failed emails, check the **Reason** column to identify the issue. ### Check email templates in the B2CORE Back Office [#check-email-templates-in-the-b2core-back-office] * Navigate to **System** > **Templates** > **Email** > **Templates**. * Ensure that the template for the relevant notification exists and is properly configured (for details, refer to [How to configure email templates](../../how-to-articles/manage-system-settings/how-to-configure-email-templates)). * Ensure that the email template is enabled. ### Check the email provider operation [#check-the-email-provider-operation] If emails are delayed, verify that your email service provider is operational and that your account has sufficient credits or an active subscription. ## Problem [#problem] Clients don’t see their initiated transactions, such as deposits, withdrawals, transfers, internal transfers, or exchanges, in the **Transaction History** or the respective sections of the **Funds** menu in the B2CORE UI. ## Possible reasons [#possible-reasons] This issue may occur due to incorrect configuration of [operation types](../../back-office-guide/system/operation-types) in the B2CORE Back Office. ## Solution [#solution] To check the operation type configuration: In the Back Office, navigate to **System** > **Operation types**. Locate the required operation type, for example, `payouts`, which is used to control withdrawal transactions. Ensure that this operation type is enabled; otherwise, clients won’t be able to execute transactions of this type in the B2CORE UI. Click the **Edit** button to open the operation type details. Check the **Allowed operation status** list. If one or more statuses aren't selected, clients won’t see transactions in those statuses in the B2CORE UI. For example, if only the **Done** status is enabled for the `payouts` operation type, clients will see only their withdrawals in the **Done** status, but not those in other statuses. Allowed statuses for the payouts operation type Add all relevant statuses to the **Allowed operation status** list. Click **Save** to apply the changes. ## Problem [#problem] A client encounters the following error when attempting to exchange one currency for another in the B2CORE UI: `Exchange Rate error: the rate for this pair cannot be found, please try another pair`. ## Possible reasons [#possible-reasons] This issue may occurs due to one or more of the following: * One or both currencies aren't added in the B2CORE Back Office. * The selected currency pair isn't configured or is disabled in the B2CORE Back Office. * The exchange rate provider configuration is incomplete or incorrect. ### Solution [#solution] To fix the exchange issue: ### Verify that currencies exist in the B2CORE Back Office [#verify-that-currencies-exist-in-the-b2core-back-office] * Navigate to **Currencies** > **Currencies**. * Ensure that both currencies involved in the exchange are added. If not, add the missing currencies (for details, refer to [How to add a currency](../../how-to-articles/manage-currencies/how-to-add-a-currency)). ### Verify that the currency pair is configured in the B2CORE Back Office [#verify-that-the-currency-pair-is-configured-in-the-b2core-back-office] * Navigate to **Currencies** > **Currency pairs**. * Confirm that the required currency pair is configured and enabled. If not, add or enable it (for details, refer to [How to add an exchange currency pair](../../how-to-articles/manage-currencies/how-to-add-an-exchange-currency-pair)). ### Check that the exchange rate provider is properly configured in the B2CORE Back Office [#check-that-the-exchange-rate-provider-is-properly-configured-in-the-b2core-back-office] * Navigate to **Currencies** > **Rates**. * Locate the provider used to supply rates for the required currency pair, for example B2BINPAY, and click the **Edit** button to open its details. * Verify its configuration and credentials (for details, refer to [How to configure currency exchange rates](../../how-to-articles/manage-currencies/how-to-configure-currency-exchange-rates)). After confirming that currencies, currency pairs, and provider settings are correctly configured, the exchange should work without errors. ## Problem [#problem] You have enabled a new language in the Back Office under **System** > **Localization**, but translations in this language appear blank in the B2CORE UI. ## Possible reasons [#possible-reasons] This issue may occur because the newly enabled language hasn’t yet been added to B2TRANSLATE, which is a tool for managing translations for all supported languages in the B2CORE UI. For more information about B2TRANSLATE, refer to the [product documentation](https://docs.b2translate.b2broker.com/). To complete the steps below, you must be registered on B2TRANSLATE and have access to the project linked to your B2CORE. ## Solution [#solution] To check the language configuration in B2TRANSLATE: In the B2CORE Back Office, navigate to **System** > **Settings** to locate the UUID of the B2TRANSLATE project linked to your B2CORE and copy it. Sign in to B2TRANSLATE. Go to **Languages** and verify if the newly enabled language is available for your B2TRANSLATE projects. Go to **Projects** and find the related project by the UUID copied from the B2CORE Back Office. Click the **pencil** icon to edit the project. In the popup, check the **Languages** dropdown. If the required language is missing, add it. Edit a project in B2TRANSLATE Click **Save** to apply the changes. Configure translations for the added language (for details, refer to [Manage translations](https://docs.b2translate.b2broker.com/user-guide/manage-translations) in the [B2TRANSLATE documentation](https://docs.b2translate.b2broker.com/)). ## Problem [#problem] You've assigned a translation to a key in B2TRANSLATE, but a different translation is displayed for the this key in the B2CORE UI. For more information about B2TRANSLATE, refer to the [product documentation](https://docs.b2translate.b2broker.com/). ## Possible reasons [#possible-reasons] This issue may occur due to one of the following: * **B2TRANSLATE update delay**: updates in B2TRANSLATE may take a few minutes to appear, so the B2CORE UI might show the old translation temporarily. * **Overridden translation in B2CORE Back Office**: another translation may be assigned to this element in the B2CORE Back Office, where the localization option is available. If a field supports localization in the B2CORE Back Office, the localization button appears on its right side. Clicking this button opens a list of available languages where you can specify translations. ## Solution [#solution] To check and remove overridden translations: In the B2CORE Back Office, navigate to the respective menu. For example, **Products** > **Groups**. Click the **Edit** button for the relevant group to open its details. The **Caption** and **Description** fields support localizations. Click the button on the right side of the fields to view if any translations are applied to the fields and remove those that may override the B2TRANSLATE ones. Localization options for fields ## Problem [#problem] After signing in to the B2CORE UI and completing 2FA (if enabled), a client encounters the `404 Not Found` error and sees a blank page. ## Possible reasons [#possible-reasons] This issue may occur if the client doesn't have permissions to view the main menu due to restrictions based on **verification level** or **client type**. ## Solution [#solution] To check and update the main menu visibility settings: In the Back Office, navigate to **Promotion** > **Menu**. Ensure that the toggle in the **Visible** column is enabled for the **General** row. If disabled, clients will remain stuck on the **Sign In** page after entering their credentials. The main menu visibility option Click the **Edit** button in the **General** row to open the details. Check the **Verification level allowance** and **Client type allowance** lists. Make sure the client’s verification level and client type are included in those lists; otherwise, the main menu won't be displayed to that client. Verification level and client type restrictions for the main menu Click **Save** to apply the changes. Click the **eye** icon located in the **General** row to view the menu tree. The menu tree Verify that the **Visible** toggle is enabled for all menu items that you want to display in the main menu. For each menu item, click the **Edit** button and check the **Verification level allowance** and **Client type allowance** lists. Adjust them if necessary. The **Visible** toggle must be enabled for the **General** row and all required menu items. In addition, the **Verification level allowance** and **Client type allowance** lists for both the **General** row and menu items must be properly configured to ensure that clients with the appropriate verification levels and client types can access the menu. ## Problem [#problem] Clients may encounter various sign-in issues when using the mobile app on **iOS** or **Android**, such as: * The **Sign In** button not responding * Sessions closing immediately after sign-in * Valid credentials not being accepted * Biometric options (Face ID or fingerprint) not working ## Possible reasons [#possible-reasons] * Background processes interfering with the app * Expired or corrupted session data * Outdated app version or corrupted installation * Device OS not updated * Cache-related issues (for Android only) ## Solution [#solution] To resolve most sign-in issues: ### Force close and reopen the app [#force-close-and-reopen-the-app] Sometimes background processes cause unexpected issues. Fully close the app from recent apps, and then reopen it. ### Sign out of the app and sign in again [#sign-out-of-the-app-and-sign-in-again] If the session expires quickly, manually sign out of the app (if possible), and then sign in again. ### Reinstall the app [#reinstall-the-app] * Uninstall the app. * Download and reinstall it from **App Store** (iOS) or via the APK file (Android). ### Update the app [#update-the-app] * Check for the latest version in the **App Store** (iOS) or via the APK file (Android). * Install updates to ensure compatibility and bug fixes. ### Check for OS updates [#check-for-os-updates] * On iOS, go to **Settings** > **General** > **Software update**. * On Android, go to **Settings** > **About phone** > **System update** (or **Software updates**, depending on your device). * Install any available updates, as outdated OS versions can cause incompatibility. ### Clear app cache (for Android only) [#clear-app-cache-for-android-only] Go to **Settings** > **Apps** > **\{App name}** > **Storage** > **Clear cache**. ## Problem [#problem] A client can't to create a trading account via the B2CORE UI and encounters an error. ## Possible reasons [#possible-reasons] This issue may occur due to one or more of the following: * The connection to the trading platform is misconfigured or disabled. * The product settings prevent account creation (for example, limits on accounts or deposit requirements). * The product currency group isn't properly mapped to the platform. * Client-specific account limits are exceeded. ## Solution [#solution] To check the required settings related to creating accounts on trading platforms: ### Check the trading platform connection settings [#check-the-trading-platform-connection-settings] * In the Back Office, navigate to **Products** > **Platforms**. * Click the **Edit** button for the relevant platform to open its details. * Click **Test connection** to validate the connection settings. * A checkmark on the **Test connection** button means the connection is properly configured. * A red **Test connection** button indicates errors in the settings, which will be listed. * Correct the settings and test again until the connection is successful. * Ensure the connection is enabled. ### Check the setting of the related product used for creating account on a specific platform [#check-the-setting-of-the-related-product-used-for-creating-account-on-a-specific-platform] * In the Back Office, navigate to **Products** > **Products**. * Click the **Edit** button for the relevant product to open its details. * Review the following fields: * **Max accounts** – the maximum number of accounts a client can create per currency for this product. The client may have exceeded this limit. * **Min deposit amount (USD)** – the minimum deposit required to open an account. If the client doesn’t meet this requirement, the account can’t be created. For more details about these settings, refer to refer to [Products](../../back-office-guide/products/products#details). ### Verify that the product currency is assigned to the correct platform group [#verify-that-the-product-currency-is-assigned-to-the-correct-platform-group] * In the Back Office, navigate to **Products** > **Products**. * Click the **Edit** button for the relevant product to open its details. * Go to the **Currencies** tab. * Click the **Edit** button for the required currency. * Check the selected group in the **Platform group** dropdown and adjust it if needed. These are the groups created on the respective platform. The available currency options are limited by the settings of the configured platform groups. ### Check the limit on the number of allowed accounts in the client details [#check-the-limit-on-the-number-of-allowed-accounts-in-the-client-details] * In the Back Office, navigate to **Clients** > **General**. * Click the **Edit** button for the relevant client. * Go to the **Settings** tab. * Review the fields: * **Max Demo Trading Accounts** * **Max Live Trading Accounts** If limits are set in these fields, they override the product settings. The client may have already reached the maximum number of allowed accounts. You can adjust the limits if needed. ## Problem [#problem] A client's trading account in the B2CORE Back Office appears in the status **E** (Error) or **A** (Archived). ## Possible reasons [#possible-reasons] * The account has been archived in B2CORE. * The account was archived or deleted on the trading platform but remains visible in B2CORE. * A connection issue is preventing proper synchronization of account status. ## Solution [#solution] To troubleshoot these statuses: ### Unarchive an account in the B2CORE Back Office (if required) [#unarchive-an-account-in-the-b2core-back-office-if-required] * Navigate to **Clients** > **Accounts**. * Find the account in the list and click the **Edit** button to open its details. * Click the **Actions** button in the upper-right corner and select **Unarchive** in the dropdown. ### Handle an account in the E (Error) status [#handle-an-account-in-the-e-error-status] The account in the **E** status usually indicates that it was archived or deleted on the trading platform. To fix it, restore or unarchive the account on the trading platform. Once restored, the updated status will sync with B2CORE. ### Check the trading platform connection settings [#check-the-trading-platform-connection-settings] If an account appears in the **A** (Archived) status but is expected to be active, check the trading platform connection. For details, refer to **Step 1** in [Clients can't create trading accounts via the B2CORE UI](clients-can-not-create-trading-accounts-via-the-b2core-ui). ### Hide an account in the B2CORE UI if can't be unarchived or restored [#hide-an-account-in-the-b2core-ui-if-cant-be-unarchived-or-restored] If an account can't be unarchived or restored on the trading platform, remove the `Visible` permission for the account in the B2CORE Back Office. This ensures the account won't be displayed to the client in the B2CORE UI. To do this: * Navigate to **Clients** > **Accounts**. * Find the account in the list and click the **Edit** button to open its details. * In the Rights list, remove the `Visible` permission. * Click **Save** to apply the changes. Remove Visible from the Rights field ## Problem [#problem] A client can't submit a verification request in the B2CORE UI and encounters an error. ## Possible reasons [#possible-reasons] This issue may occur due to one or more of the following: * The required verification level isn't available to the client. * The KYC provider connection isn't properly configured or disabled in the B2CORE Back Office. * Your KYC provider subscription or plan is invalid, inactive, or unpaid. ## Solution [#solution] To fix verification issues: ### Check the availability of verification levels [#check-the-availability-of-verification-levels] * In the Back Office, navigate to **Verification** > **Levels**. * On the **Levels** page, check the **Visible** column and ensure the relevant level is marked as visible so that clients can obtain it. * To make the level visible, click the **Edit** button to open the level details and select **Yes** in the **Visible** dropdown. * Click **Save** to apply the changes. ### Check the KYC provider connection settings [#check-the-kyc-provider-connection-settings] * In the Back Office, navigate to **System** > **External connections**. * Locate the connection to the provider used for verification, such as **SumSub**, **SuftiPro**, or others. * Click the **Edit** button for the relevant connection to open its details. * Review the connection settings and adjust them if necessary. * Ensure the connection is enabled. For details, refer to: * [How to use SumSub](../../how-to-articles/manage-verification-options/how-to-use-sumsubstance) * [How to use ShuftiPro](../../how-to-articles/manage-verification-options/how-to-use-shuftipro) ### Verify that your KYC provider subscription or plan is valid, paid, and active [#verify-that-your-kyc-provider-subscription-or-plan-is-valid-paid-and-active] If the subscription has expired or is inactive, clients won't be able to submit verification requests via the KYC provider. In this guide, we'll cover the primary features and functionalities of IB. The **Interface overview** provides a general description of the Back Office interface and its main controls. The following pages mirror the structure of the **Introducing brokers** menu in the Back Office. Each page includes a detailed explanation of a corresponding Back Office section, listing the available fields, applicable filters, limits, value ranges, and so on. This guide serves primarily as a reference and isn't focused on explaining specific user scenarios in detail. However, the guide pages contain cross-references to relevant how-to articles (step-by-step tutorials) and include links to other materials that may be helpful. The Back Office user interface is uniform across all pages, ensuring consistent look and feel and featuring a common set of basic options. ## The top bar options [#the-top-bar-options] At the top of a typical Back Office page, you can find a top bar with the following elements: * — click it to expand or collapse the main menu. * — click it to see the events that were scheduled for Admins in the **Event Calendar**. The number of upcoming events is displayed on a counter badge. * — click it to see pending client requests. The number of new requests is displayed on a counter badge. * **Language** **menu** — click it to select the interface language. * **User profile pane** — click this panel to access the **Log out** button. ## Common buttons and icons [#common-buttons-and-icons] The following buttons can be found on most Back Office pages. * the **Create** button — used to add a new entry. * the **Export** button — used to export table data to a CSV file. * the **Import** button — used to import an XLSX or a CSV data file. * — used to apply custom filters. * — used to reset custom filters. * — used to access details. * — used to delete an entry. Page elements may serve as hyperlinks which can be clicked to drill down to details. Access to this data is maintained based on the permissions assigned to a particular user group. ## Filtering [#filtering] Throughout the Back Office, the data is typically organized in tables that can be filtered. You can specify multiple criteria for filtering column data. When filtering is available, the appropriate input fields are displayed in column headers. The inputs vary depending on a data format, such as text, number, date, time, or list. To facilitate filtering by date, two fields for the start and end dates may be displayed so that you can define a time period. To enable or disable filters, click and buttons. ## Sorting [#sorting] In the Back Office, you can sort the data available in tables. The columns by which you can sort data are marked with displayed in column headers (no arrows are displayed when sorting isn't available). You can click these arrows to sort data in an ascending () or descending () order, by a single column at a time. ## Pagination [#pagination] You can display table data across multiple pages and specify how many records to display on a page. You can also view the total number of records found. To open the previous or next page, click the left or right arrow. ## Export and import [#export-and-import] Some Back Office pages support data export to CSV files. This option is available on pages that contain an **Export** button above the data table. The data in a resulting file matches the applied sorting and filtering criteria. To export page data to a CSV file, click the **Export** button. Some Back Office pages also support importing of CSV and XLSX files. This option is useful when you need to update the symbol settings for a partnership program. To import data, click the **Import** button, choose the file that you want to import and click **Open**. ## Localizations [#localizations] In the B2CORE Back Office, you can configure fields that support localizations to have multiple language options in the B2CORE UI. Using the **localization** buttons, you can set translations for these fields into different languages. To set localizations, click the **Localization** button next to the field, enter the translation in the supported languages and click **OK**. Note that only enabled localizations are displayed. You can enable or disable localizations in the **System** > **Localizations** section. View the following information for each process: **Date** The date and time when a process started running. *** **Process name** The name of a process. Possible values: * **Clear Cache** (`cache`) — clears cache for the specified time period. * **Cancel Payments** (`cancel`) — reverts reward payments. * **Create Payments** (`payments`) — initiates reward payments. * **Process Payments** (`transactions`) — processes reward transfers. * **Run Automation** (`schedule`) — runs consequentially the full process cycle (Sync Symbols + Sync Groups + Sync Trades + Create Payments + Process Payments + Sync Accounts). * **Run Diagnostics** (`diagnostics`) — runs diagnostics of IB services. * **Sync Accounts** (`accounts`) — runs synchronization of [accounts](platforms/accounts) with trading platforms. * **Sync Groups** (`groups`) — runs synchronization of [groups](platforms/groups) with trading platforms. * **Sync Symbols** (`symbols`) — runs synchronization of [symbols](platforms/symbols) with trading platforms. * **Sync Trades** (`trades`) — runs synchronization of [trades](platforms/trades) with trading platforms. *** **Memory** The amount of memory used by a process. *** **CPU Time** The time which it took a process to run. *** **PID** The process identifier. *** **Exit code** The process result. Possible values: * **0** — the process completed successfully. * **1** — the process wasn't completed due to errors. * **2** — the process was gracefully stopped due to service maintenance. On this page, you can monitor the synchronization pipelines that keep IB data in sync with trading platforms. To run a synchronization manually, click the **Run process** button. The following information is provided about each pipeline run: **Date** The date and time when a pipeline run started. *** **Platform** The trading platform for which the synchronization was run. *** **Steps** The synchronization steps included in the pipeline run. *** **Status** The current status of the pipeline run. The weekly calendar view displays the pipeline runs by day of the week. You can temporarily block a partner. Blocked partners don't receive rewards, their referral links can't be used. Go to **Introducing brokers** > **Program** > **Introducing brokers**. Select a partner that you want to block and click the name or . For a quick search, you can filter partners by a name, email, and other criteria. On the **Personal data** tab, set **Enabled** to **No**. Click **Save** to block the partner. You can **unblock** the partner any time: set **Enabled** back to **Yes**. You can also permanently delete a partner by clicking in the list. Note that this action **can't be undone**. Go to **Introducing brokers** > **Program** > **Introducing brokers**. Select a partner from the list and click the name or . For a quick search, you can filter partners by a name, email, and other criteria. On the **Personal data** tab, select a new partnership program from the **IB type** dropdown. Click **Save** to apply the changes. **See also:** * [How to configure personal rewards](how-to-configure-personal-rewards) * [How to configure a Master IB](how-to-configure-a-master-ib) Go to **Introducing brokers** > **Program** > **Introducing brokers**. Select a partner from the list and click the name or . For a quick search, you can filter partners by a name, email, and other criteria. On the **Personal data** tab, set **Master** to **Yes**. Set **Number of Master levels** — a number of levels which you want to reward for this partner. Defaults to **100**. Set **Master Level Ratio** — a fixed multiplier for any level within *Master IB max level* value. Click **Save** to apply the changes. The **Level 1** with the multiplier **1** is configured by default for any IB type. You can modify it. To create the next level: Go to **Introducing Brokers** > **Program** > **Types**. Select an IB type from the list and click its name or . Navigate to the **Levels** tab. Click **Create**. Set level **Ratio**, which is a reward multiplier. Click **Save** to apply the changes. Go to the **Preferences** tab. Click **Save** to apply the changes. Go to **Introducing brokers** > **Program** > **Introducing brokers**. Select a partner from the list and click the name or . For a quick search, you can filter partners by a name, email, and other criteria. On the **Personal data** tab, set the **Personal ratio** value — a personal multiplier which will be used for rewards calculations. Click **Save** to apply the changes. This article is intended for clients who already have an API driver configured for Converter. To configure a driver for the Converter to B2CORE API v2.x on your IB instance, follow the steps below: Add a new admin user by navigating to **System** > **Users** > **Users**. Click **+Create** and fill in the required fields. Refer to [How to add an admin user](https://docs.b2core.b2broker.com/how-to-articles/manage-system-settings/how-to-add-an-admin-user) for details. Select **Administrators** in the **Groups** dropdown. Navigate to **Introducing Brokers** > **Platforms** > **Platforms**. Select the platform for which you're configuring a driver. Go to the **Drivers** tab and click **Create**. Fill in the following fields: * **Provider** — select **API** in the dropdown. * **Name** — enter **API**. * **Server** — specify the Back Office base URL in the following format: `{baseUrl}/api/v2`. For example, `test.com/api/v2`. * **Login** — enter the newly added admin user's email that you specified at Step 1. * **Password** — enter the newly added admin user's password that you specified at Step 1. * **Version** — specify the version of a driver. Click **Save** to add the Converter driver to your IB instance. Go to **Introducing Brokers** > **Program** > **Types**. Select an IB type from the list and click its name or . Go to the **Tiers** tab. Click **Create**. Enter the **Name** of the tier. Set required number of **Active traders** to receive increased rewarding. Set the value to **0** to ignore this parameter in reward calculations. Set required amount of **Trading volume, in lots** to receive increased rewarding. Set value to **0** to ignore this parameter in reward calculations. Set required amount of **Trading volume, in USD** to receive increased rewarding. Set value to **0** to ignore this parameter in reward calculations. Set tier **Ratio** — rewards multiplier for the partners who have reached volume/clients goals for a tier period. Click **Save** to apply the changes. Go to the **Preferences** tab and set **Tier period** in days — the number of days in which amounts set on the previous step must be achieved by a partner to receive increased rewarding. Click **Save** to apply the changes. It's assumed that a connection to cTrader has already been configured in the B2CORE Back Office by the admin who is assigned the permissions to manage external connections and platforms. To configure a cTrader connection to an IB instance, do the following: Navigate to **Introducing Brokers** > **Platforms** > **Platforms**. Click **Create** and fill in the following fields: * **Provider** — select **cTrader** from the dropdown. * **Platform** — select **cTrader** from the dropdown. * **Name** — specify the platform name. Click **Save** to apply the changes. Click the **Edit** button located in the row of the newly created cTrader platform. The **Preferences** tab displays the cTrader configuration settings specified when a connection to this platform was set up in the B2CORE Back Office. Switch to the **Drivers** tab and click **Create**. Configure a connection to a synchronizer database. This is a MySQL database that stores the data collected from the cTrader platform. To establish the connection, fill in the following fields: * **Provider** — select **PDO** from the dropdown. * **Name** — specify the name of a synchronizer database. * **Server** — specify the address of a synchronizer database. * **Login** — enter the username for connecting to a synchronizer database. * **Password** — enter the password for connecting to a synchronizer database. * **Version** — specify the version of a synchronizer connection driver. The currently supported version is `3`. Click **Save** to connect the **cTrader** platform to an IB instance. Before creating a new type, make sure that the following necessary parameters are configured and enabled in the Back Office: * Navigate to **Products** > **Products** and check that at least one product with type **Partner** is created and enabled. You can use filter by type for quick search. If there is no product with this type, [create one](how-to-set-up-a-wallet). Go to **Introducing brokers** > **Program** > **Types**. Click **Create**. The **Preferences** tab of the Type details will open. Click **Save** to apply the changes. In the **Name** field, enter a partnership program name. In the **Description** field, enter a partnership program caption. This can be, for example, conditions for participation. From the **Registration** dropdown, select an option of joining a partnership program: * **Auto**: Each client signing up to the B2CORE UI automatically becomes a partner. If multiple partnership programs are available, an IB account is created for each program. * **Public**: Clients can see available partnership programs in the B2CORE UI and can apply for it. For this type of registration, **Approvement** option is available and enabled by default, which means that clients join a partnership program only after their [joining requests](#user-content-fn-1)[^1] are approved by a Back Office admin. If the option is disabled, the partner can access the IB Room immediately after the registration. * **Private**: Clients are added to a partnership program by a Back Office admin. Applying via the B2CORE UI is unavailable. * **Restricted**: Clients can join a partnership program only using a link provided by a participant of another or the same program. Specify the program identifier in the **Restriction** field. For this type of registration, **Approvement** option is available and enabled by default, which means that clients join a partnership program only after their [joining requests](#user-content-fn-2)[^2] are approved by a Back Office admin. If the option is disabled, the partner can access the IB Room immediately after the registration. From the **Product** dropdown, select a product. From the **Currency** dropdown, select a currency. Click **Save** to apply the changes. [^1]: To learn more about client requests, refer to [B2CORE documentation](https://docs.b2core.b2broker.com/back-office-guide/clients/requests). [^2]: To learn more about client requests, refer to [B2CORE documentation](https://docs.b2core.b2broker.com/back-office-guide/clients/requests). ## Generate a QR code [#generate-a-qr-code] Go to **Introducing brokers** > **Program** > **Introducing brokers**. Select a partner from the list and click the name or . For a quick search, you can filter partners by a name, email, and other criteria. Go to the **Links** tab and click a link in the **Landing page** column. At the bottom of the page, you can see the **Change color** and **Add icon** dropdowns. There are two default background colors — black and white. You can customize colors, see [below](how-to-generate-a-qr-code#customize-colors) for details. Icon is optional, you can ignore this field, but remember that using an icon for QR codes can increase the number of scans by 2-3 times. You can customize icons, see [below](how-to-generate-a-qr-code#customize-icons) for details. Use the **Click to generate QR code** button to create a QR code. You can copy your QR code by clicking **Copy Embed** or download it to your device by clicking **Download QR Code**. ## Customize colors [#customize-colors] Navigate to **Introducing brokers** > **Promo** > **QR Codes** > **Colors**. Click **Create** to create a new color and fill out the form: * **Name** — enter the name of the color. * **Background color** — enter the HEX code of the background. * **Foreground color** — enter the HEX code of the foreground. Click **Save** to save a new color. The color is now available in the dropdown of colors when creating a QR code. ## Customize icons [#customize-icons] Navigate to **Introducing brokers** > **Promo** > **QR Codes** > **Icons**. Click **Create** to create a new icon and fill out the form: * **Name** — enter the name of the icon. * **Icon** — attach the icon file. Make sure your icon is a PNG image and its size is from 128 x 128 to 512 x 512 and less than 100 KB. Click **Save** to save a new icon. The icon is now available in the dropdown of icons when creating a QR code. To import data: ## Prepare a CSV file to import [#prepare-a-csv-file-to-import] The file must contain the following fields: Download the `template_import_ibs.csv` file that you can use to verify that your CSV file includes the correct headers and data formats. You can use a semicolon or tab as a delimiter instead of a comma in your file. ## Create an import operation [#create-an-import-operation] 1. Go to **System** > **Import data**. 2. Click **+Create** in the upper-right page corner. ## Fill out the form [#fill-out-the-form] 1. In the **Title** field, enter a name that you want to assign to your data import operation. 2. In the **Description** field, optionally enter a short description for your import operation. 3. From the **Action** dropdown, select `import-ibs` — to import IB-related data for existing clients. 4. In the **Delimiter** dropdown, select a delimiter character you used to separate data in your prepared CSV file (such as `comma`, `semicolon`, or `tab`). ## Upload the CSV file [#upload-the-csv-file] Click **Browse** and select your prepared CSV file for data import. ## Run the data import [#run-the-data-import] Click **Save** to start the import operation. Mind that all fields in the CSV file are required. If any of the fields are missing, the import operation will fail. During the data import: * If an email address specified as **IB Email** exists in B2CORE, this client will be added as an IB partner and the IB-related data will be imported for that client. * If an email address specified as **IB Email** doesn’t exist in B2CORE, the IB-related data won't be imported. After the import operation is finished, you can check its status and click the **Edit** button located in the import operation row to view the **Log messages** and **Error messages** fields listing the details about the records that were successfully imported as well as errors that occurred during import. To create a partner profile: Go to **Introducing brokers** > **Program** > **Introducing brokers**. Click **Create**. Enter the **Email** of the client who is registered in the B2CORE UI. If the client hasn't yet registered in the B2CORE UI, you can create the profile. From the **Type** dropdown, select a partnership program. Click **Save** to apply the changes. Go to **Introducing brokers** > **Program** > **Types**. Select an IB type from the list and click its name or . Go to the **Symbols** tab. Select the symbol for which you want to configure payment preferences and click . For a quick search, you can filter symbols by a platform, trading group, symbol name, and other criteria. From the **Payment plan** dropdown, select an option for reward calculation. For detailed descriptions, refer to [Payment plans](../payment-plans). Remember that available payment plans depend on the platform. Depending on the selected payment plan, fill in corresponding fields (see [below](how-to-set-up-a-payment-plan-for-symbols#payment-plan-settings)). In the **Position** field, select the positions for which you want to calculate the reward amount: open, close, or both. In the **Apply** field, select whether to apply the specified settings to the current symbol or to a trading group. Click **Create** to apply the changes. ## Payment plan settings [#payment-plan-settings] * Indicate the **Percentage** of the received commission that you want to pay to your partners. For example, **10** means 10%. Positive integer and decimal values in the range from 0 (zero) to 100 are supported. * Select the **Currency** in which rewards will be paid. If a partner's wallet currency differs from the reward currency, then the reward amount is converted into the wallet currency. The conversion occurs at the current exchange rate at the time of calculation. * Specify the **Amount** that you want to pay your partners for each lot traded by their clients. Positive integer and decimal values greater than or equal to 0 (zero) are supported. Keep in mind that you must monitor profitability using this scheme as the reward amounts may exceed the commissions charged. For this payment plan you need to preliminary configure a required amount of levels. Refer to [How to configure levels](how-to-configure-levels) for step-by-step instructions. * Select the **Currency** in which rewards will be paid. If a partner's wallet currency differs from the reward currency, then the reward amount is converted into the wallet currency. The conversion occurs at the current exchange rate at the time of calculation. * In the **Amount** field, specify the max amount of the reward. This is the amount that will be paid to partners for trades of their direct clients (Level 1: *IB* → *Direct client*). Positive integer and decimal values greater than or equal to 0 (zero) are supported. * Click links below the **Amount** field to specify the exact amounts that partners receive at each level. The number of links depends on the number of configured levels. In the example below, 3 Levels are configured for the IB type. Therefore, you can see two links: * distribution of the **Max amount** between 2 levels (*IB* → *SubIB* → *Client*) * distribution of the **Max amount** between 3 levels (*IB* → *SubIB* → *SubIB* → *Client*) Max amount Refer to [Max amount](../payment-plans#max-amount) for a distribution example. * Specify the **Markup**, in points, that you want to pay your partners for each lot traded by their clients. Positive integer values greater than or equal to 0 (zero) are supported. * In the **Markup, %** field, specify your markup on the trading platform. This value is required for correct calculations of reward amounts. * In the **Percentage** field, indicate a percentage of your markup (**Markup, %**) that you want to pay your partners for each lot traded by their clients. Positive integer and decimal values greater than or equal to 0 (zero) are supported. * Indicate the **Percentage** of the market spread value that you want to pay to your partners. For example, **10** means 10%. Positive integer and decimal values in the range from 0 (zero) to 100 are supported. The **Position** field is automatically set to **closed** and cannot be changed. * Indicate the **Percentage** of the platform spread value that you want to pay to your partners. For example, **50** means 50%. Positive integer and decimal values in the range from 0 (zero) to 100 are supported. The **Position** field is automatically set to **closed** and cannot be changed. * The markup percentage is automatically retrieved from the trading platform's symbol configuration and used in reward calculations. A **Wallet** is a partner account, to which all partner rewards are credited. Before creating a partner product, navigate to **Products** > **Platforms** and make sure that **Personal** platform is enabled. Go to **Products** > **Products**. Click **Create** and select **eWallet** from the dropdown. The **Create product** popup will open. From the **Platform group** dropdown, select **eWallet**. From the **Currency** dropdown, select a currency in which you want to pay rewards to your partners. If a partner's wallet currency differs from the reward currency, then the reward amount is converted into the wallet currency. The conversion occurs at the current exchange rate at the time of calculation. In the **Name** field, enter a wallet name. It can be the same as currency for your convenience. Select **Group**. From the **Factory** dropdown, select **100** if a wallet is denominated in currency subunits (for example, cents); otherwise, leave the default value **1**. From the **Type** dropdown, select **Partner**. Click **Save**. The **Info** tab of the Product details will open. Set the **Caption**, which will be displayed in the B2CORE UI. Set localizations if needed. Set **Status** to **Enabled**. Grant permissions: select required **Rights** or check **eWallet** in the **Group rights**. Set **Max accounts** to **-1**. Click **Save** to apply the changes. This article covers two common scenarios for managing client structures in the IB system: * Transferring an entire client tree from one IB to another. * Transferring an individual client from one IB to another. You can also reassign clients and sub-IBs between IBs directly on the [Reassign Users](../back-office-guide/program/reassign-users) page, without exporting and importing IB-related data. ### Before you start [#before-you-start] * Ensure you have proper backup of client data. * Confirm that the destination IB exists and is active. * Always verify exports before deleting source IBs. ## Transferring the entire client structure from one IB to another [#transferring-the-entire-client-structure-from-one-ib-to-another] Use this method to move all clients or SubIBs from one Introducing Broker to another while preserving all relationships and data. This scenario requires the **mandatory removal of the source IB** from which clients are being transferred. Go to **Introducing brokers** > **Program** > **Introducing brokers** and open the profile of the source IB (`IB1`). On the **Clients** tab, export all first-level clients under `IB1`. Export only first-level clients. All lower-level clients will be automatically transferred with their relationships preserved. After confirming the export is complete, delete `IB1` from the system. Import IB data, as described here: [How to import IB-related data](how-to-import-ib-related-data). In your CSV file, specify the following: * In the **IB Email** column, the email address of the destination IB (`IB2`). * In the **Client Email** column, the email addresses of clients exported from `IB1`. * In the **IB Type ID** column, the identifier of the desired IB type. To find IB type IDs, go to **Introducing brokers** > **Program** > **Types** and export the existing types. The required IDs will be available in the exported file. Upload the CSV file and complete the import process. All clients will be transferred to `IB2` with their transaction data, reward information, and subordinate client relationships intact. ## Moving a particular client from one IB to another [#moving-a-particular-client-from-one-ib-to-another] Use this method to transfer an individual client or SubIB from a source IB to a target IB while preserving all their data. Identify the current IB under which the client is located (`IB1`) and determine the target IB where the client should be moved (`IB2`). Go to **Introducing brokers** > **Program** > **Clients** and remove the client from `IB1`. Go to **Introducing Brokers** > **Program** > **Introducing brokers** and select the target `IB2`. On the **Clients** tab, click the **Create** button to add the client. On the **Clients** tab, enter the client's email address to create them under the target `IB2`. The system will automatically preserve all transaction and reward information during this process. Verify that the client has been successfully moved to the target `IB2` with all their historical data intact. ## Set up IB [#set-up-ib] ## Create your IB program [#create-your-ib-program] ## Manage partners [#manage-partners] ## Other [#other] On the **Partner Dashboard** page (labeled **Dashboard** on some stands), you can find a set of widgets displaying the data related to the partnership programs you've joined. In the dropdown located at the top of the page, select a partnership program for which you want to display widgets. The set and layout of widgets displayed may vary depending on the broker configuration. The following widgets are available: **Wallet** View the total balance of your rewards in your wallet, as well as the total rewards earned. In the widget, you can click **Withdraw** to navigate to the **Funds** > **Withdraw** page and withdraw a desired amount from your wallet, or you can click **Transactions** to navigate to the **Transactions** tab of the [Reports](reports/transactions) page, listing reward payments related to a selected partnership program. *** **Partner Link** View the details of your referral link. You can select a **Landing Page** (currently, only **Sign Up** is available) and a **Language** (select **Global** for a non-localized link), then copy the generated link. *** **CPA Program** Track the CPA (Cost Per Acquisition) program activity for a selected period. You can select a period for which you want to display the data, such as over the past hour, day, week, month, or year. Alternatively, you can apply a custom period by selecting the start and end dates in the date range field. If there is no CPA program activity for the selected period, the widget displays an empty state. *** **Savings Rebates** Track savings-rebate activity for a selected period. You can select a period for which you want to display the data, such as over the past hour, day, week, month, or year. Alternatively, you can apply a custom period by selecting the start and end dates in the date range field. *** **Trading Report** Monitor the number of your active traders, trading volume, and the amount of paid rewards. You can select a period for which you want to display the data, such as **Day**, or apply a custom period by selecting the start and end dates in the date range field. The report table includes the following columns: **Date**, **Active Traders**, **Trades**, **Trading Vol.**, **Reward Amount**. *** **Acquisition Report** Track the number of clicks on your referral links or promo banners and the number of registrations made after clicking your referral materials. The widget displays a chart showing **Clicks** and **Registration** trends. The report table includes the following columns: **Date**, **Clicks**, **Registrations**. You can select a period for which you want to display the data, such as over the past hour, day, week, month, or year. Alternatively, you can apply a custom period by selecting the start and end dates in the date range field. *** **Rewards by Symbol** Monitor the rewards generated per traded symbol. The report table includes the following columns: **Symbol**, **Trades**, **Volume (Lots)**, **Reward/Lot**, **Reward Amount**. Depending on the broker configuration, this menu section may be labeled **IB Room** or **Partners** in the B2CORE UI. 要管理翻译,您必须被分配 *编辑者* 权限。 您无法编辑 **DEMO** 项目中的翻译。 要添加新翻译或编辑现有翻译: 在 **项目** 页面上,点击项目名称。 在表格上方的语言下拉列表中,选择所需语言。 仅显示该项目支持的语言。 找到所需的键。 要查找键,请点击 **放大镜图标**,然后在搜索字段中开始输入键名或翻译内容,或者使用[筛选器](../filter-keys)。 在 **自定义翻译** 字段中输入翻译。 该字段支持 HTML 自动补全和语法高亮。 如可用,您可以[使用变量](use-variables-in-translations)并[处理复数形式](handle-plural-forms)。 您还可以请求为您的项目启用 [AI 翻译](translate-with-ai)。 更改会自动保存。 在本文中,您将了解如何在产品的 WebUI 中启用编辑模式。 此功能可帮助您轻松查找页面上任何翻译键的标识符。 ### 启用编辑模式 [#activate-the-editing-mode] 您可以在产品 WebUI 的任何页面上启用编辑模式: 在浏览器地址栏中,在页面 URL 后追加 `?showTranslateEditor=true`,然后按 *Enter*。 您将在页面顶部看到相应的通知。 启用编辑模式 您可以在 WebUI 页面之间切换:编辑模式将保持启用状态,直到您点击 **退出编辑模式** 将其禁用。 ### 复制键 [#copy-a-key] 在此模式下,页面上的所有可用翻译都会标记为 **铅笔图标**。 请注意,默认未显示的元素会在悬停时显示。 选择要编辑的翻译,然后点击其附近的 **铅笔图标**,即可将其键复制到剪贴板。 复制键标识符 ### 定位键 [#locate-the-key] 1. 在 B2TRANSLATE 的 **项目** 页面中,选择您的项目。 2. 点击 **放大镜图标**,然后将复制的值粘贴到搜索字段中。 键列表将按键标识符自动筛选。 现在您可以编辑翻译。 有关详细信息,请参阅[添加或修改翻译](add-or-modify-translations)。 您可以从同一项目类型中包含的另一个项目复制翻译。 在目标项目中,翻译仅会添加到尚未包含翻译的键(**Custom translation** 字段为空)。 现有翻译(**Custom translation** 字段不为空)不会被覆盖。 您必须在目标项目中拥有 *Editor* 权限,并且在源项目中至少拥有 *Viewer* 权限。 要复制翻译: 在 **Projects** 页面上,点击要将翻译复制到其中的项目名称。 从表格上方的语言下拉列表中,选择所需语言。 点击页面标题中的 **Import keys**。 导入键 在 **Import keys** 弹出窗口中,检查所选平台(如适用)和语言。 从 **Import from project** 下拉列表中,选择要从中复制翻译的项目。 仅会显示包含所选平台(如适用)和语言,且您在其中至少拥有 *Viewer* 权限的项目。 选择要从中导入键的源项目 点击 **Import** 按钮。 如有需要,请对其他语言重复上述操作。 ### 将翻译导出为 CSV 文件 [#export-translations-to-a-csv-file] 1. 在 **Projects** 页面上,点击项目名称。 2. 从表格上方的语言下拉菜单中,选择所需语言。 3. 勾选要复制的键的复选框。勾选顶部复选框可全选。 4. 从表格上方显示的 **Bulk actions** 下拉菜单中,选择 **Download CSV**。 Download CSV 或者,您可以下载项目中的**所有**键: 1. 在 **Projects** 页面上,选择一个项目并点击 **three dots**。 2. 选择 **Download CSV**。 3. 选择所需的平台(如适用)和语言。 4. 点击 **Download**。 CSV 文件将下载到您的计算机。 ### 在 CSV 文件中编辑翻译 [#edit-translations-in-the-csv-file] 请注意以下事项: * 仅编辑 `translation` 列中的值。 * 只能使用逗号(`,`)或分号(`;`)作为分隔符。请注意:如果您使用 Apple Inc. 的 Pages 编辑文件,它有时可能会在第一行添加额外的分号,从而可能影响文件上传。 * 对于包含空格的多词翻译,请使用引号(`"My new translation"`)。 * 如果没有 `originalDefaultTranslation`,则始终会忽略自定义翻译。 * 如果 `languageDefaultTranslation` 与自定义翻译相同,则会忽略自定义翻译。 * 在其他情况下,将更新自定义翻译。 ### 导入 CSV 文件 [#import-the-csv-file] 1. 返回项目的翻译页面。 2. 点击页面标题中的 **Upload CSV**。 Upload CSV 3. 选择所需语言。 4. 将文件拖放到上传区域,或点击 **Add file** 从计算机中选择文件。允许的最大文件大小为 3 MB。 Add CSV file 5. 点击 **Upload**。 6. 刷新页面以查看已上传的翻译。 或者,您可以从项目列表上传文件: 1. 在 **Projects** 页面上,选择一个项目并点击 **three dots**。 2. 选择 **Upload CSV**。 3. 选择所需的平台(如适用)和语言。 4. 将文件拖放到上传区域,或点击 **Add file** 从计算机中选择文件。 5. 点击 **Upload**。 B2TRANSLATE 的复数化功能可准确翻译不同语言中依赖数量的字符串。 本指南介绍如何在翻译会随数量变化的内容时处理复数形式。 ## 了解复数形式 [#understanding-plural-forms] 不同语言的复数形式规则各不相同。 英语通常使用两种形式(单数和复数),而其他语言可能会根据复杂的语法规则要求使用多种形式,例如: * **英语**:1 file,2 file**s**,5 file**s** * **俄语**:1 файл,2 файл**а**,5 файл**ов** B2TRANSLATE 会根据您的目标语言自动确定所需的复数形式,并显示相应的输入字段。 ## 复数化面板 [#the-pluralization-panel] 处理复数化键时,您会看到专用的 **复数化** 面板,其中包含多个输入字段,每个字段代表目标语言的一种不同复数形式。 复数化面板 ### 其他形式 [#the-other-form] 这是全球所有语言中使用的主要必填形式。 每个复数化翻译都必须包含此形式,因为它可作为所有未指定情况的后备形式。 如果您只填写 **其他** 形式并将其他形式留空,B2TRANSLATE 会自动使用 **其他** 形式的值填充其余形式。 这样可确保您在完成所有形式的翻译时,译文仍能正常使用。 在项目的翻译页面中,对于具有复数形式的键,此形式会显示在 **翻译** 字段中。 ### 默认值 [#default-value] 在每个复数形式输入字段下方,您会看到默认值(通常是英文源文本)。 显示逻辑如下: * 如果您的目标语言具有比源语言更多的复数形式(例如,俄语有 4 种形式,而英语有 2 种),默认值只会显示在对应数量的形式下方。 * 当目标语言中不存在默认翻译时,只会显示英文翻译,并保持现有逻辑。 ## 翻译工作流程 [#translation-workflow] ### 访问复数化面板 [#access-the-pluralization-panel] 在 **翻译** 页面中,点击所需键的 **三个点**(查看详情)。 如适用,您会看到 **复数化** 选项卡。 否则,只有 **信息** 选项卡可用。 ### 填写复数形式 [#fill-in-the-plural-forms] 1. 首先翻译 **其他** 形式,因为这是所有语言的必填项。如果您只填写 **其他** 形式并将其他形式留空,B2TRANSLATE 会自动使用 **其他** 形式的值填充其余形式。这样可确保您在完成所有形式的翻译时,译文仍能正常使用。 2. 对于需要多种形式的语言,请确保在保存前正确填写每个字段。虽然此步骤并非强制要求,但根据目标语言的要求,留空某些字段可能会导致翻译不完整。 填写复数形式 ### 保存更改 [#save-changes] **复数化** 面板中的所有修改都必须使用 **保存更改** 按钮手动保存。 系统不会在您输入时自动保存更改,因此您可以在提交译文前处理多种形式。 ## 最佳实践 [#best-practices] 处理复数形式时,请考虑以下事项: * **同时检查所有形式**:由于一个键的所有形式会同时显示,请利用此机会确保术语和风格保持一致。 * **使用上下文指引**:每种形式都包含标签和工具提示,用于说明应在何时使用该特定形式。 * **使用数字测试**:考虑您的翻译在不同数量下的显示方式(1 个项目、2 个项目、5 个项目、100 个项目)。 * **完成所有必填形式**:对于要求完整形式集合的语言,请确保填写所有形式。 * **验证其他形式**:始终为 **其他** 形式提供翻译,因为它是通用后备形式。 * **定期保存**:请记得使用 **保存更改** 按钮手动保存您的更改。 您可以将翻译复制到包含在同一项目类型中的另一个项目。 源项目中的翻译会被分配到目标项目中的相同键。 您必须在目标项目中被分配 *Editor* 权限,并且在源项目中至少拥有 *Viewer* 权限。 如果目标项目中已存在翻译,它们将被**覆盖**。 要复制翻译: 在 **Projects** 页面上,点击要从中复制翻译的项目名称。 从表格上方的语言下拉菜单中,选择所需的语言。 勾选要复制的键对应的复选框。勾选顶部复选框可全选。 从表格上方显示的 **Bulk actions** 下拉菜单中,选择 **Send translations**。 发送翻译 在 **Send translations** 弹出窗口中,勾选一个或多个要将所选翻译复制到的项目。 仅显示包含所选语言且您被分配 *Editor* 权限的项目。 选择要导入键的目标项目 点击 **Send**。 B2TRANSLATE 提供与 ChatGPT 的集成,用于翻译键值。 此选项默认不提供,但可为单个项目申请开通。 请联系您的客户经理以申请访问权限。 除英语(默认语言)外,所有语言均可使用 AI 翻译。 您必须被授予 *Editor* 权限,才能使用 AI 添加和编辑翻译。 使用 AI 翻译: 在 **Projects** 页面上,点击项目名称。 在表格上方的语言下拉菜单中,选择所需语言。 仅显示该项目支持的语言。 确保 **Translate with AI** 按钮处于激活状态(以蓝色高亮显示),这表示当前项目已启用 AI 翻译。 否则,如果 **Translate with AI** 按钮未激活(显示为灰色),请向您的客户经理申请访问权限。 Translate with AI enabled 点击 **Translate with AI** 按钮。 如果 **Source** 翻译为空,则无法使用 AI 翻译。 **Source** 值将被翻译为您所选的语言,并添加到 **Custom translation** 字段中。 某些键支持在翻译中使用变量。 这些变量会在产品运行期间替换为计算得出的实际值。 如果某个键支持变量,这些变量会显示在 **Custom translation** 字段下方。 点击变量即可将其包含在翻译中。 每个变量只能包含一次。 或者,也可以省略变量,以使用不那么详细的消息。 ## 示例 [#example] 下图中的键支持变量。 当消息显示在 WebUI 中时,变量会被替换为实际链接。 翻译变量 You can configure cashback reward programs for clients who trade on MT4/5. The cashback is rewarded for the volumes traded on MT accounts over a day, based on closed positions, and deposited to clients the following day. For example, the cashback for the volumes traded on May 24 is rewarded to clients on May 25. From the **MetaTrader Volume** menu, you can access the **MetaTrader 4** and **MetaTrader 5** pages to configure cashback programs for each platform. Each page is divided into two tabs: * [Preferences tab](preferences-tab) * [Tiers tab](tiers-tab) On this tab, you can configure the following settings of a cashback reward program for MT4 or MT5: **Enabled** If **Enabled**, the cashback program is enabled for the MT4 or MT5 platform; otherwise, **Disabled**. *** **Cashback value (per lot)** The fixed rate per each traded lot. The cashback value can be denoted as an integer or decimal value. The cashback amount is calculated as follows: `Cashback amount = Cashback value * Number of traded lots` *** **Cashback currency** The cashback program currency. The cashback is calculated only for the volumes traded on MT accounts denominated in the cashback program currency. In addition, this is the currency in which the cashback is paid to clients. To receive the earned cashback, a client must have an account of the `trade` or `personal` type, denominated in the cashback program currency. For example, the cashback rate is 0.7 and the cashback program currency is USD. For the volume of 10 lots traded on the MT account denominated is USD, the cashback is calculated as follows: `0.7 * 10 = 7` The cashback of 7 USD is rewarded to the owner of the MT account. *** **Account destination type** The type of the account to which the cashback is rewarded: * **Trade** — the cashback is rewarded to the client’s MT trading account on which the volume taken for cashback calculations has been traded. * **Personal** — the cashback is rewarded to the client’s account of the `personal` type, such as a wallet, denominated in the cashback program currency. If the **Personal** account type is selected, ensure that your clients have personal-type accounts in the required currency; otherwise, the earned cashback can’t be deposited to them. By default, the **Trade** account type is selected. *** **Ignored symbols groups** A list of ignored symbols. The trades made in the selected symbols are excluded from cashback calculations. *** **Accounts platform groups allowance** A list of MT account groups. By default, all the account groups configured on the MT platform are selected. If the **Accounts number allowance** field is empty, all the MT trading accounts included in the groups selected in **Accounts platform groups allowance** field are rewarded the cashback. *** **Accounts number allowance** A comma-separated list of MT account numbers. By default, the list is empty. If one or more MT account numbers are listed in this field, only the listed accounts are rewarded the cashback and the **Accounts platform groups allowance** option is ignored. *** **Updated** The date when the cashback program was last modified. **See also** [How to configure cashback programs for MT4 and MT5](../../../how-to-articles/manage-cashback-options/how-to-configure-cashback-programs-for-mt4-and-mt5) On this tab, you can manage the tiers that determine the increased cashback rates for clients who have traded certain volumes over a day. View the following information about each cashback reward tier: **Name** The tier name. *** **Trading volume, lots** The volume, in lots, that must be traded in order to receive the increased cashback. *** **Cashback value** The increased cashback rate that is used instead of the rate specified on the **Preferences** tab if the volume traded on an MT account over a day has reached the required tier volume. *** **Created at** The date and time when the tier was created. *** **Updated at** The date and time the tier was last modified. **See also** [How to add cashback reward tiers](../../../how-to-articles/manage-cashback-options/how-to-configure-cashback-programs-for-mt4-and-mt5#how-to-add-cashback-reward-tiers) On this tab, you can view a list of client's [accounts](../accounts). To view details of a specific account, click the **Edit** button in the corresponding row. On this tab, you can find additional information provided by a client during registration. The fields displayed on this tab depend on the [Registration wizard configuration](../../system/wizards#registration-wizard) This tab is visible by default. Here, you can find information about a particular client and view the client profile details, such as profile status and verification level. The grayed-out fields are disabled and cannot be edited (most of them are system fields and filled automatically). Use caution when customizing the following fields because this may affect a client’s permissions: * **Email** — this field is disabled by default. This email address is used by a client to log in to the system. To enable editing a client’s email, click the **Edit** button. To view the previous email addresses specified for a client, switch to the [History tab](history-tab) and select the **Email change history** option. * **Birthday** — this field is disabled by default. To enable editing a client’s date of birth, click the **Edit** button. A user must be at least 18 years old to be allowed to use the system. * **Status** — the current [status](../../references/client-statuses) of a client profile. * **Client type** — the [type](../types) of a client profile. * **Manager** — the client’s [manager](../managers). The scope of activities that a client is allowed to perform may vary depending on the client department and their assigned manager. * **Verification level** — the [verification level](../../verification/levels) obtained by a client. This level determines the scope of activities that a client is allowed to perform. * **Client Rights** — the [client rights](../../system/client-rights) assigned to a client, which determine the actions available to the client in the B2CORE UI. * **Client Tags** — the tags assigned to a client, which are used to sort the client list displayed to [Back Office administrators](../../system/users/). These tags have no effect on client permissions. * **Risk level** — the risk level assigned to a client, which may determine the scope of activities that the client is allowed to perform. On this tab, you can also add a picture to a client profile by clicking the **Edit** button located in the picture frame and selecting the required image. The added picture will be displayed in the client profile in the B2CORE UI. On this tab, you can view, add, and edit text notes, or comments, related to a particular client. These comments are displayed only in the Back Office. Your clients won't receive any notifications upon adding these comments. The following information is displayed about each internal comment: **Comment** The text of an internal comment about a client. *** **Date** The date and time when a comment was added. *** **Creator** The administrator who added a comment. *** **Last Editor** The administrator who has last edited a comment. On this tab, you can view a list of a client’s addresses and phone numbers as well as add the required contact information by clicking the **+Add** button. ## Addresses [#addresses] In this section, the following information is provided: **Address type** The type of address: * **Residential** — the client’s primary living address. * **Billing** — the address associated with billing or invoices. * **Mailing** — the address where correspondence is sent. * **Birth place** — the location where the client was born. * **Legal** — the official address used for legal purposes. *** Details of the address, such as **Country**, **City**, **State**, **Postal code**, and street address. ## Phones [#phones] In this section, the following information is provided: **Phone** The client's phone number provided during registration (if your registration procedure requires phone numbers) or added by a Back Office user. *** **Confirmed** * **Yes** — indicates that this phone number was the last one confirmed by the client via SMS. For example, if two phone numbers are provided and the client confirms the first one, it is marked as confirmed. If the client later confirms the second number, the second number becomes confirmed, and the first number is marked as unconfirmed. * **No** — indicates that the phone number is unconfirmed. *** **Default** This field is deprecated and no longer in use. *** phone-button — the **phone** icon The option to dial the specified client's phone number from the Back Office. To use this option, a phone service provider, such as Twilio, must be configured (for details, refer to [How to configure Twilio](../../../how-to-articles/manage-communication-platforms/how-to-configure-twilio)). *** delete_button — the **bin** icon This option is available if you're granted the `Update clients` permission, which includes the ability to edit client information on the **Contacts** tab. By clicking the icon, you can delete any added phone numbers, including the confirmed phone number. After removing a confirmed phone number, a client can add and confirm a new phone number to associate with their profile. Once removed, the phone number becomes available for registering a new client profile, assuming that your registration procedure requires [phone numbers to be unique](../../system/settings#client-settings). On this tab, you can view and edit the values of [custom fields](../../system/custom-fields) specified for a client. The fields are organized by the [custom field groups](../../system/custom-fields#groups) configured in your system. Select a group to view and edit the fields it includes. The set of available fields and groups depends on the custom fields configured in **System** > **Custom Fields**. On this tab, you can view a list of devices from which a client was logged in to the B2CORE UI. This list indicates the client IP address, the date and time of the last login, device operation system, client browser, and device fingerprint data (including a canvas code picture) containing detailed information about the device from which a client has logged in to the B2CORE UI. On this tab, you can view a list of documents that a client submitted for [verification](../../verification/). **ID** The document identifier in the Back Office. *** **Type** The [document type](../../verification/document-types). *** **Status** The current[ status of a client request](../../references/client-request-statuses) for document approval. *** **Request ID** The identifier of a client’s document approval request. *** **Uploaded by** Indicates who uploaded the document. *** **Uploaded at** The date and time when the document was uploaded. **See also** [How to use the KYC constructor](../../../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor) On this tab, you can view and manage files related to a particular client. By default, the folder tree on this tab reflects the structure of [system client folders](../../system/client-folders). As a more advanced approach to storing files, you can create and then manage custom folders, taking into account the following considerations: * A folder tree can be of any nesting depth. * Predefined folders cannot be deleted on this tab. * You can view only those predefined system folders to which you were granted access. If a system folder is created with the same name as that of a custom folder of some client, a `_Custom` postfix is added to the custom folder name, and the system folder is created at the same nesting level. Use the following buttons to perform a specific action: **Download all** Choose a method to export a ZIP archive containing files related to a particular client (you can send the archive to your email address or download it to your computer). To export all files, click **Download All**. To export specific files, press **Command** (on macOS) or **Ctrl** (on Windows), select the required files with the mouse cursor, and then click **Download All**. *** **Add file** Upload client files from your computer or a cloud to the Back Office. *** **Upload multiple files** Upload multiple client files at once. *** **Add directory** Create a new folder. *** **Edit** Rename files or move them to other folders. The files can only be moved between folders related to a specific client. *** **Delete** Delete selected files or folders. *** **Cancel** Discard unsaved changes. *** **Save** Apply the changes. **See also** [How to upload a file](../../../how-to-articles/manage-clients/how-to-upload-files-to-a-client-profile) On this tab, you can find a list of a client’s deposit and withdrawal wallets, as well as a list of saved withdrawal templates. Select the wallet type to view the details: ## Withdrawal wallets [#withdrawal-wallets] On this page, you can view a list of wallets that were used by a client for withdrawal of funds. **Method** The [method](../../system/payout-system#payout-methods) used to withdraw funds. *** **Currency** The wallet currency. *** **Address** The public wallet address. *** **Destination tag** Applicable only for certain currencies (XRP, XLM, BNB, and XEM). ## Saved withdrawals [#saved-withdrawals] On this page, you can view a list of saved withdrawal templates. Such templates can be created by a client when making a withdrawal, to avoid specifying the same information repeatedly for similar subsequent withdrawals. **Name** The name of a [payment system](../../../integrations/payment-systems). *** **Saved at** The date and time when a withdrawal template was saved. After clicking the **eye** icon, you are navigated to a page displaying the details of a selected withdrawal template. The withdrawal template data is stored in the JSON format. ## Deposit wallets [#deposit-wallets] On this page, you can view a list of cryptocurrency wallets that were generated for a client. **Method** The [method](../../system/deposit-system#deposit-methods) used to deposit funds. *** **Currency** The currencies enabled for a wallet. *** **Address** The public wallet address. *** **Destination tag** Applicable only for certain currencies (XRP, XLM, BNB, and XEM). On this tab, you can view the history of changes of a client’s password, email address, verification level, and 2FA options. Select one of the following options to view the details: ## Passwords change history [#passwords-change-history] On this page, you can find the details about previously changed client passwords: **Date** The date and time when the password was changed. *** **Type** The type of an action that resulted in changing the password: * **Restored** — the password was updated by a client. * **Changed by admin** — the client’s password was updated by an administrator. *** **Changed by** The email address of the person who changed the password. **See also** [How to change a client password](../../../how-to-articles/manage-clients/how-to-change-a-client-password) ## Test results [#test-results] On this page, you can find a list of [accreditation tests](../../verification/client-tests) that a client has passed in the B2CORE UI and view their results. ## Authorization history [#authorization-history] On this page, you can view the log of client sessions in the B2CORE UI. **Auth date** The date and time when a client logged in to the B2CORE UI. *** **Auth IP** The IP address from which a client logged in to the B2CORE UI. *** **Auth location** The location (country and city) from which a client logged in to the B2CORE UI, which is determined based on the client IP address. *** **Status** The result of a login attempt: `success` or `failed`. ## Email change history [#email-change-history] On this tab, you can view the log of changes made to a client’s email address. **Origin Email** The previous client email address. *** **Changed To** The current email address that is used by a client to sign in to the B2CORE UI. *** **Changed Data** The date when an email address was changed. *** **Changed By** The email address of a person who changed the client email. If an email address was specified for the first time, the **Origin email** and **Changed by** columns are empty. ## 2FA history view [#2fa-history-view] The log indicating when 2FA was enabled or disabled for a client contains the following data: **Date** The date and time when 2FA was enabled or disabled for a client. *** **Enabled** The action type indicating whether 2FA was enabled or disabled. *** **Provider** The 2FA service provider. **See also** [How to disable 2FA for a client](../../../how-to-articles/manage-clients/how-to-disable-2fa-for-a-client) ## Verification change history [#verification-change-history] On this page, you can view the details about each [verification level](../../verification/levels) obtained by a client. This information includes the name of the previous and newly obtained levels, as well as the date and time when each verification level was obtained and the name of the person who granted the level to a client, along with a reason why it was granted. **See also** [How to use the KYC constructor](../../../how-to-articles/manage-verification-options/how-to-use-the-kyc-constructor) On this page, you can find a list of all clients registered either through the B2CORE UI or via the Back Office. ## General information [#general-information] The following information is provided about each client: **ID** The identifier of a client in the system. *** **Name** The client’s name. *** **Created** The date and time when a client profile was created. *** **Status** The current [status of a client profile](../../references/client-statuses) in the B2CORE UI. *** **Email** The mail address used by a client to log in to the B2CORE UI. *** **Nickname** The client’s nickname. *** **Tags** The tags assigned to a client that are used to sort the client list displayed to [Back Office administrators](../../system/users/#users). *** **Manager** The client’s [manager](../managers). *** **Phone** The client’s phone number. *** **Country** The client’s [country](../../system/countries) (if specified by a client during registration or KYC verification process). *** **Jurisdiction** The [jurisdiction](../jurisdictions) to which the client is assigned, either automatically upon registration or manually. *** **City** The client’s city. *** **Types** The client [profile type](../types). *** **Internal client type** For internal use only. The internal client profile category. *** **Verification level** The [verification level](../../verification/levels) obtained by a client. *** **Company Short** The short name of a client’s company. *** **Company Full** The full name of a client’s company. *** **Risk level** The risk level assigned to a client, which may determine the scope of activities that the client is allowed to perform. *** **Last login** The date and time when a client was last logged in to the B2CORE UI. To assign tags to multiple clients or change their profile statuses at once, click the **Select** button, and then select the clients by clicking client rows, or click **Select All**. Next, expand the **Edit selected clients** drop-down menu, and then select **Assign Tags** or **Select Status**. *** **Communication language** The client's preferred language, which also determines the localization used in the B2CORE UI. By default, the column is hidden but can be added to the table using the **Column visibility** option. To view client details, click the **Edit** button and switch to a tab displaying the required information. *** **UTM metas** The pieces of tracking information attached to URLs that identify where clients came from, allowing you to track which campaigns or channels brought them to B2CORE and analyze conversion performance. By default, the column is hidden but can be added to the table using the **Column visibility** option. ## Details [#details] To access tabs displaying additional information, click drop-down-menu-button (the menu button) located in the upper-right page corner and expand the dropdown that displays the available options. The available tabs are described in the subsequent sections of this document. **See also** [How to register a new client](../../../how-to-articles/manage-clients/how-to-register-a-new-client) [How to assign tags to clients](../../../how-to-articles/manage-clients/how-to-assign-tags-to-clients) On this tab, you can find information about referral programs which a client has joined. **Introducing broker ID** The identifier assigned to a client after joining a particular referral program. *** **Type** The name of a referral program. To view program details, click its name. On this tab, you can view a list of messages sent to a client email and export this data to a CSV or XLSX file. **ID** The email identifier. *** **Active queue ID** The identifier of a queue in which an email is included. *** **Email** The client email address. *** **Subject** The email subject. *** **Attempt date** The date and time when the most recent attempt to send an email was made. *** **Status** The email delivery status: `IN PROGRESS`, `FAIL`, or `SUCCESS`. *** **Reason** The reason why an email delivery failed. To export the email data to a CSV or XLSX file, click the **Export** button located in the upper-right corner of the screen. You can download the file to your computer or send it to the email address specified in your profile. To view a complete list of emails sent to all clients, switch to the [mailing log](../../mailing/system#log) by navigating to **Mailing** > **System** > **Log**. On this tab, you can view and manage the marketing attributes collected for a client, such as the communication consent, communication language, email address and first deposit amount. The following information is provided about each attribute: **Field** The attribute name and its identifier in the system. *** **Value** The attribute value. *** **Created** The date and time when the attribute was created. *** **Updated** The date and time when the attribute was last updated. To add a new attribute, click the **Add** button. After making changes, click **Save** to apply them. On this tab, you can configure various client profile settings, which are grouped under the following sections: ## Settings [#settings] In this section, you can select a communication language and set a color to be applied to a client’s requests: **Communication Language** The language in which communication with a client is conducted. For a list of supported languages, refer to [Localizations](../../system/localizations). *** **Request color** The color used to highlight requests from a client that are displayed in the [Requests](../requests) section. You can click the gray input field and pick the color from a palette. Alternatively, you can specify the color name, or define its HEX or RGBA value. ## 2FA [#2fa] In this section, you can learn about 2FA (two-factor authentication) options configured for a client: * **SMS** — if `enabled`, a client receives 2FA verification codes using SMS * **Google** — if `enabled`, a client receives 2FA verification codes using the Google Authenticator app ## Rights [#rights] In this section, you can override the [permissions](../../system/client-rights) granted to a client based on the obtained [verification level](../../verification/levels). The permissions determine which kinds of operations the client is allowed to make in the B2CORE UI. **Verification** If selected, clients are allowed to obtain a higher [verification level](../../verification/levels) in the B2CORE UI. *** **Converter** If selected, clients can exchange funds in the B2CORE UI. *** **Deposits** If selected, clients can deposit funds in the B2CORE UI. *** **Withdrawals** If selected, clients can withdraw funds in the B2CORE UI. *** **Internal Transfers** If selected, funds can be transferred from one client to another within the same B2CORE system. *** **Overwrite with explicit settings** After enabling or disabling specific permissions for a client, select this option, and then click **Save** to apply the changes. The permissions that don’t correspond to the current verification level of a client are marked with `*`. ## Options [#options] In the **Accounts limitations (Overrides Product max accounts)** section, you can limit the maximum number of demo and live trading accounts available to a client by using the **Max Demo Trading Accounts** and **Max Live Trading Accounts** fields. The number of demo accounts can be limited for any trading platform providing the capability to create demo accounts. The values specified on this tab override the default system limits defined in the [Products](../../products/products) section. On this tab, you can view a history of trades executed by a client on **B2TRADER**. **Order ID** The identifier assigned to an order on B2TRADER. *** **Instrument** The currency pair. *** **Side** The trade side: `Buy` or `Sell`. *** **Quantity** The amount traded, in a quote currency. *** **Price** The trade execution price. *** **Value** The amount traded, in a base currency. *** **Fee** The commission charged for a trade. *** **Fee Product** The commission currency. *** **Date** The date and time when a trade was executed. On this tab, you can find detailed information about a client’s transactions. Select the transaction type to view the details: **Deposit** The list of client’s [deposits](../../finance/deposits). *** **Payout** The list of client’s [payouts](../../finance/payouts). *** **Transfer** The list of client’s [transfers](../../finance/transfers). *** **Exchange** The list of client’s [exchanges](../../finance/exchange). *** **Balance change operation** The history of changes to a client’s balance resulting from an administrator’s actions in the Back Office, which includes the following information: * **Date** — the date and time when a change to a client’s balance has occurred * **Account** — the user account number * **Amount** — the transaction amount * **Deposit/Withdraw** — the transaction type * **Admin user** — the administrator who made the transaction The changes to a client’s balance effected by a Back Office administrator aren't reflected on the [Deposits](../../finance/deposits) and [Payouts](../../finance/payouts) pages. In this subsection, you can manage HTML email templates that are used to notify clients and [Back Office users](../users/) about specific event types. ## Template types [#template-types] On this page, you can manage the types of events about which clients and Back Office users can be notified by email. ### General information [#general-information] The following information is provided about each event type: **Name** The event type name. *** **Caption** The event type description. *** **Enabled** If **Yes**, an event type is enabled for triggering event notifications; otherwise, **No**. To view the template type details, click the **Edit** button. ### Details [#details] On the details page, you can edit the **Name** and **Caption** fields, as well as enable or disable the template type. In addition, you can return the HTML templates related to the selected template type to their default configurations. To do this, click the **Actions** button displayed in the upper-right page corner, and then select **Reset templates** in the dropdown. After that, the HTML email templates, which are listed on the [Templates](email#templates) page, are reset to defaults. ## Templates [#templates] On this page, you can manage HTML email templates that are used to deliver notifications about occurred events to clients and Back Office users. ### General information [#general-information-1] The following information is provided about each template: **Type** The [email template type](../../references/email-template-types). *** **Locale** The language of an email template. *** **Subject** The subject of an email template. *** **Enabled** If **Yes**, an email template is enabled and can be used to deliver notifications; otherwise, **No**. To view the template details, click the **Edit** button. ### Details [#details-1] In the **Template** window, you can view or edit the HTML code of a template. The parameters, such as text color or company name, that are defined in the [Key-value storage](../key-storage) can be inserted in email templates. When an email notification is sent to a client or Back Office user, such parameters are replaced with the values that are specified for them in the storage. To render the HTML code and view how a template will look in an email, click the **Preview** button. If the template is enabled, it can be saved only after it is successfully rendered and displayed in the preview area. ### Example [#example] The following is an example of an HTML code for an email template: ```html         ``` ## Templates [#templates] On this page, you can manage templates used to send [event notifications](../event-notifications) to [Back Office users](../users/) via Slack. For Slack, templates are supported for the following [types of events](../../references/event-types-for-triggering-event-notifications-for-back-office-users): * `PayoutRequestInitialized` * `TestPassing` ### General information [#general-information] The following information is provided about each template: **Name** The template name. *** **Caption** The template description. *** **Enabled** If **Yes**, a template is enabled and can be used for event notifications; otherwise, **No**. To view the template details, click the **Edit** button. ### Details [#details] In the **Template** field, you can view or slightly edit the template text. ### Supported Slack templates [#supported-slack-templates] Use the Slack templates provided below for notifications about supported event types. These templates contain keys that are replaced with relevant values when the event occurs and the notification is sent to recipients. #### **PayoutRequestInitialized** [#payoutrequestinitialized] The template for notifications about withdrawal requests created by clients: ``` Project: {frontUrl}|{companyName} Type: Payout Payout number: {urlMetaDetails}|{metaId} Client Email: mailto:{clientEmail}|{clientEmail} Task: check and approve the {urlRequestDetails}|withdrawal ``` #### **TestPassing** [#testpassing] The template for notifications about accreditation tests completed by clients. ``` Project: {frontUrl}|{companyName} Test: testName Request number: {urlRequestDetails}|{applicationId} Client Email: mailto:{clientEmail}|{clientEmail} ``` In this subsection, you can manage templates that are used for SMS notifications. ## General templates [#general-templates] On this page, you can manage templates that are used to deliver [event notifications](../event-notifications) to [Back Office users](../users/) via SMS. ### General information [#general-information] The following information is provided about each template: **Name** The template name. *** **Caption** The template description. *** **Enabled** If **Yes**, a template is enabled and can be used for event notifications; otherwise, **No**. To view the template details, click the **Edit** button. ### Details [#details] In the **Template** window, you can view or edit the template text. ### Example [#example] The following is an example of a template for SMS notifications about withdrawal requests created by clients: ``` Project: {companyName} Type: Payout Payout number: {metaId} Client Email: {clientEmail} ``` ## Confirmation templates [#confirmation-templates] On this page, you can manage templates that are used to deliver verification codes to clients for whom 2FA (two-factor authentication) is enabled via SMS. ### General information [#general-information-1] The following information is provided about each template: **Name** The template name. The template with the name **default** can't be disabled, deleted, or renamed. *** **Caption** The template description. *** **Enabled** If **Yes**, a template is used to deliver verification codes to clients via SMS; otherwise, **No**. To view the template details, click the **Edit** button. ### Details [#details-1] In the **Template** window, you can view or edit the template text. ### Example [#example-1] The following is an example of a template for delivering verification codes via SMS: ``` Your verification code is %CODE%. ``` ## Templates [#templates] On this page, you can manage templates used to send [event notifications](../event-notifications) to [Back Office users](../users/) via Telegram. For Telegram, templates are supported for the following [types of events](../../references/event-types-for-triggering-event-notifications-for-back-office-users): * `PayoutRequestInitialized` * `TestPassing` ### General information [#general-information] The following information is provided about each template: **Name** The template name. *** **Caption** The template description. *** **Enabled** If **Yes**, a template is enabled and can be used for event notifications; otherwise, **No**. To view the template details, click the **Edit** button. ### Details [#details] In the **Template** field, you can view or slightly edit the template text. ### Supported Telegram templates [#supported-telegram-templates] Use the Telegram templates provided below for notifications about supported event types. These templates contain keys that are replaced with relevant values when the event occurs and the notification is sent to recipients. #### **PayoutRequestInitialized** [#payoutrequestinitialized] The template for notifications about withdrawal requests created by clients: ``` Project: {frontUrl}|{companyName} Type: Payout Payout number: {urlMetaDetails}|{metaId} Client Email: mailto:{clientEmail}|{clientEmail} Task: check and approve the {urlRequestDetails}|withdrawal ``` #### **TestPassing** [#testpassing] The template for notifications about accreditation tests completed by clients. ``` Project: {frontUrl}|{companyName} Test: testName Request number: {urlRequestDetails}|{applicationId} Client Email: mailto:{clientEmail}|{clientEmail} ``` On this page, you can view and add client tags. Assigning tags to clients enables you to filter the client list for Back Office users, such as admins or managers, so they only see clients with specific tags, while other clients remain hidden. Tags can be assigned to clients either manually or automatically after client registration when using [jurisdictions](../../clients/jurisdictions). The following information is provided about each client tag: **ID** The identifier of a client tag. *** **Caption** The name of a client tag. To update a client tag, click the **Edit** button located in a tag row, and then specify a new name for the tag. **See also** [How to assign tags to clients](../../../how-to-articles/manage-clients/how-to-assign-tags-to-clients) [How to create a jurisdiction](../../../how-to-articles/manage-clients/how-to-create-a-jurisdiction) [How to make an admin user see only specific clients](../../../how-to-articles/manage-system-settings/how-to-make-an-admin-user-see-only-specific-clients) On this page, you can view a list of all user groups created in the Back Office and manage their permissions. ### General information [#general-information] The following information is provided about each user group: **ID** The identifier of a user group. *** **Group** The name of a group. The **Administrators** group can’t be removed and its permissions can’t be modified. Users included in this group are granted all available permissions. To export the data about Back Office user groups, including the data about permissions granted to each group, to a JSON file, click the **Export** button located in the upper-right corner of the page. To import the data about Back Office user groups, click the **Import** button, and then select a JSON file containing the required data. To view group details, click the **Edit** button. ### Details [#details] The detail page contains the following tabs: * **Group** — a list of permissions granted to the users included in this group. * **Users** — a list of users included in this group. **See also** [How to add a user group and grant permissions](../../../how-to-articles/manage-system-settings/how-to-add-a-user-group-and-grant-permissions) [How to import data related to Back Office user groups](../../../how-to-articles/manage-system-settings/how-to-import-data-related-to-back-office-user-groups) On this page, you can view a list of registered Back Office users, such as admins or managers, modify their profile settings, and add new users. ### General information [#general-information] The following information is provided about each user: **ID** The user identifier. *** **Name** The user’s name. *** **Email** The user’s email address that is used to sign in to the Back Office. *** **Allowed Client Tags** The client tags that are used to sort the client list displayed to a user. *** **Status** The status of the user profile:`Enabled` or `Disabled`. Users whose profiles are disabled can't sign in to the Back Office. *** **Two Factor Authentication** The status of 2FA: * `Disabled` — 2FA is disabled. * `Email` — 2FA with email codes is enabled. * `TOTP` — 2FA with time-based one-time passwords (TOTP) is enabled, such as through the Google Authenticator app. Users can enable 2FA with TOTP for their profiles by clicking the profile button displaying their email address in the top bar and selecting **Enable 2FA** in the dropdown. After confirming the action in the popup, they should follow the displayed instructions to set up 2FA using Google Authenticator. *** **IP Whitelist** A list of [allowed IP addresses](../../security/white-lists) specified for a user. *** **Groups** A list of [groups](users#groups) in which a user is included. The groups define the permissions that the user is asssigned. *** **Creator** The identifier of the user who created a user profile. Click the identifier to navigate to the user details page. *** **Created At** The date and time when a user profile was created. To view user details, click the **Edit** button. ### Details [#details] The following additional information is provided about each user: **Phone** The user’s phone number. *** **Password** The masked password that is used to sign in to the Back Office. *** **Telegram chat Id** The identifier of a Telegram chat, group, or channel for receiving event notifications (for details, refer to [How to get Telegram chat, group, and channel identifiers](../../../how-to-articles/manage-communication-platforms/how-to-get-telegram-chat-group-and-channel-identifiers)). *** **Slack chat Id** The identifier of a Slack channel for receiving event notifications. *** **Event notifications** The list of events about which a user is notified. You can add events to this list or remove them. The list includes the event notifications configured on the [System > Event notifications](../event-notifications) page. *** **Send to email** Enable this option to send credentials to a specified user email address. *** **Mask data** Enable this option to prevent a user from viewing client personal data in the Back Office. When enabled, such data as client names, email addresses, and phone numbers are masked with asterisks (`*`) for the user. *** To add a picture to a user profile, click the **Edit** button located in the picture frame and select an image. * Supported formats: PNG, JPG and JPEG * File size: up to 3 MB Back Office users can upload pictures only for their own profiles. The uploaded picture is added as an icon to a user email address displayed in the top bar. *** To manage 2FA options for a user, click the **Actions** button in the upper-right page corner, and then select one of the following options: * **Reset 2FA to Email** — to enable 2FA with email codes for the user. * **Disable 2FA** — to disable for the user any 2FA method that is currently in use. *** ### Fields for filtering [#fields-for-filtering] **Countries** * If the **All except** option is enabled and one or several countries are specified in the field below, a user is allowed to see a list of clients from all countries except for the ones specified in the field below it. * If the **All except** option is disabled and one or several countries are specified in the field below, a user is only allowed to see a list of clients from the countries specified in the field below it. **See also** [How to add an admin user](../../../how-to-articles/manage-system-settings/how-to-add-an-admin-user) To configure settings for savings programs with fixed interest rates, specify the following settings in the **Fixed Preset Details** section: * **Plan length (days)** — select a period, in days, during which the amount invested in the savings program must be held. The plan length can be specified with an interval of 30 days, such as 30, 60, 90, and so on. At the end of the plan length, the investment amount that a client contributed to the program is refunded to the client wallet. * **Payment period (days)** — select a period, in days, indicating the frequency of interest payments. The payment period can be specified with an interval of 30 days, such as 30, 60, 90, and so on, and must be less than or equal to the plan length. * **Investment amount** — enter an amount that a client must contribute to the savings program when subscribing to it. The investment amount is deducted from a client wallet denominated in the program currency. If a client has more than one wallet denominated in the program currency, the client can select a wallet from which the investment amount should be deducted. The investment amount can be specified as an integer or decimal value. * **Interest rate (percent)** — enter a percentage of the investment amount, which is used to calculate interest earned at the end of each payment period (for details, refer to [Interest calculation example — Fixed strategy](configure-the-fixed-strategy-settings#interest-calculation-example-fixed-strategy).) The interest rate can be specified as an integer or decimal value. * **Penalty type** — select how the penalty is calculated. The penalty amount is charged to a client if the client withdraws their invested funds before the end of the plan length. * **Fixed** — a fixed amount is deducted as a penalty. * **Percentage** — a percentage of the invested funds is deducted as a penalty. * **Cancellation penalty** — specify as follows: * For the **Fixed** penalty type, specifies the exact penalty amount charged to a client. The amount must be an integer or decimal value and must be lower than the investment amount. * For the **Percentage** penalty type, specifies the percentage of the investment amount deducted as a penalty. ## Interest calculation example — Fixed strategy [#interest-calculation-example--fixed-strategy] This example illustrates how interest is calculated for a client subscribed to a savings program with the `Fixed` strategy. Suppose that the savings program is configured with the following settings: * the **Investment amount** is 1,500 USD * the **Interest rate (percent)** is 3% * the **Plan length (days)** is 180 days * the **Payment period (days)** is 60 days The interest accrued and paid to the client for the first 60-day period since the date the client subscribed to the program is calculated as follows: `Earned interest = Investment amount * Interest rate / 100` `1,500 * 3 / 100 = 45 USD` The earned interest of 45 USD isn’t taken into account when calculating interests for subsequent periods. This means that the same interest, which is equal to 45 USD in this example, is earned and paid every 60 days till the end of the plan length. Detailed information about interest payments to the clients subscribed to savings programs can be found in payment plans that are listed on the [Savings > Plans](../../../back-office-guide/savings/plans) page. To configure settings for savings programs with flexible interest rates, specify the following settings in the **Flexible Preset Details** section: * **Minimum investment amount** — enter the minimum amount of the initial investment. Investments less than the specified amount won’t be accepted. * **Minimum additional investment** — enter the minimum amount that clients can add to the initial investment. Clients can’t add amounts less than this specified minimum. The minimum investment and additional investment amounts can be specified as integer or decimal values. * **Penalty period (days)** — specify the period, in days, during which a client can’t withdraw their invested funds without a penalty. * **Penalty type** — select how the penalty is calculated. The penalty amount is charged to a client if the client withdraws their invested funds before the end of the penalty period. * **Fixed** — a fixed amount is deducted as a penalty. * **Percentage** — a percentage of the total invested funds is deducted as a penalty. * **Redeem penalty** — specify as follows: * For the **Fixed** penalty type, specifies the exact penalty amount that will be charged to a client. The amount must be an integer or decimal value and must be lower than the minimum investment amount. * For the **Percentage** penalty type, specifies the percentage of the total invested funds that will be deducted as a penalty. * **Payment period** — indicates the frequency of interest payments and is set to `The first day of each month` and can’t be changed. For example, if a client successfully subscribes to a savings program on May 31, the first interest payment will occur on the next day, June 1. In the **Tiers** section, set up tiers that are used to apply flexible interest rates: * **Tier from** — enter the minimum amount that clients must invest to get an interest rate assigned to that tier. This amount indicates the tier’s starting point and the previous tier’s end point. There is the tier with the **Tier From** value equal to 0 (zero), which cannot be removed. * **Annual percentage rate** — enter the annual interest rate, in percentage, applied to the tier (for interest calculation details, refer to [Interest calculation example — Flexible strategy](configure-the-flexible-strategy-settings#interest-calculation-example-flexible-strategy)) Add as many tiers as required for your savings program. To add a new tier, click the **Add** button. ## Interest calculation example — Flexible strategy [#interest-calculation-example--flexible-strategy] This example illustrates how interest is calculated for a client subscribed to a savings program with the `Flexible` strategy. Suppose that the savings program is configured with the following settings: * Tier 1: the **Tier from** is 0 and **Interest of year (%)** is 10% * Tier 2: the **Tier from** is 5,000 and **Interest of year (%)** is 14.6% * the **Minimum investment amount** is 3,000 USD * the **Minimum additional investment** is 1,000 USD If a client subscribes to the program on May 30 and deposits 3,650 USD, the client receives an annual interest rate of 10%. At the end of May 30, the interest is accrued. It’s calculated as follows: `Earned interest = Investment amount * (Interest rate / 100) / 365` `3,650 * (10 / 100) / 365 = 1 USD` If on May 31, the client adds 1,350 USD, bringing the total invested to 5,000, the client receives an annual interest rate of 14.6%. At the end of May 31, the interest is accrued as follows: `5,000 * (14.6 / 100) / 365 = 2 USD` The total interest accrued for two days May 30 and May 31, which is 3 USD, is paid to the client wallet on June 1. Detailed information about interest payments to the clients subscribed to savings programs can be found in payment plans that are listed on the [Savings > Plans](../../../back-office-guide/savings/plans) page. ## Modify tiers for savings programs with Flexible strategies [#modify-tiers-for-savings-programs-with-flexible-strategies] In the existing savings presets, you can modify tiers that are used to apply flexible interest rates. To modify tiers: Navigate to **Savings** > **Presets**. Select the preset and click the **Edit** button. In the **Tiers** section, you can: * change the amounts in the **Tier from** fields * adjust the interest rates applied to the tiers * remove existing tiers * add new tiers To update tiers applied to the savings plans that have already been created based on the selected preset, enable the **Update Savings Plans Tiers** checkbox. The modified tiers will be used for interest calculations in all the existing savings plans. If you want the modified tiers to apply only to new savings plans, leave the checkbox unchecked. Click **Save** to apply the changes. You can create savings programs with `Fixed` and `Flexible` strategies and enable your clients to invest their funds in these programs and earn interest. To create a savings program: Navigate to **Savings** > **Presets**. Click **+Create** in the upper-right page corner, and select: * **Fixed preset** — to create a program with a fixed interest rate * **Flexible preset** — to create a program with a flexible interest rate Configure the following general settings: * In the **Currency** dropdown, select a currency for the savings program. To subscribe to the program, your clients must have wallets denominated in the program currency. * In the **Name** field, enter a unique name for the savings program. The program name is displayed to clients in the B2CORE UI. * In the **Description** field, enter a program description. The program description is displayed to clients in the B2CORE UI. * Set the **Status** option to **Active** or **Inactive**. * If **Active**, the card showing details of the savings program is displayed in the B2CORE UI, and clients can subscribe to the program. * If **Inactive**, the card of the savings program isn’t displayed in the B2CORE UI. * In the **Admission fee** field, enter a fee amount that clients must pay when subscribing to the savings program. The admission fee is deducted from client wallets denominated in the program currency. The admission fee can be specified as an integer or decimal value. If you don’t want to charge the admission fee, enter 0 (zero). Proceed to configuring settings specific to the selected savings strategy: * [Configure the Flexible strategy settings](configure-the-flexible-strategy-settings) * [Configure the Fixed strategy settings](configure-the-fixed-strategy-settings) After configuring the settings, click **Save** to create the savings program. The savings program preset is displayed on the **Savings Preset** page. If the preset is assigned the **Active** status, the card of the created savings program is displayed to clients in the B2CORE UI, and clients can subscribe to the program. ## Field types [#field-types] The supported field types for the Registration wizard include: * **input** — a text input field. * **group** — a container that holds one or more fields of various types or other groups. * **passwordButton** — a password input field that includes a show/hide button for toggling the visibility of the entered password. * **select** — a dropdown that enables clients to select a single option from a predefined list. * **multiSelect** — a dropdown that enables clients to select multiple options from a predefined list. * **radio** — a single-choice selector that presents several options, enabling clients to select one option from a predefined list. * **boolean** — a checkbox field that enables clients to mark it as either true or false. * **date** — a field for entering or selecting a date. * **phone** — a field for entering a phone number according to the predefined format. ## Validation rules [#validation-rules] Data validation rules that can be assigned to the Registration wizard fields include: * `required` — indicates that a field is required. * `email:rfc,spoof,strict` — validates that an email address follows the correct format. * `unique_active_email` — ensures that an email address is unique and not already registered in your system. * `password_length` — validates that a password meets the required length. * `password_content` — validates that a password includes the required characters and symbols. * `same:password` — ensures that the password entered in the **Password confirmation** field matches the one in the **Password** field. * `string` — a string of characters. * `min:1` — requires a minimum of one character in the entered string. * `max:30` — limits the entered string to a maximum of 30 characters. * `info_name` — validates that an entered string includes allowed characters. * `phone:AUTO` — validates that a phone number follows the correct format. * `distinct` — ensures that the phone number is unique and not already confirmed by another registered client in your system. * `date` — validates that the entered or selected value is a date. * `age:18` — ensures that a user is at least 18 years old (in addition to the `date` rule). * `requiredValue` — validates that the selected value is **True**. * `countries_handbook` — ensures that the value is from the list of countries configured in your system. * `client_addresses_handbook` — ensures that the value is from the list of address types registered in your system. * `nullable` — allows the field to accept an empty value. * `array` — an array of values. * `numeric` — a numeric value. The Registration wizard can accept and process only specific data within the Basic Information step. The tables below outline the fields supported for this step: * [Email, password, and password confirmation fields](#email-password-and-password-confirmation-fields) * [First name, last name, and birthday fields](#first-name-last-name-and-birthday-fields) * [Address fields](#address-fields) * [Phone fields](#phone-fields) * [Consent and agreement fields](#consent-and-agreement-fields) For each field, it's indicated whether it can be used independently or must be nested within a specific group. Field names must be specified exactly as provided in the **Name** column. Field labels that will be displayed on the **Sign Up** page in the B2CORE UI can be amended according to your preferences. In addition, specific data validation rules that should be assigned to the fields are listed in the **Validation rules** column. For descriptions of all available field types and data validation rules that can be assigned to the fields, refer to [Field types](field-types-and-validation-rules#field-types) and [Validation rules](field-types-and-validation-rules#validation-rules). ## Email, password, and password confirmation fields [#email-password-and-password-confirmation-fields] The table below provides information about the fields for entering an email, setting a password, and confirming the password, including field types, validation rules, and additional attributes for proper configuration. ## First name, last name, and birthday fields [#first-name-last-name-and-birthday-fields] The table below outlines the fields for entering a first name, last name, and birth date. These fields must be nested within the **group** field named `info`. ## Address fields [#address-fields] The table below outlines the fields for entering address information. These fields must be nested within the **group** field named `0`, which must in turn be nested within the **group** named `addresses`. ## Phone fields [#phone-fields] The table below outlines the field for entering a phone number. This field must be nested within the **group** field named `0`, which must in turn be nested within the **group** named `phones`. ## Consent and agreement fields [#consent-and-agreement-fields] The table below outlines the fields required for client consent. These fields are essential for obtaining necessary agreements and consents from clients. These fields must be nested within the **group** field named `requirements`. **Deprecated.** Registration wizards are deprecated. To set up the client registration process, use the new registration settings and custom fields instead — see [How to migrate to the new registration settings](../how-to-migrate-to-new-registration-settings). If you have mobile applications, keep the existing Registration wizards enabled until you no longer support older app versions, because end users on those versions rely on them to register. The Registration wizard determines the registration procedure for new clients in the B2CORE UI, as well as the information the clients are prompted to provide during registration. You can add several Registration wizards in order to configure separate registration procedures, for example, for individual and corporate clients. To add and configure the Registration wizard: Navigate to **System** > **Wizards**. On the **Wizards** page, click **+Create** in the upper-right page corner. On the **Create wizard** page, fill in the following fields: * In the **Name** field, enter the wizard name, such as Corporate or Individual. The wizard name is displayed to clients as the name of the registration option on the **Sign up** page in the B2CORE UI. * In the **Type** dropdown, select **Registration**. * In the **Default** dropdown, select: * **Yes** — to mark the wizard as the default Registration wizard. The default wizard is displayed as the first registration option on the **Sign up** page in the B2CORE UI if more than one Registration wizard is configured. * **No** — to display the wizard following the default one on the **Sign up** page in the B2CORE UI if more than one Registration wizard is configured. Click **Save** to add the wizard. In a wizards list, find the added Registration wizard, and click **Edit**. In the **Description** field on the **Wizard** tab, optionally enter a short description of the registration procedure or any other helpful information that clients should know before they start registration. The description is displayed under the wizard name on the **Sign up** page in the B2CORE UI. To configure the registration procedure steps, go to the **Workflow** tab. By default, the following two steps are configured and placed in the order in which they are performed during registration: * Step 1: **Basic Information** — a client is prompted to fill in the required personal information, such as an email address, first and last names, phone number, address, and password for accessing their profile in the B2CORE UI. To view a list of predefined fields added for the Basic Information step, click the **Edit** button located in the step row, and go to the **Custom fields** tab. Enable the fields that you want clients to fill in during registration and disable the others (for details, refer to [How to set up fields for the Basic Information step](how-to-set-up-fields-for-the-basic-information-step)). * Step 2: **User Registration** — a client is registered in B2CORE and assigned the client type and initial verification level (for details, refer to [How to configure the User Registration step](how-to-add-and-configure-the-registration-wizard#how-to-configure-the-user-registration-step)). Workflow tab of the Registration wizard To include additional steps in the registration procedure, click **+Add**. In the **Add workflow** popup, select the step type. The possible steps: * **Client Type** — a client is prompted to select the profile type, such as individual or corporate. * **Email Confirmation** — a client is prompted to confirm the email address entered at the Basic Information step with a verification code sent to that email. * **New Phone Confirmation** — a client is prompted to confirm the phone number entered at the Basic Information step with a verification code sent to that number. * **Advanced** *(deprecated)* — this step is no longer available for adding to new Registration wizards. If the Advanced step was previously added to an existing Registration wizard, it's preserved and can still be modified or removed (for details, see [How to set up fields for the Advanced step](how-to-set-up-fields-for-the-advanced-step)). Click **Save** to add the selected step to the registration procedure. The step is added to the steps list based on the order that is predefined for each step. After completing the configuration of the registration procedure steps, go to the **Wizard** tab. On the **Wizard** tab, enable the wizard by selecting **Yes** in the **Enabled** dropdown. Click **Save** to apply the changes. After enabling the wizard, the corresponding registration option is displayed to clients on the **Sign up** page in the B2CORE UI. The image below shows an example of the the B2CORE UI **Sign up** page enabling new clients to select the **Individual**, **Corporate**, or **Partner** registration option. Sign Up page **See also** [How to block registration for a country](../how-to-block-registration-for-a-country) At the User Registration step, clients are registered in B2CORE and assigned the initial verification level. It's possible to select the client type and verification level that are assigned to clients after registration. This may be useful when you configure two separate registration procedures for individual and corporate clients and want to assign different initial verification levels to such clients. Select the client type and verification level assigned to clients after registration: Navigate to **System** > **Wizards**. Select the Registration wizard and click **Edit**. Go to the **Workflow** tab. Click the **Edit** button located in the User Registration step row. Go to the **Settings** tab, and fill in the following fields: * In the **Register As** dropdown, select the client type that is assigned to clients after registration. The list includes all the enabled client types configured on the [Clients > Types](../../../back-office-guide/clients/types) page. If you leave `Not selected` in the **Register As** dropdown, the client type marked as default on the [Clients > Types](../../../back-office-guide/clients/types) page will be assigned to clients after registration. If no default type is set, the type with the lowest priority index will be assigned. * In the **Verification Level** dropdown, select the initial verification level that is assigned to clients after registration. The list includes all the verification levels configured on the [Verification > Levels](../../../back-office-guide/verification/levels) page except for the default verification level to which the zero (`0`) index is assigned. If you want to assign the default verification level to clients after registration, leave\ `Not selected` in the **Verification Level** dropdown. User Registration step Click **Save** to apply the changes. The Advanced step is *deprecated* and can no longer be added to new Registration wizards. If the Advanced step was previously added to your existing wizard, you can edit or remove it, but you can't add new fields to this step. After registration, the information collected in the Advanced step is displayed on the [Advanced tab](../../../back-office-guide/clients/general/advanced-tab) in the client details. To set up fields for the Advanced step: Navigate to **System** > **Wizards**. Select an existing Registration wizard and click **Edit**. Go to the **Workflow** tab. Click the **Edit** button located in the Advanced step row. Go to the **Custom fields** tab. To modify settings of an existing field, click the **Edit** button located in the field row. Configure the following field settings: * In the **Main field settings** section: * In the **Type** dropdown, select the field type. * In the **Enabled** dropdown, select `Enabled` to display the field during registration or `Disabled` to hide the field. * In the **Field attributes** section: * In the **Name** field, enter the field name used in the Back Office. Only Latin characters, digits, and underscores are allowed. * In the **Label** field, enter the field label. Field labels are displayed on the **Sign Up** page in the B2CORE UI. * In the **Rules** dropdown, select one or more rules for validating the data entered in the field by clients. For descriptions of all available field types and data validation rules that can be assigned to the fields, refer to [Field types](field-types-and-validation-rules#field-types) and [Validation rules](field-types-and-validation-rules#validation-rules). Click **Save** to apply the changes to the field settings. After saving the field settings, you'll be redirected to the fields list on the **Custom fields** tab. Ensure that all the fields you want clients to complete at the Advanced step are enabled. To remove a field that you no longer need in the Advanced step, click the **bin** icon located in the field row. Click **Save** to apply the changes to the wizard. At the Basic Information step, clients are prompted to provide their personal information by completing the fields displayed on the **Sign Up** page in the B2CORE UI. This step includes a predefined set of fields. You can edit or remove these fields, but you can't add new fields to this step. To set up fields for the Basic Information step: Navigate to **System** > **Wizards**. Select an existing Registration wizard and click **Edit**. Go to the **Workflow** tab. Click the **Edit** button located in the Basic Information step row. Go to the **Custom fields** tab. Custom fields tab To modify settings of an existing field, click the **Edit** button located in the field row. The Registration wizard can accept and process only a specific set of data. For details on the fields that you can add, along with their names, settings, and attributes, refer to [Fields supported in the Basic Information step](fields-supported-in-the-basic-information-step). Configure the following field settings: * In the **Main field settings** section: * In the **Type** dropdown, select the field type. * In the **Enabled** dropdown, select `Enabled` to display the field during registration or `Disabled` to hide the field. * In the **Field attributes** section: * In the **Name** field, enter the field name used in the Back Office. * In the **Label** field, enter the field label. Field labels are displayed on the **Sign Up** page in the B2CORE UI. * In the **Rules** dropdown, select one or more rules for validating the data entered in the field by clients. The list of field attributes depends on the selected field type and can include other attributes. If additional attributes are available for the field, they are listed in [Fields supported in the Basic Information step](fields-supported-in-the-basic-information-step). Click **Save** to apply the changes to the field settings. Save field settings After saving the field settings, you'll be redirected to the fields list on the **Custom fields** tab. Ensure that all the fields you want clients to complete during registration are enabled. To remove a field that you no longer need for registration, click the **bin** icon located in the field row. Click **Save** to apply the changes to the wizard. **Deprecated.** Registration wizards are deprecated. To set up the client registration process, use the new registration settings and custom fields instead — see [How to migrate to the new registration settings](../how-to-migrate-to-new-registration-settings). If you have mobile applications, keep the existing Registration wizards enabled until you no longer support older app versions, because end users on those versions rely on them to register. Client acquisitions are tracked per CPA program. To view acquisitions for a program, open the program and go to the **Client Acquisitions** tab. ## Acquisition list [#acquisition-list] View the following information for each CPA acquisition: **Client ID** The unique identifier of the referred client. *** **Client Name** The name of the referred client. *** **Partner Name** The name of the partner who referred the client. *** **Partner User ID** The unique identifier of the partner who referred the client. *** **Events** The conditions from the payment plan that the client has fulfilled. *** **Created** The date and time when the acquisition was recorded. ## Sort data [#sort-data] Click the **Created** column header to sort acquisitions by creation date. Click again to toggle between ascending and descending order. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Partner User ID** — enter a partner user ID to display acquisitions attributed to this partner. * **Date range** — select a start and end date to display acquisitions created during the specified period. **See also:** * [CPA programs](cpa-programs) * [Payment plans](payment-plans) * [CPA payments](cpa-payments) ## Payment list [#payment-list] View the following information for each CPA payment: **Partner User ID** The unique identifier of the partner who earned the reward. *** **Partner Name** The name of the partner who earned the reward. *** **Payment Amount** The reward amount. *** **Currency** The reward currency. *** **Status** The current status of a CPA payment: * **Pending** — the reward has been calculated and is waiting to be processed. * **Processing** — the reward transfer is in progress. * **Processed** — the reward was successfully transferred to the partner's account. * **Succeeded** — the reward transfer was confirmed as successful. * **Failed** — the reward could not be transferred to the partner's account. * **Cancelled** — the reward was cancelled and will not be paid. *** **Processed At** The date and time when the payment was processed. *** **Created** The date and time when the CPA payment was created. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Partner User ID** — enter a partner user ID to display payments for this partner. * **Partner Name** — enter a partner name to display payments for this partner. * **Status** — select a status to display payments with this status. * **Date range** — select a start and end date to display payments processed during the specified period. **See also:** * [CPA programs](cpa-programs) * [CPA acquisitions](cpa-acquisitions) ## Program list [#program-list] View the following information for each CPA program: **Name** The name of a CPA program. Click the name to open the [program details](cpa-programs#program-details). *** **Reward Currency** The currency in which partner rewards are paid. *** **Payment Mode** The mode that determines how rewards are calculated when a client meets multiple conditions: * **Cumulative** — the partner receives a reward for each payment plan whose conditions are met. Rewards from all triggered plans are added together. * **Max Tier** — only the highest-priority payment plan whose conditions are met is rewarded. The payment window defines the period during which the client can still reach a higher tier before the reward is finalised. *** **Active** Whether the CPA program is active: * **Yes** — the program is active and partners can earn rewards. * **No** — the program is inactive and no new rewards are created. *** **Created** The date and time when a CPA program was created. *** **Updated** The date and time when a CPA program was last updated. ## Edit a CPA program [#edit-a-cpa-program] To edit a CPA program, click the **Edit** icon next to the program in the list, or click **Edit** on the program details page. The following fields can be edited: * **Name** — the name of the program. * **Description** — the description of the program. Reward Currency and Payment Mode cannot be changed after the program is created. ## Create a CPA program [#create-a-cpa-program] To create a CPA program: 1. Click **Create**. 2. Fill in the required fields: * **Name** — enter a name for the CPA program. * **Description** — optionally, enter a description. * **Reward Currency** — select the currency in which partner rewards will be paid. * **Payment mode** — select how rewards are calculated. 3. If **Max Tier** is selected as the payment mode, specify the **Payment Window (days)**. This is the period during which a client must meet conditions to trigger a reward. 4. Click **Save**. After creating a program, add [payment plans](payment-plans) and conditions to define the reward structure. ## Program details [#program-details] To access program details, click the **program name**. The page displays the program settings and the list of associated [payment plans](payment-plans), organized in the following tabs: * **General** — program settings. * **CPA Payment Plans** — the payment plans associated with this program. * **Client Acquisitions** — clients referred by partners who have fulfilled the program conditions. See [CPA acquisitions](cpa-acquisitions). ### Activate a program [#activate-a-program] A CPA program can only be activated if it has at least one active payment plan with at least one condition. To activate a program, click **Activate**. To deactivate an active program, click **Deactivate**. Deactivating a program stops new rewards from being created but does not affect rewards already in progress. ### Assign to a partner group [#assign-to-a-partner-group] A CPA program must be assigned to a partner group to take effect. Partners in the group will earn CPA rewards when their referred clients meet the program conditions. To assign a CPA program to a partner group, go to **Program** → **Types**, open the group settings, and select the program in the **CPA Program** field on the **Preferences** tab. ## Filter data [#filter-data] You can filter the data displayed in the CPA programs list using the following criteria: * **Name** — enter a program name to search for programs with a matching name. * **Payment Mode** — select a payment mode to display programs with this mode. * **Active** — select a status to display active or inactive programs. * **Date range** — select a start and end date to display programs created during the specified period. **See also:** * [Payment plans](payment-plans) * [CPA acquisitions](cpa-acquisitions) * [CPA payments](cpa-payments) Each [CPA program](cpa-programs) contains one or more payment plans. A payment plan defines the set of conditions a referred client must meet for the partner to earn a reward. ## Payment plan list [#payment-plan-list] View the following information for each payment plan: **Name** The name of a payment plan. *** **Payment Amount** The reward amount paid to the partner when the plan conditions are met. *** **Priority** The priority of the plan. Only used in **Max Tier** mode — when a client qualifies for multiple plans, only the plan with the highest priority is rewarded. In **Cumulative** mode, priority has no effect. If two plans have the same priority in **Max Tier** mode, the behavior is undefined — only one plan will be rewarded but the result is not deterministic. Always assign a unique priority to each plan to avoid ambiguity. *** **Conditions** The conditions configured for the payment plan. *** **Created** The date and time when the payment plan was created. ## Edit a payment plan [#edit-a-payment-plan] To edit a payment plan, open the CPA program in edit mode and click the **Edit** icon next to the plan. The following fields can be edited: * **Name** — the name of the plan. * **Description** — the description of the plan. * **Payment Amount** — the reward amount. * **Priority** — the plan priority. * **Conditions** — add or remove conditions. Payment Amount and conditions cannot be changed while the CPA program is active. Deactivate the program first, make the changes, then reactivate it. ## Delete a payment plan [#delete-a-payment-plan] To delete a payment plan, open the CPA program in edit mode and click the **Delete** icon next to the plan. A payment plan cannot be deleted while the CPA program is active. Deactivate the program first. ## Add a payment plan [#add-a-payment-plan] To add a payment plan to a CPA program: 1. Open a CPA program in edit mode (click **Edit**). 2. In the **CPA Payment Plans** section, click **Create**. 3. Fill in the required fields: * **Name** — enter a name for the payment plan. * **Description** — optionally, enter a description. * **Payment Amount** — enter the reward amount to pay to the partner when conditions are met. * **Priority** — set the priority of the plan. Only applies in **Max Tier** mode — when a client qualifies for multiple plans, only the plan with the highest priority is rewarded. * **Conditions** — select one or more conditions the referred client must fulfill. For condition-specific options, see [Condition types](payment-plans#condition-types). 4. Click **Save**. Conditions cannot be added to or removed from a payment plan while the CPA program is active. Deactivate the program first, make the changes, then reactivate it. ## Condition types [#condition-types] **Registration** The client registered in the B2CORE UI by clicking the partner's referral link. No additional fields. *** **KYC Approved** The client passed the KYC verification at the specified level. * **KYC Level** — the verification level the client must reach. The available levels depend on the project configuration. *** **Minimum Deposit** The client deposited at least the specified amount. * **Amount** — the minimum deposit amount. * **Currency** — the currency of the deposit. A payment plan can have multiple conditions selected. All selected conditions must be met for the partner to earn the reward. **See also:** * [CPA programs](cpa-programs) * [CPA acquisitions](cpa-acquisitions) ## Account list [#account-list] The following information is provided on each account: **Account** The account number. Click it to view [account details](accounts#account-details). *** **Client ID** The partner identifier in the B2CORE UI. *** **Contact email** The partner email. *** **IB name** The partner name. *** **IB type** The partnership program. *** **Created** The date and time when an account was created. ## Account details [#account-details] To view details, click the **account number** or . The page is divided into the following tabs: On this tab, you can view detailed information about an account. **Account** The account number. *** **Balance** The current balance on an account. *** **Introducing broker** The partner name. *** **Type** The account type. *** **Created** The date and time when an account was created. On this tab, you can view reward-related transactions made on a currently selected account. For a detailed description of the fields, see [Transactions](transactions). ## Currency list [#currency-list] View the following information for each currency: **Name** The currency name. *** **Alias** The currency designation used on a specific trading platform. *** **Alphabetic code** The alphabetic currency code. For fiat currencies, the codes are as per ISO 4217; for cryptocurrencies, conventional coding is used. *** **Numeric code** The numeric currency code. For fiat currencies, the codes are as per ISO 4217; for cryptocurrencies, conventional coding is used. *** **Minor unit** The maximum number of digits after a decimal separator, indicating the decimal precision with which the amounts in a currency are displayed. *** **Sign** The currency symbol. *** **Class** The currency category. Possible values: * Fiat * Crypto *** **Created** The date and time when a currency was added. ## Currency details [#currency-details] To view details, click the **currency number** or . Here you can view and customize currency settings. All fields, except for **Created**, can be modified. On this page, you can view a list of failed IB reward payments along with the error details. The following information is provided about each failed payment: **ID** The identifier of the failed payment. *** **Error Reason** The reason why the payment failed. *** **Error Message** The detailed error message. *** **Transaction ID** The identifier of the related transaction. *** **Account ID** The identifier of the related account. *** **Created At** The date and time when the failed payment was registered. At least one provider is configured by default. For custom crypto assets, you can manually specify a static exchange rate for it. ## Provider list [#provider-list] View the following information for each rate provider: **Priority** The rate provider priority. If you have multiple providers configured, data requests are sent based on their priority. If the highest priority provider doesn’t respond, the request moves to the next provider in line, continuing in this manner until the data is received. *** **Name** The rate provider name. **Created** The date and time when a rate provider was added. ## Rate provider details [#rate-provider-details] To view details, click the **provider name** or . The page is divided into the following tabs: On this tab, you can customize rate provider settings. **Provider** The rate provider. *** **Priority** The rate provider priority. This value can be modified. *** **Name** The rate provider name. This value can be modified. *** **Base currency** *Available for custom rate providers only*. The base currency. This value can be modified. *** **Quote currency** *Available for custom rate providers only*. The quote currency. This value can be modified. *** **Rate** *Available for custom rate providers only*. The exchange rate. This value can be modified. *** **Created** The date and time when a rate provider was added. *Not available for custom static rates*. On this tab, you can run diagnostics and check the connection to a provider, by clicking the **Test connection** button. ## Reward list [#reward-list] View the following information for each reward: **Trade execution time** The date and time when a trade was executed. *** **Trade ID** The identifier of a trade for which a reward was paid. *** **Trade account type** The account type. Possible values: * Default * Payment account * PAMM investment account * PAMM master account *** **Currency** The reward currency. *** **Amount** The reward amount. *** **Level** The client level. *** **IB name** The name of a partner. *** **IB email** The partner email. *** **IB type** The partnership program. *** **Transaction ID** The identifier of a transaction that resulted in crediting a reward to a partner's account. Multiple rewards can be paid as part of a single transaction. **State** The current status of a reward payment: * **Done** — the reward was successfully credited to a partner's account. * **Pending** — the reward was calculated, but not yet credited to a partner's account. * **Canceled** — the reward was canceled and debited from a partner's account. *** **Created** The date and time when a reward was calculated. ## Reward details [#reward-details] To edit information about a reward, click the **trade execution time** or . The detailed information contains the following: **Reward state** The current status of a reward payment: * **Done** — the reward was successfully credited to a partner's account. * **Pending** — the reward was calculated, but not yet credited to a partner's account. * **Canceled** — the reward was canceled and debited from a partner's account. *** **Reward amount** The total amount rewarded. *** **Transaction ID** The transaction identifier. *** **Level** The partner's level. *** **Introducing broker** The name of a partner. *** **Payment plan** The formula for setting up the rewards calculation. To learn more, refer to [Payment plans](../../payment-plans). *** **Level ratio** The multiplier based on which rewards are calculated considering a partner's level. *** **Personal ratio** The individual multiplier based on which rewards are calculated for a specific client. *** **Tier ratio** The multiplier based on which rewards are calculated considering a specific tier. *** **Tier trading volume** The trading volume defined for a tier. *** **Tier active traders** The number of active traders defined for a tier. *** **Tier name** The tier name. *** **Tier period** The number of days during which a partner must meet tier objectives to receive increased rewards. *** **Created** The date and time when a reward was paid. *** **Trading platform** The trading platform name. *** **Trade account type** The account type. Possible values: * Default * Payment account * PAMM investment account * PAMM master account *** **Trading account** The account number of a client who executed a trade. *** **Trade ID** The trade identifier. *** **Trade execution time** The date and time when a trade was executed. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The symbol code. *** **Quote currency** The quote currency traded. *** **Contract size** The trade amount. *** **Price** The execution price. *** **Volume, lots** The trade volume, in lots. *** **Volume, USD** The trade volume, in USD. *** **Commission** The paid commission amount. *** **Client email** The email of a client who executed a trade. *** **Client ID** The client identifier in the B2CORE UI. ## Transactions list [#transactions-list] View the following information for each transaction: **ID** The transaction identifier. *** **Currency** The currency in which a reward was paid. *** **Amount** The amount of a transaction. *** **Account number** The partner account number. *** **Client ID** The identifier of a client profile. *** **IB name** The name of a partner. *** **IB email** The partner email. *** **IB type** The partnership program. *** **Status** The current status of a transaction. Possible values: * **Failed** — the transaction failed due to internal technical reasons. This is a final status. * **Invalid** — the transaction amount is `0`, the transaction won't be processed. This is a final status. * **Processing** — the transaction is currently being credited, the status will be changed soon. * **Transferred** — the transaction was successfully credited. This is a final status. *** **Processed** The date and time when a transaction was credited. *** **Created** The date and time when a transaction was created. ## Transaction details [#transaction-details] To view details, click the **transaction ID** or . The page is divided into the following tabs: On this tab, you can view detailed information about a transaction. **Status** The current status of a transaction. Possible values: * **Failed** — the transaction failed due to internal technical reasons. This is a final status. * **Invalid** — the transaction amount is **0** (zero), the transaction won't be processed. This is a final status. * **Processing** — the transaction is currently being credited, the status will be changed soon. * **Transferred** — the transaction was successfully credited. This is a final status. *** **Amount** The amount of a transaction. *** **Side** The transaction side. Possible values: * Debit * Credit *** **Account** The account number of a partner. *** **Client ID** The identifier of a client profile. *** **Contact email** The partner email. *** **IB name** The name of a partner. *** **IB type** The partnership program. *** **Rewards** The number of rewards paid by this transaction. *** **Processed** The date and time when a transaction was credited. *** **Created** The date and time when a transaction was created. On this tab, you can view the rewards credited to a partner's account by this transaction. For more details, refer to [Rewards](rewards). ## Accounts list [#accounts-list] View the following information for each trading account: **Platform** The trading platform name. *** **Group** The account group defined on the platform. *** **Type** The account type. Possible values: * Default * Payment account * PAMM investment account * PAMM master account *** **Account** The account number on a trading platform. This is a link to [account details](accounts#account-details). *** **Currency** The currency in which an account is denominated. *** **Trades** The number of trades made on the account. *** **Deposits** The amount deposited to an account. *** **Withdrawals** The amount withdrawn from an account. *** **Balance** The balance on an account. *** **Credit** The credit on an account. *** **Equity** The account equity. *** **Commission** The commissions paid for operations on an account. *** **Swap** The swap on an account. *** **Profit** The profit on an account, before commissions. *** **PnL** The profit-loss value calculated for an account. *** **Name** The name of a client profile. *** **Email** The client email. *** **Client ID** The identifier of a client profile. *** **Archived** Indicates whether an account is archived on a trading platform. *** **Enabled** If enabled, the account participates in data sync and calculation of rewards. All accounts are enabled by default (the **Enabled** field is set to **Yes**). You can change the this status in the account details. *** **Hidden** If **Yes**, an account isn't shown to a partner. This means the account is included in a [group](groups) for which the **Hide accounts** setting is enabled. *** **Created** The date and time when an account was created on a trading platform. ## Account details [#account-details] To view details, click the **account number** or . The page is divided into the following tabs: On this tab, you can view general information about an account. On this tab, you can view the deposit history of an account. For a detailed description of the fields, see [Deposits](deposits). On this tab, you can view the withdrawal history of an account. For a detailed description of the fields, see [Withdrawals](withdrawals). On this tab, you can view trading history of an account, with the following data provided on each trade: **Trade execution time** The date and time when a trade was executed. *** **Platform** The name of a platform on which a trade was executed. *** **Trade ID** The trade identifier. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The symbol code. *** **Volume, lots** The volume traded, in lots. *** **Position** The current position state. Possible values: * Closed * Open *** **Rewards** The amount of rewards paid for a trade. ## Deposit list [#deposit-list] By default, the list is sorted by date in the descending order (the most recent deposits appear at the top of the list). For a list of deposits made by a client, navigate to the **Program** > **Clients** > **Details** > **Deposits** tab. For a list of deposits made on a trading account, navigate to the **Platforms** > **Accounts** > **Details** > **Deposits** tab. View the following information for each deposit: **Date** The date and time when a deposit operation was made. *** **Platform** The trading platform name. *** **Account** The trading account number. *** **Currency** The deposit currency. *** **Amount** The deposit amount. *** **ID** The deposit identifier. ## Deposit details [#deposit-details] To view details, click the **deposit ID** or . The detailed information contains the following: **Trading platform** The trading platform name. *** **Transaction ID** The unique identifier of a deposit operation on a trading platform. *** **Trading account** The trading account number. *** **Base currency code** The deposit currency. *** **Amount** The deposit amount. ## Group list [#group-list] View the following information for each group: **Platform** The trading platform name. *** **Group** The group of trading accounts as set on a trading platform. *** **Trades** The number of trades made by IB clients. *** **Created** The date and time when a group was created on a trading platform. ## Group details [#group-details] To view details, click the **group name** or . The page is divided into the following tabs: On this tab, you can view the general configuration of a group. **Platform** The trading platform name. *** **Group** The group of trading accounts, as defined on the trading platform. *** **Currency** The currency in which the trading accounts in this group are denominated. *** **Lot size** The lot size. The standard lot size of **1.00** is used by default; the lot size of **0.01** is used for groups providing for greater decimal precision. *** **Hide accounts** If **Yes**, accounts included in this group are hidden and aren't shown to a partner. *** **Archived** If **Yes**, this group was archived on the trading platform. *** **Created** The date and time when a group was created on the trading platform. On this tab, you can view information about trades. **Trade execution time** The date and time when a trade was executed. *** **Platform** The trading platform name. *** **Trade ID** The trade identifier. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The symbol code. *** **Volume** The volume traded. *** **Position** The current position state. Possible values: * Open * Closed *** **Rewards** The amount of rewards paid for a trade. ## Platform list [#platform-list] The page data is presented in a table form, with the table columns providing the following information: **ID** The platform identifier in the B2CORE IB. *** **Name** The trading platform name. *** **Status** The trading platform status. Possible values: * Enabled * Disabled *** **Trades** The number of trades made on a platform. *** **Created** The date and time when a platform was connected to your IB. ## Platform details [#platform-details] To view details, click the **platform name** or . The page is divided into the following tabs: On this tab, you can view trading platform settings. Learn about the provider, credentials, and date and time when a platform was edited. Click the **Platform ID** link to navigate to the **Edit platform** page where you can view the details about a provider and configure its settings. After you have finished configuring a platform, click **Save** to apply the changes. On this tab, you can view information about drivers. The **Report** and **WEBAPI** drivers are configured by default. You can specify the driver **Priority** so that if a driver with a higher priority fails, a backup driver with a lower priority is used instead. If all drivers fail, the service reports that it can't operate properly. After a driver is added, it's automatically assigned the lowest priority. The priority can be changed later on when configuring drivers. You can run diagnostics by clicking the **Test connection** button. Click the driver name to navigate to the details page where you can view the details about a driver and configure its settings. After you have finished configuring a driver, click **Save** to apply the changes. ## Symbol list [#symbol-list] View the following information for each symbol: **Platform** The trading platform name. *** **Trading group** *Applicable only for MetaTrader 4, MetaTrader 5, cTrader.* The account group, as defined on the trading platform. *** **Symbol group** *Applicable only for MetaTrader 5.* The symbol group, as defined on the trading platform. *** **Symbol** The symbol code. *** **Contract size** The contract size. *** **Quote currency code** The code of the quote currency. *** **Archived** If **Yes**, this symbol was archived on the trading platform. *** **Trades** The total number of trades by a symbol. *** **Created** The date and time when a symbol was created on a trading platform. ## Symbol details [#symbol-details] To view details, click the **symbol name** or . The page is divided into the following tabs: On this tab, you can view detailed information about a symbol. **Trading platform** The trading platform name. *** **Trading group** *Applicable only for MetaTrader 4, MetaTrader 5, cTrader.* The account group, as defined on the trading platform. *** **Symbol** The symbol code. *** **Quote currency** The second currency listed in a currency pair. *** **Contract size** The contract size. *** **Archived** If **Yes**, this symbol was archived on the trading platform. *** **Created** The date and time when a symbol was created. On this tab, you can view, add and modify payment plans configured for symbols. **#** The sequence number. *** **Type** The partnership program. *** **Payment plan** The configuration of rewards calculation. *** **Position** The position status. Possible values: * Open * Closed *** **Created** The date and time when a payment plan was created. ## Trade list [#trade-list] View the following information for each trade: **Trade execution time** The date and time when a trade was executed. *** **Platform** The name of a trading platform. *** **Account type** The account type. Possible values: * Default * Payment account * PAMM investment account * PAMM master account *** **Account** The number of a trading account. *** **Trade ID** The trade identifier on the trading platform. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The trade symbol. *** **Volume, lots** The volume traded, in lots. *** **Position** The current position state. Possible values: * Open * Closed *** **Reversal** *Applicable for cTrader only.* If **Yes**, the position was reversed as a result of the trade. For more information, refer to [cTrader documentation](https://help.ctrader.com/ctrader-web/interface/trade-watch/#reverse-and-double-position). *** **Rewards** The number of rewards paid for a trade. ## Trade details [#trade-details] To view details, click the **Trade execution time**, **Trade ID** or . The page is divided into the following tabs: On this tab, you can view detailed information about a trade. **Trading platform** The name of a trading platform. *** **Trade account type** The account type. Possible values: * Default * Payment account * PAMM investment account * PAMM master account *** **Trading account** The account number of a client that has executed a trade. *** **Trade ID** The trade identifier on the trading platform. *** **Trade execution time** The date and time when a trade was executed. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The symbol name. *** **Quote currency** The alphabetic code of a quote currency. *** **Contract size** The contract size. *** **Price** The trade execution price. *** **Volume, lots** The volume traded, in lots. *** **Volume, USD** The volume traded, in USD. *** **Commission** The total amount of paid commissions. *** **Reversal** *Applicable for cTrader only.* If **Yes**, the position was reversed as a result of the trade. For more information, refer to [cTrader documentation](https://help.ctrader.com/ctrader-web/interface/trade-watch/#reverse-and-double-position). *** **Client email** The client email. *** **Client ID** The client identifier. On this tab, you can view detailed information about rewards paid for trades. This tab is empty if no rewards were paid. **Level** The level of a client. *** **Currency** The currency in which a reward was paid. *** **Amount** The amount of a reward. *** **IB name** The partner name. *** **IB email** The partner email. *** **IB type** The name of partnership program. *** **State** The current status of a reward payment. Possible values: * **Done** — the reward was successfully credited to a partner's account. * **Pending** — the reward was calculated, but not yet credited to a partner's account. * **Canceled** — the reward was canceled and then debited from a partner's account. *** **Created** The date and time when a reward was calculated. ## Withdrawal list [#withdrawal-list] The list is sorted by date in descending order by default (newer withdrawals appear at the top of the list). To view a list of withdrawals specified by a client, navigate to the **Program** > **Clients** > **Details** > **Withdrawals** tab. To view a list of withdrawals specified by a trading account, navigate to the **Platforms** > **Accounts** > **Details** > **Withdrawals** tab. View the following information for each withdrawal: **Date** The date and time when a withdrawal operation was executed. *** **Platform** The trading platform name. *** **Account** The account number on a trading platform. *** **Currency** The currency in which a withdrawal operation was executed. *** **Amount** The amount of a withdrawal operation. *** **ID** The identifier withdrawal operation. ## Withdrawal details [#withdrawal-details] To view details, click the **withdrawal ID** or . The detailed information contains the following: **Trading platform** The trading platform name. *** **Transaction ID** The unique identifier of a withdrawal operation on a trading platform. *** **Trading account** The account number on a trading platform. *** **Base currency code** The currency in which a withdrawal operation was executed. *** **Amount** The amount of a withdrawal operation. The B2CORE IB API is currently restricted and **not** publicly available. ## App list [#app-list] View the following information for each app: **App name** The app name. *** **Registration date** The date and time when an app was registered. ## App details [#app-details] To view details, click the **app name** or **pencil icon**. The detailed information contains the following: **App name** The app name. *** **Client ID** The public identifier of your app. *** **Client secret** The private identifier of your app, which is used to verify the client's identity when accessing the system via the API. Your **Client ID** and **Client secret** are used to verify your identity. To properly protect you and your clients, please make sure that these values are kept in a secure storage. **Registration date** The date and time when an app was registered. Date and time values in the B2CORE UI are displayed according to these settings. The values on this page are read-only and can't be modified. On this page, a connection to the IB server is set up. The **API status** field on this page indicates the current API connection status. The most common statuses are listed below: * `Running` — the IB server is functioning properly. * `Maintenance` — the IB server is being updated. * `NotFoundHttpException` — an incorrect **API Base URL**. * `SSL Certificate Problem` — the certificate has expired. This page contains current versions of the B2CORE IB and a link to Release notes. ## Client list [#client-list] View the following information for each client: **Registration date** The date and time when a client was registered. *** **Name** The name of a client. This is a link to [client details](clients#client-details). *** **Country** The client's location. *** **Email** The client's email address. *** **Client ID** The client identifier used in the B2CORE UI. *** **IB type** The partnership program joined by a partner who referred the client. *** **IB** The name of a partner who referred the client. This is a link to [partner details](introducing-brokers#partner-details). ## Client details [#client-details] To access details, click the **client name** or . The page is divided into the following tabs: On this tab, you can view the client identifier, tags, chain, name, email, country, and registration date. On this tab, you can view a client's trading accounts. For a detailed description of the fields, see [Accounts](../platforms/accounts). On this tab, you can view a client's deposit history. For a detailed description of the fields, see [Deposits](../platforms/deposits). On this tab, you can view a client's withdrawal history. For a detailed description of the fields, see [Withdrawals](../platforms/withdrawals). On this tab, you can view a client's trading history. For a detailed description of the fields, see [Trades](../platforms/trades). ## Partner list [#partner-list] View the following information for each partner: **Name** The name of a partner. This is a link to [partner details](introducing-brokers#partner-details). *** **Country** The country specified by a partner during registration and a KYC procedure. *** **Email** The partner email. *** **Client ID** The partner identifier used in the B2CORE UI. *** **Direct clients** The number of partner's [direct clients](#user-content-fn-1)[^1]. *** **Trading volume, lots** The total trading volume, in lots, for which rewards were paid, including the volume traded by all of the partner's clients regardless of their level. Use a quick filter to include or exclude clients with zero trading volume. *** **Trading volume, USD** The total trading volume, in USD, for which rewards were paid, including the volume traded by all of partner's clients regardless of their level. Use a quick filter to include or exclude clients with zero trading volume. *** **Reward amount** The total amount of rewards paid to a partner. *** **IB type** The partnership program joined by a partner. *** **Master** Indicates if a partner is assigned the Master[^2] status. *** **Registration date** The date and time when a partner joined a partnership program. ## Partner details [#partner-details] To access details, click the **partner name** or . The page is divided into the following tabs: On this tab, you can view the partner profile information and do the following: * Configure payment preferences * Change a program joined by a partner * Block a partner On this tab, you can view a partner's banner performance data. For a detailed description of the fields, see [Banners](../promo/banners/). On this tab, you can view a partner's link performance data and generate a QR code. For a detailed description of the fields, see [Landings](../promo/landings). On this tab, you can view the click performance for a partner's links and banners. For a detailed description of the fields, see [Analytics](../promo/analytics/clicks). On this tab, you can view a partner's direct clients and sub-IB clients. For a detailed description of the fields, see [Clients](clients). On this tab, you can view a list of accounts of all partner's clients. For a detailed description of the fields, see [Accounts](../platforms/accounts). On this tab, you can view a partner's account deposit history. For a detailed description of the fields, see [Deposits](../platforms/deposits). On this tab, you can view a partner's account withdrawal history. For a detailed description of the fields, see [Withdrawals](../platforms/withdrawals). On this tab, you can view a partner's trading history. For a detailed description of the fields, see [Trades](../platforms/trades). On this tab, you can view the rewards paid to a partner. For a detailed description of the fields, see [Rewards](../payments/rewards). On this tab, you can view reports for paid rewards. Use the **Group by** option to view trades according to a specific timeframe (previous hour, day, week, month, year). To view trades over a custom timeframe, enter the **Period start** and **Period end** dates. For more details, refer to [Payment report](../reports/payment-report). **See also:** * [How to register a partner](../../how-to-articles/how-to-register-a-partner) * [How to block a partner](../../how-to-articles/how-to-block-a-partner) * [How to configure personal rewards](../../how-to-articles/how-to-configure-personal-rewards) * [How to configure a Master IB](../../how-to-articles/how-to-configure-a-master-ib) [^1]: Clients who signed up to the B2CORE UI by a referral link of a partner. [^2]: Key partners with personal conditions. To learn more, see [#master-ib](../../key-terms#master-ib "mention") On this page, you can reassign clients and sub-IBs from one Introducing Broker to another without manually exporting and importing IB-related data. The following options are available: * **Reassign All** — reassign all users from one IB to another. Specify the following fields: * **Source IB email** — the email address of the IB from which users are reassigned. * **New IB email** — the email address of the IB to which users are reassigned. * **Reassign One** — reassign an individual client or sub-IB to another IB. Specify the following fields: * **Client / Sub-IB email** — the email address of the client or sub-IB to be reassigned. * **Source IB email** — the email address of the IB from which the user is reassigned. * **New IB email** — the email address of the IB to which the user is reassigned. Click **Preview** to review the reassignment before applying it. ## Reassignment history [#reassignment-history] The list of performed reassignments is displayed below, providing the following information: **Type** The reassignment type: `Reassign All` or `Reassign One`. *** **Introducing brokers** The source and destination IBs of the reassignment. *** **Status** The current status of the reassignment. *** **Users** The number of reassigned users. *** **Created** The date and time when the reassignment was created. ## Type list [#type-list] View the following information for each program: **Name** The name of a partnership program. This is a link to [type details](types#type-details). *** **Levels** The number of levels[^1] configured for a partnership program. *** **Tiers** The number of tiers[^2] configured for a partnership program. *** **Introducing brokers** The number of partners participating in a program. *** **Direct clients** The number of your partners' [direct clients](#user-content-fn-3)[^3]. *** **Reward amount** The number of rewards paid to your partners. *** **Created** The date and time when a partnership program was created. ## Type details [#type-details] To access details, click the **type name** or . The page is divided into the following tabs: On this tab, you can view the partnership program settings. **Name** The name of a partnership program. *** **Description** The description of a partnership program. *** **Registration** The options of joining a partnership program. Possible values: * **Auto** — each client signing up to the B2CORE UI automatically becomes a partner. If multiple partnership programs are available, an IB account is created for each program. * **Private** — clients are added to a partnership program by a Back Office admin. * **Public** — clients can view available partnership programs in the B2CORE UI and choose which programs they join. * **Restricted** — clients can join a partnership program only using a link provided by a participant of another or the same program. The program identifier is indicated in the **Restriction** field. *** **Approvement** *Applicable only for Public or Restricted registration.* If **Enabled**, clients join a partnership program only after their [joining requests](#user-content-fn-4)[^4] are approved by a Back Office admin. *** **Masked email** If **Enabled**, client names and emails aren't visible to a partner. *** **Hidden levels** If **Yes**, all configured levels are displayed. Disabled by default. *** *** **Tier period** The number of days in which the targets set on the **Tiers** tab must be achieved by a partner to receive an increased reward. *** **Currency** The currency in which rewards to partners are paid. The currency is product-specific and can't be edited. *** **CPA Program** The CPA program assigned to this partnership program. Partners in this program will earn CPA rewards when their referred clients meet the CPA program conditions. Only active CPA programs are available for selection. If the assigned program is later deactivated, it remains linked to the partnership program and is marked as inactive. *** **Created** The date and time when a partnership program was created. On this tab, you can view all the available symbols on connected trading platforms. You can choose different [payment plans](../../payment-plans) for different symbols. Trading platforms can be connected and disconnected in the [Platforms](../platforms/) section. **Platform** The name of a trading platform. *** **Trading group** *Applicable only for MetaTrader 4, MetaTrader 5, cTrader.* The account group, as defined on the trading platform. *** **Symbol group** *Applicable only for MetaTrader 5.* The symbol group, as defined on the trading platform. *** **Symbol** The name of a symbol. This is a link to symbol details. *** **Payment plan** The [payment plan](../../payment-plans) set up for a symbol. *** **Position** The state of positions for which rewards are paid. Possible values: * Open * Closed * Open & Closed On this tab, you can view the configured levels. Define the number of partner levels to reward and specify the multiplier used for calculating rewards. Level 1 is created by default. Create an unlimited number of levels depending on your partnership program design. **Level** The sequence number of a level. *** **Ratio** The rewards multiplier. *** **Created** The date and time when a level was created. *** **Updated** The date and time when a level was last updated. On this tab, you can view configured tiers and define targets for your partners. **Name** The name of a tier. *** **Active traders** The number of clients that a partner must introduce to receive an increased reward. These clients should execute at least one trade during the specified **Tier period** to be considered active traders. If 0 (zero), this benchmark is ignored during calculation of rewards. *** **Trading volume, lots** The volume, in lots, that must be traded by partner's clients. If 0 (zero), this benchmark is ignored during calculation of rewards. *** **Ratio** The reward multiplier. *** **Created** The date and time when a tier was created. *** **Updated** The date and time when a tier was last updated. On this tab, you can view the rewards paid to your partners participating in this partnership program. For a detailed description of the fields, see [Rewards](../payments/rewards). On this tab, you can view reports on paid rewards. View trades for different time intervals (hour, day, week, month, years) or view trades according to partners. To view trades over a custom timeframe, enter the **Period start** and **Period end** times. For more details, refer to [Payment report](../reports/payment-report). **See also:** * [How to create an IB type](../../how-to-articles/how-to-create-an-ib-type) * [How to change an IB type for a partner](../../how-to-articles/how-to-change-an-ib-type-for-a-partner) [^1]: Levels determine how many participants in the chain from a partner to a trader receive a reward. To learn more, see [#level](../../key-terms#level "mention") [^2]: Goals to achieve for receiving increased rewarding. To learn more, see [#tier](../../key-terms#tier "mention") [^3]: Clients who signed up to the B2CORE UI by a referral link of a partner. [^4]: To learn more about client requests, refer to [B2CORE documentation](https://docs.b2core.b2broker.com/en/back-office-requests.html). The **Landings** section is not available in the Back Office. Landing pages are configured at the system level by your B2BROKER integration team and are used by partners in their IB Room. ## How landings work [#how-landings-work] In the current version of B2CORE IB, each instance has a single referral landing page configured at the system level. This is typically the registration page of your client portal. When a partner shares their referral link, it redirects the client to this landing page with the partner's unique token appended as a query parameter: ``` {scheme}://{host}{path}?{token}={partner_token} ``` For example: `https://my.example.com/register?referral=abc123` The following parameters are configured by your B2BROKER integration team: | Parameter | Description | Default | | --------------- | ---------------------------------------------------- | ----------- | | Scheme | Protocol used for the link | `https` | | Host | Domain of your client portal | — | | Path | Path to the registration page | `/register` | | Token parameter | Query parameter name that carries the referral token | `referral` | To configure or update these settings, contact your B2BROKER integration team. ## Partner view [#partner-view] Partners can see and copy their referral links in **IB Room → Promo → Links**. On that page, partners can also: * Select a landing page from the available options * Select a language * Add UTM parameters to their link * Generate a QR code for the link Using the **Acquisition report**, you can do the following: * Identify the partners whose clients have executed at least one trade during the reporting period. If the partner's clients haven't made any transactions for the selected period, such partners aren't included in the report. * Learn whether your referral links or promo banners are being clicked. * Assess different traffic sources and see from where new clients are coming (such as specific websites, social media or other venues). * Identify particular countries where the users who clicked your referral links are located. * View the number of clients who have completed registration after clicking your referral link or banner. * View the click conversion rate. The following filter parameters are available: * **Group by** — the criteria for grouping the filtered data. You can group the data by a country/region, referrer, partner or time period (spanning from one hour to a year). * **IB type** — the partnership program. * **Start date** — the beginning of the reporting period. * **End date** — the end of the reporting period. A report is generated automatically after applying filters. Above the report table, you can find **totals** calculated over a specified time period, along with trends obtained for the one preceding it. When exporting page data, the totals aren't included in the report file. The following data is displayed on this page: **Active partners** The number of new partners whose clients have executed at least one trade during the reporting period. *** **Clicks** The number of clicks. *** **Registrations** The number of registrations. *** **Click conversion rate** The number of registrations divided by the number of clicks, expressed as a percentage. It's calculated according to the following formula: **Registrations / Clicks × 100 %**. With a **Payment** report you can: * Spot the best performing traders generating the most revenue for you. * View the rewards paid to partners during a selected period of time. * Find out about the trading volume, both in lots and USD. To group and filter data, specify the following settings: * **Group by** — indicates whether to group data by partners or a time period * **IB type** — the partnership program * **Start date** — the beginning of a reporting period * **End date** — the end of a reporting period A report is generated automatically after applying filters. Above the report table, you can find **totals** calculated over a specified time period, along with trends obtained for the one preceding it. When exporting page data, the totals aren't included in the report file. The following data is available on this page: **Active partners** The number of new partners whose clients have executed at least one trade during the reporting period. *** **Active traders** The number of traders who have executed at least one rewarded trade. *** **Trades** The number of trades for which partners were rewarded. *** **Trading volume, lots** The volume of trades for which partners were rewarded, in lots. *** **Trading volume, USD** The volume of trades for which partners were rewarded, in USD. *** **Rewards** The rewards paid (and marked as *Credited*), in USD. A savings acquisition is created when a client referred by a partner enrolls in a savings program. The acquisition tracks savings activity events for that client. ## Acquisition list [#acquisition-list] View the following information for each savings acquisition: **Client ID** The unique identifier of the referred client. *** **Client Name** The name of the referred client. *** **Partner Name** The name of the partner who referred the client. *** **Partner User ID** The unique identifier of the partner who referred the client. *** **Savings Program** The savings program in which the client enrolled. *** **Events** The savings activity events recorded for this client, such as plan creation and deposits. *** **Created** The date and time when the acquisition was recorded. ## Sort data [#sort-data] Click the **Created** column header to sort acquisitions by creation date. Click again to toggle between ascending and descending order. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Savings Program** — select a program to display acquisitions for this program. * **Partner User ID** — enter a partner user ID to display acquisitions attributed to this partner. * **Date range** — select a start and end date to display acquisitions created during the specified period. After specifying custom filter criteria, click **Apply filters** to apply the changes. Click **Reset filters** to reset all filters. **See also:** * [Savings programs](savings-programs) * [Savings payments](savings-payments) A savings payment is created when a partner earns a reward for a referred client's savings activity during a given period. ## Payment list [#payment-list] View the following information for each savings payment: **Partner User ID** The unique identifier of the partner who earned the reward. *** **Partner Name** The name of the partner who earned the reward. *** **Client ID** The unique identifier of the client whose savings activity generated the reward. *** **Savings Program** The savings program for which the reward was calculated. *** **Level** The program level at which the reward was calculated. *** **Period Date** The date of the period for which the reward was calculated. *** **Payment Amount** The reward amount. *** **Currency** The reward currency. *** **Status** The current status of a savings payment: * **Pending** — the reward has been calculated and is waiting to be processed. * **Processing** — the reward transfer is in progress. * **Processed** — the reward was successfully transferred to the partner's account. * **Succeeded** — the reward transfer was confirmed as successful. * **Failed** — the reward could not be transferred to the partner's account. * **Cancelled** — the reward was cancelled and will not be paid. *** **Created** The date and time when the savings payment was created. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Partner User ID** — enter a partner user ID to display payments for this partner. * **Partner Name** — enter a partner name to display payments for this partner. * **Status** — select a status to display payments with this status. * **Period date range** — select a start and end date to display payments for periods within the specified range. After specifying custom filter criteria, click **Apply filters** to apply the changes. Click **Reset filters** to reset all filters. **See also:** * [Savings programs](savings-programs) * [Savings acquisitions](savings-acquisitions) A savings program defines the conditions and reward rates under which partners earn rebates when their referred clients invest in savings plans. ## Program list [#program-list] View the following information for each savings program: **Name** The name of a savings program. Click the name to open the [program details](savings-programs#program-details). *** **Currency** The currency in which partner rewards are paid. *** **Active** Whether the savings program is active: * **Yes** — the program is active and partners can earn rewards. * **No** — the program is inactive and no new rewards are created. *** **Created** The date and time when a savings program was created. *** **Updated** The date and time when a savings program was last updated. ## Create a savings program [#create-a-savings-program] To create a savings program: 1. Click **Create**. 2. Fill in the required fields: * **Name** — enter a name for the program. * **Description** — optionally, enter a description. * **Currency** — select the currency in which partner rewards will be paid. 3. Click **Save**. After creating a program, add [levels](savings-programs#levels) to define the reward structure, then activate the program. Currency cannot be changed after the program is created. ## Edit a savings program [#edit-a-savings-program] To edit a savings program, click the **Edit** icon next to the program in the list. The following fields can be edited: * **Name** — the name of the program. * **Description** — the description of the program. ## Program details [#program-details] To access program details, click the **program name**. The page displays the program settings and the list of associated levels. ### Levels [#levels] Each savings program contains one or more levels. A level defines the reward rate a partner earns based on their referred clients' savings activity. View the following information for each level: **Level** The level number. *** **Reward Value** The reward rate, as a percentage applied to the client's savings amount. *** **Active** Whether the level is active. #### Add a level [#add-a-level] To add a level to a savings program: 1. Open the program details page. 2. In the **Levels** section, click **Create**. 3. Fill in the required fields: * **Level** — the level number. * **Reward Value** — the reward percentage. * **Active** — whether the level is active. 4. Click **Save**. #### Edit or delete a level [#edit-or-delete-a-level] Levels cannot be added, edited, or deleted while the savings program is active. Deactivate the program first. ### Activate a program [#activate-a-program] A savings program can only be activated if it has at least one active level. To activate a program, click **Activate**. To deactivate an active program, click **Deactivate**. Deactivating a program stops new rewards from being created but does not affect payments already in progress. ### Assign to a partner group [#assign-to-a-partner-group] A savings program must be assigned to a partner group to take effect. Partners in the group will earn savings rewards when their referred clients invest in savings plans. To assign a savings program to a partner group, go to **Program** → **Types**, open the group settings, and select the program in the **Savings Program** field on the **Preferences** tab. ## Filter data [#filter-data] You can filter the data displayed in the savings programs list using the following criteria: * **Name** — enter a program name to search for programs with a matching name. * **Active** — select a status to display active or inactive programs. * **Date range** — select a start and end date to display programs created during the specified period. After specifying custom filter criteria, click **Apply filters** to apply the changes. Click **Reset filters** to reset all filters. **See also:** * [Savings acquisitions](savings-acquisitions) * [Savings payments](savings-payments) The **Promo Banners** tab on the **Promo** page lists a preconfigured collection of promo banners that can be used to attract new clients by means of banner advertising. A **promo banner** is represented by a rectangle of a varying size and color, within which some message is displayed. In the context of banner advertising, the purpose of such banners is to attract visitors of a host website where a banner is placed and encourage them to navigate to a specified landing page. Each banner card displays its size, language, and landing type (for example, **Registration**). **Key points:** * You can configure multiple promo banners for your referral campaign. * The promo banners can be placed on websites or any other advertising platforms. * You can filter the banners displayed on this page by their size, language, or theme. * To change the number of banners displayed per page, use the **Rows per page** dropdown. ## Filter data [#filter-data] You can filter the banners displayed on this page using the following criteria: * **Size** — select a banner size to display banners of this size. * **Language** — select a language to display banners localized for this language. * **Theme** — select a theme to display banners with this theme. To change the number of banners displayed per page, use the **Rows per page** dropdown. ## Configure a banner [#configure-a-banner] To configure a promo banner: 1. From the dropdown located at the top of the page, select a **partnership program** for which you want to configure a banner. 2. Click a **banner** that you want to configure. 3. From the **Landing page** dropdown, select a landing page to which users should be navigated after clicking the banner.\ At present, only the **Sign up** page of the B2CORE UI can be used as a landing page. 4. Click **Copy** to copy the HTML code of your banner to the clipboard. The HTML code includes your unique ID. The copied HTML code can be embedded into an advertising website of your choice. The **Promo** page includes the following tabs: The same link-building controls are also available in the **Partner Link** widget on the [Partner Dashboard](../dashboard). ## Referral links [#referral-links] The **referral link** (also referred to as **Partner Link**) is a personal URL created by a partner introducing new clients to the B2CORE UI. The URL includes a unique identifier (ID) that is assigned to a partner after joining a partnership program. The ID is used to keep track of new clients introduced by each partner and calculate rewards for trades executed by their clients. A partner may have multiple IDs after joining several programs. **Key points:** * A number of referral links can be created (your referral links can be localized or global). * Every link includes a unique partner ID. * You can convert the links into [QR codes](links#qr-codes). * The links can be shared on websites, through social media, in emails, or by any other means preferred by a partner promoting the B2CORE UI. ### Create a personal link [#create-a-personal-link] To create a referral link: 1. In the dropdown located at the top of the page, select a partnership program for which you want to create a link. 2. In the **Link settings** section: * **Landing Page** — select a webpage displayed after clicking the referral link. At present, only the **Sign Up** page of the B2CORE UI can be used as a landing page. * **Language** — select a language to create a localized URL. Select **Global** to create a regular URL that doesn't indicate a particular language. 3. Optionally, you can include [UTM parameters](links#utm-parameters) in your referral link by expanding the **UTM parameters** section and specifying the needed parameters. After you've configured the link settings, your referral link is displayed on the right side of the page. You can copy the URL to the clipboard using the **Copy** button. ### UTM parameters [#utm-parameters] The UTM parameters (or *tracking tags*) are short text codes that you can include into referral links to track various metrics and assess the efficiency of your marketing strategies. You can specify the following UTM parameters: ## QR codes [#qr-codes] If required, your referral links can be converted into QR codes that users can scan to be forwarded to a landing webpage pointed by the link URL. **Key points:** * You can generate multiple QR codes for a single referral link. * The QR codes can be customized by specifying various background colors and adding icons to them. * Similar to regular referral links, the QR codes can be shared on websites, through social media, in emails, or by any other means preferred by a partner seeking to attract new clients. * The QR codes can be downloaded to your computer and then used in printed promo materials. ### Generate a QR code [#generate-a-qr-code] To generate a QR code for your referral link, click the **Generate code** button displayed on the right side of the page. Optionally, you can apply custom settings to your QR code before generating it: * **Color** — select a QR code color. * **Icon** — select an icon to be added to a QR code. After the QR code is generated: * **Download PNG** — click this button to download a PNG image of the generated QR code to your computer. * **Copy embed code** — click this button to copy the HTML code of the generated QR code to the clipboard. You can then embed this code into your website or any other promo material. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The following information is displayed in the report table: **Account ID** The trading account identifier. *** **Platform** The trading platform on which an account is created. *** **Currency** The currency in which an account is denominated. *** **Balance** The current balance on an account. *** **Credit** The credit on an account. *** **Profit** The profit earned on an account. *** **PnL** The current profit-loss value calculated for an account. *** **Trades** The total number of trades executed on an account. *** **Vol** The total trading volume on the account. *** **Lots** The total volume, in lots, traded on the account. *** **Rewards** The total amount of rewards paid to you for trades executed on the account. *** **Created** The date and time when the account was created. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Client ID** — enter a client identifier to display the data on trading accounts created by this client. * **Account ID** — enter an account identifier to display the data on this account. * **Date Range** — select a start and end date to display the data on trading accounts created during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To specify how many items to show on each page, use the **Rows per page** dropdown. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The total number of clicks, registrations, and the click conversion rate are displayed for the selected program. The following information is displayed in the report table: **Click ID** The identifier of the click on a referral link or promo banner. *** **Client ID** The client identifier. It's displayed if after clicking your referral link or promo banner, a user has signed up to the B2CORE UI and become your [direct client](#user-content-fn-1)[^1]. *** **Country** The country where a user who clicked your referral link or promo banner is located, based on the user's IP address. *** **IP Address** The IP address of a user who clicked your referral link or promo banner. *** **Link** The identifier of a referral link or promo banner that was clicked. *** **Referrer** The resource from where a user came, such as a website or social media platform. *** **Date** The date and time when a referral link or promo banner was clicked. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Client ID** — enter a client identifier to display the data on clicks made by this client. * **Country** — select a country to display the data on clicks made by users located in this country. * **Landing page** — select a landing page to display the data on clicks resulting in this page being opened. Users are navigated to this page after clicking your referral links or promo banners. * **Referrer** — specify a resource, such as a website or social media platform, to display the data on clicks made on this resource. * **Date range** — select a start and end date to display the data on clicks made during the specified period. * **Show UTM filters** — expand this section to specify [UTM parameters](../promo/links#utm-parameters) and display the data on traffic sources. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. [^1]: The client who signed up to the B2CORE UI by your referral link. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The following information is displayed in the report table: **Client ID** The client identifier. *** **Name** The full name of a client. *** **Email** The client's email address. *** **Country** The country specified by a client when signing up to the B2CORE UI. *** **Trading Volume** The total volume, in lots, traded by the client and their clients. *** **Rewards** The total amount of rewards paid to you for trades executed by the client and their clients. *** **Clients** The total number of your clients attracted by your client, both [direct clients](#user-content-fn-1)[^1] and [sub-IB clients](#user-content-fn-2)[^2]. *** **Date** The date and time when a client has signed up to the B2CORE UI after clicking your referral link or promo banner. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **SubIB**: * Select **Yes** to display a list of your [sub-IB clients](#user-content-fn-3)[^3]. * Select **No** to display a list of your [direct clients](#user-content-fn-4)[^4]. * Select **None** to display a full list of clients. * **Client ID** — enter a client identifier to display the data on this client. * **Country** — select a country to display a list of clients who specified this country when signing up to the B2CORE UI. * **Date range** — select a start and end date to display the data on clients who have signed up to the B2CORE UI during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. ## View client details [#view-client-details] To open the **Client details** page, select a client and click the client row area. On the details page, you can switch between the following tabs: On this tab, you can find information about the client identifier, name, email address, location, and level[^5]. Depending on the configuration of your partnership program, partners rewards may be calculated based on levels assigned to their clients. On this tab, you can find a list of all clients, both [direct clients](#user-content-fn-6)[^6] and [sub-IB clients](#user-content-fn-7)[^7]. On this tab, you can find a list of client trading accounts, platforms on which the accounts were created, as well as trading and balance operations made on these accounts. On this tab, you can find a list of all trades executed by a client and learn about the rewards paid to you for each trade. [^1]: Clients who signed up to the B2CORE UI by your referral link. [^2]: Clients who signed up to the B2CORE UI by your referral link and then became partners too. [^3]: Clients who signed up to the B2CORE UI by your referral link and then became partners too. [^4]: Clients who signed up to the B2CORE UI by your referral link. [^5]: Levels determine how many participants in the chain from a partner to a trader receive a reward. To learn more, see [#level](../../../broker-guide/key-terms#level "mention") [^6]: Clients who signed up to the B2CORE UI by your referral link. [^7]: Clients who signed up to the B2CORE UI by your referral link and then became partners too. The **CPA** report lists clients you have referred to the CPA program and shows how far each client has progressed through the program conditions. ## Generate a report [#generate-a-report] The following information is displayed in the report table: **Client** The unique identifier of the referred client. *** **CPA Program** The name of the CPA program to which the client was referred. *** **Steps Accomplished** The conditions from the CPA program payment plan that the client has completed. Possible steps include: * **Registration** — the client has registered using your referral link. * **KYC** — the client has completed identity verification. * **Minimum Deposit** — the client has made the minimum required deposit. *** **Created** The date and time when the acquisition was recorded. ## Sort data [#sort-data] Click the **Created** column header to sort acquisitions by creation date. Click again to toggle between ascending and descending order. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **CPA Program** — select a CPA program to display acquisitions attributed to this program. * **Date range** — select a start and end date to display acquisitions created during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The following data is displayed in the report table: **Client Email** The email address of the client who owns the account to which the deposit was made. *** **Id** The identifier of a deposit operation. *** **Account** The trading account number. *** **Currency** The deposit currency. *** **Amount** The deposit amount. *** **Date** The date and time when a deposit was made. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Platform unique value** — enter a unique identifier of a deposit operation to display the corresponding deposit. * **Account** — enter a trading account number to display the data on deposits made to this account. * **Date range** — select a start and end date to display the data on deposits made during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. The **Reports** page is a single page with the following tabs. Each tab provides its own table columns, and shares common **Filters** and **Rows per page** controls. ## Generate a report [#generate-a-report-] The following information is displayed in the report table: **Client ID** The client identifier. *** **Level** The client level[^1]. *** **Platform** The trading platform on which a trade was executed. *** **Account ID** The identifier of a trading account on which a trade was executed. *** **Trade ID** The trade identifier. *** **Side** The trade side. Possible values: * Buy * Sell *** **Symbol** The symbols traded. *** **Volume Lot** The volume traded, in lots. *** **Reward Amount** The rewards paid to you for a trade. *** **Trade Execution Time** The date and time when a trade was executed. *** **Transaction ID** The identifier of the transaction through which the reward was paid. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Client ID** — enter a client identifier to display the data on trades executed by this client. * **Account ID**, **Trade ID**, **Transaction ID** — enter an account, trade, or transaction identifier to display the corresponding trades. * **Symbol** — specify trade symbols, such as **ETH/USD**, to display the data on trades that were made on these symbols. * **Level** — enter a client level to display the data on rewards generated by the clients assigned this level. * **Date range** — select a start and end date to display the data on trades executed during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. [^1]: Levels determine how many participants in the chain from a partner to a trader receive a reward. To learn more, see [#level](../../../broker-guide/key-terms#level "mention") The **Savings Rebates** report lists the rewards you have received for clients who invested in savings plans. ## Generate a report [#generate-a-report] The following information is displayed in the report table: **Client** The unique identifier of the client whose savings activity generated the reward. *** **Program** The name of the savings program for which the reward was calculated. *** **Level** The program level at which the reward was calculated. *** **Rebate** The reward amount paid to you. *** **Period** The date of the period for which the reward was calculated. *** **Status** The current status of the payment: * **Pending** — the reward is waiting to be processed. * **Succeeded** — the reward was successfully transferred to your account. * **Failed** — the reward could not be transferred. ## Sort data [#sort-data] Click the **Program** column header to sort payments. Click again to toggle between ascending and descending order. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Status** — select a status to display payments with this status. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. ## Generate a report [#generate-a-report] The following data is displayed in the report table: **Email** The email address of the client who executed the trade. *** **Client ID** The client identifier. *** **Platform** The trading platform on which a trade was executed. *** **Account ID** The identifier of a trading account on which a trade was executed. *** **Symbol** The symbols traded. *** **Position ID** The identifier of the position associated with the trade. *** **Trade ID** The trade identifier. *** **Side** The trade side. Possible values: * Buy * Sell *** **Position** The position status. Possible values: * Open * Closed *** **Volume** The volume traded, in lots. *** **Trade Execution Time** The date and time when a trade was executed. *** **Price** The price at which the trade was executed. *** **Swap** The swap amount charged or credited for the trade. *** **Commission** The commission charged for the trade. *** **Profit** The profit or loss generated by the trade. ## Filter data [#filter-data] You can filter the data displayed on this page using the following criteria: * **Trade ID**, **Position ID**, **Account ID** — enter a trade, position, or account identifier to display the corresponding trades. * **Date range** — select a start and end date to display the data on trades executed during the specified period. * **Email** — specify a client email to display the data on trades executed by this client. * **Client ID** — enter a client identifier to display the data on trades executed by this client. * **Side** — specify a trade side to display the corresponding trades. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The following information is displayed in the report table: **Transaction ID** The transaction identifier. *** **Wallet ID** The identifier of a wallet to which a reward was paid. *** **Rewards** The number of trades covered by a single reward payment. *** **Amount** The amount rewarded. *** **Date** The date and time when a transaction was made. ## Filter data [#filter-data] You can filter the data displayed in the table using the following criteria: * **Transaction ID** — enter a transaction identifier to display the corresponding transaction. * **Wallet ID** — enter a wallet identifier to display the data on rewards paid to this wallet. * **Date range** — select a start and end date to display the data on transactions made during the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. ## Generate a report [#generate-a-report] From the dropdown at the top of the page, choose the **partnership program** you wish to view data for. The following data is displayed in the report table: **Client Email** The email address of the client who owns the account from which the withdrawal was made. *** **Account** The trading account number. *** **Currency** The withdrawal currency. *** **Amount** The withdrawal amount. *** **Id** The identifier of a withdrawal operation. *** **Date** The date and time when a withdrawal operation was made. ## Filter data [#filter-data] You can filter the data displayed on this page using the following criteria: * **Platform unique value** — enter a unique identifier of a withdrawal operation to display the corresponding withdrawal. * **Account** — enter a trading account number to display the data on withdrawals made from this account. * **Date range** — select a start and end date to display the data on withdrawals made within the specified period. Click **Filters** to open the filter panel and specify custom filter criteria. To change the number of entries displayed per page, use the **Rows per page** dropdown. If the default list doesn't meet your partnership program requirements, you can add new countries using the **Create** button or modify them according to your preferences using the **pencil icon**. The following information is provided about each country: **Name** The name of a country. *** **Alpha-2 code** The two-letter country code, as per ISO 3166. *** **Alpha-3 code** The three-letter country code, as per ISO 3166. *** **Numeric code** The numeric country code, as per ISO 3166. *** **Geographic region** The geographic subregion, as per ISO 3166. *** **Created** The date and time when an entity was added. By default, you can use the service which determines the client's geolocation based on the IP address. You can edit the available geolocation services or add custom ones. ## Providers list [#providers-list] The following information is provided about each provider: **Priority** The provider priority. If you have multiple providers configured, data requests are sent based on their priority. If the highest priority provider doesn’t respond, the request moves to the next provider in line, continuing in this manner until the data is received. *** **Name** The name of a provider. This is a link to provider details. *** **Created** The date and time when a provider was added. ## Provider details [#provider-details] To access details, click the **provider name** or **pencil icon**. Here you can adjust provider settings. The page is divided into the following tabs: On this tab, you can view general information on a provider, as well as change its name and priority. On this tab, you can view general information on a database, including the number of records. On this tab, you can run diagnostics and check the connection to a provider, by clicking the **Test connection** button. View the following information for each attack: **IP Address** The client IP address from which an attack was registered. *** **Incidents** The number of failed attempts to obtain a token using invalid credentials. *** **Created** The date and time when an attack was registered. View the following information for each authentication: **IP Address** The client IP address from which the authentication was made. *** **Client ID** The client identifier. *** **User-Agent** The User-Agent data. *** **Created** The date and time when a user was authenticated. **Authorization** is a successful obtaining of an access token using provided credentials. View the following information for each authorization: **IP Address** The client IP address from which the authorization was made. *** **Client ID** The client identifier. *** **User-Agent** The User-Agent data. *** **Created** The date and time when a token was obtained. *** **Updated** The date and time when a token was last refreshed. *** **Expires** The date and time when a token expires. Any IP address from which multiple failed attempts to authorize are made is automatically blocked for a certain period of time. Such addresses are added to a blacklist, along with the IP addresses that were blocked manually. View the following blacklist settings: **Enabled** The current access permissions set for an IP address. *** **Auth attempts** The maximum number of attempts to authorize or authenticate made from an IP address before it's added to a blacklist. *** **Deny, seconds** The time period for which an IP address is blocked, in seconds. An **incident** is a failed attempt to obtain a token using invalid credentials. If the number of incidents exceeds the **Auth attempts** threshold set on the **Preferences** > **Security** > **Blacklist** page, it's classified as an [attack](attacks). View the following information for each incident: **IP Address** The client IP address from which an incident was registered. *** **User-Agent** The User-Agent data. *** **Fingerprint** The device fingerprint data. *** **Requests** The amount of failed attempts to obtain a token with invalid credentials. *** **Attack** Indicates whether the incident is considered an attack. *** **Created** The date and time when an incident was registered. View the following information for each IP address: **IP Address** The IP address. *** **Policy** The access policy. Possible values: * **allow** — access to the IB platform is allowed from this IP address. * **deny** — access to the IB platform is denied from this IP address. *** **Time to live** *(optional)* The time period for which a policy holds, in seconds. *** **Expires** The date and time when a policy expires. *** **Created** The date and time when a policy was added. Before enabling a whitelist, make sure **all** trusted IPs are assigned the **allow** policy on the **Preferences** > **Security** > **IP addresses** page. Set **Enabled** to **Yes** to allow access only from specific IP addresses and deny access from all other IPs. ## Click list [#click-list] View the following information for each click: **Date** The date and time when a click was made. This is a link to click details. *** **IP address** The IP address from which registration was completed. *** **Latitude**, **Longitude** The geographical coordinates of a newly registered client. *** **Country** The country of a newly registered client, according to the IP address. *** **Landing page** The landing page to which a referral link is pointing. *** **URL** The resource identifier. *** **UTM Campaign** The URI parameter that specifies an individual campaign name. *** **UTM Content** The URI parameter that’s used to differentiate similar content or links within the same ad. For example, if you have two call-to-action links within the same email message, you can use **UTM Content** and set different values for each so you can tell which version is more effective. *** **UTM Medium** The URI parameter that specifies advertising or marketing media, for example: cpc, banner, email. *** **UTM Source** The URI parameter that identifies an advertiser, site, publication, that’s sending traffic to your property, for example: google, youtube. *** **UTM Term** The URI parameter that identifies paid search keywords. *** **Referrer** An HTTP header identifying the address of a web page from which a resource was requested. *** **User-Agent** The User-Agent data, which may include optional comments. *** **Client ID** The link to a client's profile in the B2CORE UI. *** **Client name** The name of a newly registered client. *** **Contact email** The email of a newly registered client. *** **Country of residence** The country specified by a client during registration. *** **Registration** The status of a client registration request. ## Click details [#click-details] To access details, click the **Date** or . ## Banner list [#banner-list] View the following information for each banner: **Banner** The thumbnail banner image. *** **Name** The banner name. *** **Language** The banner [language](languages). *** **Size** The banner [size](sizes). *** **Theme** The banner [theme](themes). *** **Clicks** The number of times a banner was clicked. *** **Registrations** The number of clients registered after clicking a banner. *** **Click conversion rate** The click conversion rate, which is the number of registrations divided by the number of clicks, expressed as a percentage. *** **Created** The date and time when a banner was created. ## Banner details [#banner-details] To access details, click the **banner name** or . Here you can view and customize banner settings. **Name** The banner name. This value can be modified. *** **Language** The banner language. This value can be modified. *** **Size** The banner size. This value can be modified. *** **Theme** The banner theme. This value can be modified. *** **CDN Image URL** The CDN URL pointing to a banner along with a banner image. This value can be modified. *** **Clicks** The number of times a banner was clicked. *** **Registrations** The number of clients registered after clicking a banner. *** **Click conversion rate** The click conversion rate, which is the number of registrations divided by the number of clicks, expressed as a percentage. *** **Created** The date and time when a banner was created. *** **Updated** The date and time when a banner was last updated. ## Language list [#language-list] View the following information for each language: **Language** The language name. *** **Banners** The number of banners in a language. *** **Created** The date and time when a language was added. ## Language details [#language-details] To access details, click the language name or . Here you can view and customize language settings. **Name** The language name. This value can be modified. *** **Banners** The number of banners in a language. *** **Created** The date and time when a language was created. *** **Updated** The date and time when a language was last updated. ## Size list [#size-list] View the following information for each language: **Size** The size name. *** **Banners** The number of banners of this size. *** **Created** The date and time when a size was added. ## Size details [#size-details] To access details, click the size name or . Here you can view and customize size settings. **Width** The banner width. This value can be modified. *** **Height** The banner height. This value can be modified. *** **Banners** The number of banners in a language. *** **Created** The date and time when a language was created. *** **Updated** The date and time when a language was last updated. ## Theme list [#theme-list] View the following information for each theme: **Theme** The theme name. *** **Created** The date and time when a theme was created. *** **Banners** The number of banners added to a theme. ## Theme details [#theme-details] To access details, click the theme name or . Here you can view and customize theme settings. **Name** The theme name. This value can be modified. *** **Banners** The number of banners added to a theme. *** **Created** The date and time when a theme was created. *** **Updated** The date and time when a theme was last updated. ## Color list [#color-list] View the following information for each color: **Priority** The priority that defines the order in which colors are listed in the B2CORE UI. *** **Name** The color name. *** **Background color** The HEX code of a background color. *** **Foreground color** The HEX code of a foreground color. *** **Created** The date and time when a color was added. ## Color details [#color-details] To access details, click the color name or . Here you can view and customize color settings. **Name** The color name. This value can be modified. *** **Priority** The priority that defines the order in which colors are listed in the B2CORE UI. This value can be modified. *** **Background color** The HEX code of a background color. This value can be modified. *** **Foreground color** The HEX code of a foreground color. This value can be modified. *** **Created** The date and time when a color was added. *** **Updated** The date and time when a color was last updated. ## Icon list [#icon-list] View the following information for each color: **Priority** The priority that defines the order in which icons are listed in the B2CORE UI. *** **Icon** The thumbnail icon image. *** **Name** The icon name. *** **Created** The date and time when an icon was added. ## Icon details [#icon-details] To access details, click the icon name or . Here you can view and customize icon settings. **Name** The icon name. This value can be modified. *** **Priority** The priority that defines the order in which icons are listed in the B2CORE UI. This value can be modified. *** **Icon** The icon image. *** **Created** The date and time when an icon was added. *** **Updated** The date and time when an icon was last updated. ## General information [#general-information] The B2CONNECT FIX server provides all the functionality necessary for real-time trading and receiving up-to-date market information via the Financial Information eXchange protocol. In this document, you can find a detailed description of the B2CONNECT FIX API, including the information about how to connect to a demo FIX server. The B2CONNECT FIX API is based on the version 4.4 of the Financial Information eXchange protocol. It’s assumed that the reader of this document is already familiar with the FIX protocol. To learn more about the protocol specification, see the [FIX Trading Community website](https://www.fixtrading.org/). If your trading engine is powered by Go, take a minute to learn about [SimpleFix Go](https://github.com/b2broker/simplefix-go/). This open-source library is provided by the B2CONNECT team to help you quickly integrate FIX messaging into your environment. The library is entirely written in Go and supports any FIX API version. ### Supported message types [#supported-message-types] The following message types can be assigned to the `<35> MsgType` field of a [Standard header](fix-api#standard-header): * `0` — [Heartbeat](fix-api#heartbeat) (Client ↔ B2CONNECT) * `1` — [Test Request](fix-api#test-request) (Client ↔ B2CONNECT) * `2` — [Resend Request](fix-api#resend-request) (Client ↔ B2CONNECT) * `3` — [Reject](fix-api#reject) (Client ← B2CONNECT) * `4` — [Sequence Reset](fix-api#sequence-reset) (Client ↔ B2CONNECT) * `5` — [Logout](fix-api#logout) (Client ↔ B2CONNECT) * `8` — [Execution Report](fix-api#execution-report) (Client ← B2CONNECT) * `9` — [Order Cancel Reject](fix-api#order-cancel-reject) (Client ← B2CONNECT) * `A` — [Logon](fix-api#logon) (Client → B2CONNECT) * `D` — [New Order Single](fix-api#new-order-single) (Client → B2CONNECT) * `F` — [Order Cancel Request](fix-api#order-cancel-request) (Client → B2CONNECT) * `V` — [Market Data Request](fix-api#market-data-request) (Client → B2CONNECT) * `W` — [Market Data — Snapshot/Full Refresh](fix-api#market-data-snapshot-full-refresh) (Client ← B2CONNECT) * `Y` — [Market Data Request Reject](fix-api#market-data-request-reject) (Client ← B2CONNECT) ### Standard header [#standard-header] All FIX messages must start with a **Standard header**. The **Standard header** includes the following fields: ### Standard trailer [#standard-trailer] Along with a Standard header, all FIX messages must also contain a **Standard trailer**. The **Standard trailer** includes the following fields: ## Session messages [#session-messages] The messages listed in this section are used to maintain any live FIX session with the B2CONNECT FIX server, including both [quoting](fix-api#quoting) and [trading](fix-api#trading) sessions. ### Heartbeat [#heartbeat] This message is sent back and forth between the FIX server and the client to check the connection status and in response to [Test Request](fix-api#test-request) messages. The **Heartbeat** message includes the following fields: ### Test Request [#test-request] This message is sent back and forth between the FIX server and the client in response to [Heartbeat](fix-api#heartbeat) messages as a means of connectivity check. The **Test Request** message includes the following fields: ### Resend Request [#resend-request] This message is sent by the client or FIX server to initiate the retransmission of messages, which may be required upon detecting a gap in the sequence numbers or losing a particular message. The **Resend Request** message includes the following fields: ### Reject [#reject] This message is sent by the FIX server upon receiving a malformed message from the client. The possible reason for rejection is specified in the `<373> SessionRejectReason` field. This message is unrelated to a trade-level rejection ([Order Cancel Reject](fix-api#order-cancel-reject)) issued when a FIX server is unable to place a requested order. The **Reject** message includes the following fields: #### Possible reasons [#possible-reasons] When the FIX server sends a [Reject](fix-api#reject) notification informing the client that a session-level request has been rejected, the `<373> SessionRejectReason` field can be set to one of the following values specifying the reason for message rejection: * `0` — an invalid tag number * `1` — a required tag is missing * `2` — a tag isn’t defined for this message type * `3` — a tag is undefined * `4` — a tag has no value assigned * `5` — an assigned value is incorrect (out of range) for this tag * `6` — an incorrect value data format * `7` — an issue related to decryption * `9` — an issue related to `CompID` * `10` — an accuracy issue related to `<52> SendingTime` * `11` — an invalid `<35> MsgType` * `12` — an XML validation error * `13` — the same tag appears more than once * `14` — a tag is specified not in the required order * `15` — a wrong order of repeating group fields * `17` — a non-“Data” value includes a field delimiter (an SOH character) * `99` — other (unspecified) reason ### Sequence Reset [#sequence-reset] This message is sent by the client or FIX server to indicate to the recipient the sequence number of the next message from the sender, immediately following the Sequence Reset message. This may be necessary to recover from a disconnect, in case if some messages were lost or their resending is not desirable. The **Sequence Reset** message includes the following fields: ### Logon [#logon] This message is sent by the client to initiate a FIX session. The **Logon** message includes the following fields: ### Logout [#logout] This message is sent by the client or FIX server to terminate a session. When terminated, the possible reason is specified in the `<58> Text` field. The **Logout** message includes the following fields: ## Demo mode [#demo-mode] The B2CONNECT FIX server supports a Demo mode that allows clients to establish a test connection and simulate quoting and trading sessions. Contact your account manager to obtain a set of settings and credentials. ## Quoting [#quoting] After connecting to the FIX server and establishing a live quoting session, the client can send a [Market Data Request](fix-api#market-data-request) to subscribe to quote updates streamed by B2CONNECT. To subscribe to multiple symbols, the client should send a separate [Market Data Request](fix-api#market-data-request) for each symbol. Upon successful subscription to a selected symbol, the FIX server starts streaming market data updates by sending [Market Data — Snapshot/Full Refresh](fix-api#market-data-snapshot-full-refresh) messages each time the market data is updated. The quote updates are streamed continuously for the entire duration of a FIX session. If a subscription request can’t be executed for some reason (for example, when a requested symbol isn’t found), the FIX server responds with a [Market Data Request Reject](fix-api#market-data-request-reject) message providing detailed information about an error. To terminate a specific subscription and stop receiving the updates, the client can send a [Market Data Request](fix-api#market-data-request) with the `<263> SubscriptionRequestType` set to `2` (standing for “Unsubscribe”). Upon sending a [Logout](fix-api#logout) request, the current session is closed and subscriptions to all ticker symbols are terminated. ### Market Data Request [#market-data-request] This message is sent by the client to start receiving up-to-date quoting data for a specified ticker symbol. The **Market Data Request** message includes the following fields: ### Market Data Request Reject [#market-data-request-reject] This message is sent by the FIX server to reject a [Market Data Request](fix-api#market-data-request) with invalid values. The **Market Data Request Reject** message includes the following fields: #### Possible reasons [#possible-reasons-1] The `<281> MDReqRejReason` field can be set to one of the following values specifying the reason for request rejection: * `0` — the specified symbol isn’t recognized * `1` — a duplicate `<262> MDReqID` * `2` — insufficient bandwidth * `3` — insufficient permissions * `4` — the specified `<263> SubscriptionRequestType` isn’t supported * `5` — the specified `<264> MarketDepth` isn’t supported * `6` — the specified `<265> MDUpdateType` isn’t supported * `8` — the specified `<269> MDEntryType` isn’t supported ### Market Data — Snapshot/Full Refresh [#market-data--snapshotfull-refresh] Such messages are continuously sent by the FIX server after the client subscribes to a ticker symbol. A new message is sent with each market data update. The **Market Data — Snapshot/Full Refresh** message includes the following fields: ## Trading [#trading] **Place an order** After establishing a trading session with the FIX server, the client can place a new order by sending a [New Order Single](fix-api#new-order-single) message. In response to this, the FIX server sends back an [Execution Report](https://docs.b2connect.b2broker.com/en/fix-api.html#execution-report) with the `<150> ExecType` field set to `A`, indicating that the order is placed successfully. If the order can’t be placed (for example, due to lack of credit funds or other issues), the report is sent with `<150> ExecType` set to `8`. After placing the order, the FIX server sends a separate report with `<150> ExecType` set to `F` each the order status changes: * If the order is executed partially, `<39> OrdStatus` is set to `1`. * When the order is fully filled, `<39> OrdStatus` is set to `2`. **Cancel an order** To cancel an open order, the client can send an [Order Cancel Request](fix-api#order-cancel-request). If the order is canceled (either explicitly by a trader, or automatically due to timeout), the [Execution Report](fix-api#execution-report) is sent with `<150> ExecType` set to `4`. In this case, the `<14> CumQty` field indicates the amount that has already been filled by the time the order was canceled, and `<151> LeavesQty` indicates the unfilled amount. If an order can’t be canceled for any reason, the FIX server sends back an [Order Cancel Reject](fix-api#order-cancel-reject) message indicating why the order cancellation failed. ### New Order Single [#new-order-single] This message is sent by the client to place a new order with specified parameters. The **New Order Single** message includes the following fields: ### Order Cancel Request [#order-cancel-request] This message is sent by the client to cancel an open order in its entire remaining amount. This request is assigned a unique `<11> ClOrdID` and is treated as a separate order. Upon successful cancellation of the order, an [Execution Report](fix-api#execution-report) is sent with the `<39> OrdStatus` field set to `4`. In this case, the `<14> CumQty` field indicates the amount that has already been filled by the time the order was canceled. If the order can’t be canceled for some reason, the FIX server sends back an [Order Cancel Reject](fix-api#order-cancel-reject) message indicating why the order cancellation failed. The **Order Cancel Request** message includes the following fields: ### Order Cancel Reject [#order-cancel-reject] This message is sent by the FIX server upon receiving an [Order Cancel Request](fix-api#order-cancel-request) that can’t be fulfilled. The **Order Cancel Reject** message includes the following fields: ### Execution Report [#execution-report] This message is sent by the FIX server upon successfully placing or cancelling an order, or any change to the order status (such as a complete or partial execution). Among other data, the report indicates: * the current order status at the moment of report creation (`<39> OrdStatus`) * the most recent change in the order status, which is being reported (`<150> ExecType`) The **Execution Report** message includes the following fields: Explore the liquidity providers and FIX platforms supported by B2CONNECT Explore the liquidity providers and FIX platforms supported by B2CONNECT Find step-by-step instructions on most common user scenarios Find step-by-step instructions on most common user scenarios Explore the B2CONNECT FIX API reference Explore the B2CONNECT FIX API reference ## July 30, 2026 [#july-30-2026] ### New features [#new-features] #### Daily turnover reports delivered to Slack and email [#daily-turnover-reports-delivered-to-slack-and-email] B2CONNECT now produces a Turnover Report for each hub automatically, once a day, and delivers it to the Slack channels and email addresses of your choice. Both the CSV and the PDF arrive as ready-to-open attachments on the message itself, so recipients read the report without opening the Web UI or holding platform credentials. Daily volume becomes visible to management, account managers, and back-office teams alike. Each report covers the previous trading day and breaks traded volume down by trading instrument, asset class, and quote currency, showing bought and sold volume for each, followed by totals per quote currency. Administrators control delivery from the B2CONNECT Web UI: * Set the daily publication time for each hub, or switch the schedule off. * Produce a report on demand with **Publish now**. * Subscribe Slack channels and email recipients under **Business notifications**, alongside the platform's other notifications. * Re-download any past report from the report archive. This is the next step in the rollout of **TRAM** (Tracking, Reporting, Alerting, and Monitoring), the unified reporting and observability layer that brought **Hub Reports** to the Web UI in the April release. Where Hub Reports covers reports requested on demand for individual margin accounts, daily turnover reporting replaces the manual, spreadsheet-based volume roundups that reporting teams previously assembled by hand. #### HTX USDT-M Futures upgraded to API V5 [#htx-usdt-m-futures-upgraded-to-api-v5] B2CONNECT has been upgraded to HTX API V5 for USDT-M perpetual futures across the full path: market data, funding data, symbol information, and trading. HTX has retired the legacy API behind these instruments, so the upgrade keeps this liquidity available on a supported interface. Brokers sourcing HTX perpetual futures liquidity through B2CONNECT keep uninterrupted market data and order flow, with no action required on their side. B2CONNECT now also confirms the collateral mode on every HTX connection when it starts, so a change made to the account on the exchange side can no longer cause order placement to fail without an evident cause. *** ### Improvements [#improvements] #### More efficient liquidity provider connections [#more-efficient-liquidity-provider-connections] Liquidity provider connections on a hub now make more efficient use of its infrastructure, while each connection stays isolated from the others and is monitored independently. A new liquidity provider also goes live sooner. The change is being enabled progressively. #### Order recovery after an interruption [#order-recovery-after-an-interruption] After a connection to a liquidity venue is interrupted, B2CONNECT now sizes its recovery request to the length of the interruption instead of using a fixed window, so orders placed during a longer outage are still picked up and reconciled. *** ### Resolved issues [#resolved-issues] The issues below occurred infrequently and only under specific conditions. Some may have affected production environments; most were identified in testing before they could. * Resolved an issue where, in rare cases, the connection to a liquidity venue did not re-establish itself after a network drop, leaving the affected instruments without fresh quotes until the service was restarted. Connections now detect a silent drop on their own, reconnect, and restore every affected instrument. * Resolved two issues that could occasionally leave funding data for perpetual futures failing after an instrument's mapping changed. Quotes recovered on their own, but funding rate, mark price, and funding interval could remain affected. Funding data now follows mapping changes as quotes do. * Resolved two issues affecting connection setup and quote acceptance in certain scenarios: a liquidity provider credentials element was rejected as too long when configuring a connection, and quotes for certain FX instruments arriving from a liquidity aggregator hub were rejected because of a mismatch in how the quote's entry count was determined. ## June 29, 2026 [#june-29-2026] ### Improvements [#improvements-1] #### Systematic Hedging under high-frequency flow [#systematic-hedging-under-high-frequency-flow] Systematic Hedging, introduced in the previous release, has been hardened to stay reliable under high-frequency, high-volume flow such as copy-trading and HFT bursts. B2CONNECT shapes the incoming client flow so that only the residual net position is routed to each liquidity provider (LP), keeping order placement comfortably within venue API rate limits even during tick storms. In the B2CONNECT Web UI, the real-time Risk Status view and its cumulative order-accumulation status bar now update accurately at very high request rates, so risk teams keep a precise, live picture of how exposure is building and when it will hedge. #### More flexible symbol and instrument naming [#more-flexible-symbol-and-instrument-naming] The liquidity aggregator integration now supports independent taker-side and maker-side symbols. Previously both legs shared a single venue name, causing a platform to distribute the LP’s symbols to the FIX clients. B2CONNECT now resolves the incoming FIX symbol against a dedicated taker symbol and maps it to the liquidity aggregator catalog name separately — so brokers can keep their own client-facing symbology regardless of an LP’s naming. Asset and trading instrument names can now also include the ampersand (`&`) character. Such symbol names are accepted directly, removing the previous need to substitute `AND`. #### Reduced noise from stale-liquidity alerts [#reduced-noise-from-stale-liquidity-alerts] Stale-liquidity alerts triggered by delisted symbols now fire once instead of repeating, cutting alert noise for monitoring teams when a venue delists an instrument. *** ### Resolved issues [#resolved-issues-1] * Resolved an issue where a market-data subscription on WebSocket liquidity venues (such as Kraken, Huobi, and Binance) could remain silent after a connector reconnect, leaving the affected symbols without fresh quotes — and FIX clients receiving only invalidations — until the connector was restarted. Such subscriptions now recover automatically. * Resolved an issue in the liquidity aggregator integration where a transient quote-cancel message was treated as a permanent subscription rejection, silently stopping quote publishing for the symbol until a restart. Transient cancels no longer drop the subscription, so streaming resumes as soon as the venue sends the next quote. ## May 29, 2026 [#may-29-2026] ### New features [#new-features-1] #### Systematic Hedging [#systematic-hedging] **B2CONNECT** introduces **Systematic Hedging**, a new execution option that complements — and does not replace — standard straight-through processing (STP). When enabled for a symbol, **B2CONNECT** aggregates incoming client flow into a managed risk position, nets opposing buy and sell volume, and hedges only the net residual to the liquidity provider (LP). This gives risk teams tighter control over exposure and lower execution costs. And because only net positions are hedged, platforms send far fewer orders to their LPs — staying comfortably within API rate limits and easing the load on each provider, so every LP connection goes further. Hedging stays fully under the risk team's control and is set per symbol: trigger by accumulated volume, a timer, a schedule, or manually; tune the hedge ratio and lock-routing behavior; or keep routing large orders straight through. The **B2CONNECT** Web UI adds a **Symbol Hedging Configuration** page, a real-time **Risk Status** page, and a master toggle, and risk-position state is restored automatically after any restart — so exposure is never lost or double-counted. #### B2CORE integration [#b2core-integration] **B2CONNECT** now integrates with **B2CORE**, the **B2BROKER** ecosystem's CRM — the centralized control center for a brokerage's front-end client experience and back-end administrative operations. By connecting margin accounts on the **B2CONNECT** hub directly to **B2CORE**, the integration gives B2B clients who power their trading platforms with **B2CONNECT** seamless account onboarding and a streamlined day-to-day experience, with account creation, funding, and balance management all handled from one control center. It also puts the wider advantages of the **B2BROKER** ecosystem within reach on a single, connected stack. Administrators set up and manage the connection from a new **B2CORE Integration** page in the **B2CONNECT** Web UI. #### Tiered commission profiles [#tiered-commission-profiles] **B2CONNECT** now supports **tiered commission profiles**, which automatically lower the commission rate as an account's traded volume grows. Administrators define volume thresholds and the rate that applies beyond each one; **B2CONNECT** tracks cumulative volume over the chosen period — for example, a calendar month — and steps the rate down as each threshold is reached, including on liquidation orders. For brokers, this turns growing volume into lower costs: the more flow through the hub, the lower their own per-trade commission — rewarding scale and protecting margins as the business grows. *** ### Resolved issues [#resolved-issues-2] There have been no customer-facing issues reported in this release. ## April 30, 2026 [#april-30-2026] ### New features [#new-features-2] #### Tiered margin profiles [#tiered-margin-profiles] **B2CONNECT** now supports tiered margin profiles, allowing Administrators to apply different margin rates to different slices of an account's notional exposure. Each profile can define up to five threshold–rate pairs per symbol, so brokers can mirror the bracketed margin schedules used by major liquidity providers — without falling back on inflated blanket rates that deter retail traders or on manual, position-by-position adjustments. This delivers predictable, schedule-aligned leverage on every tranche of a client's position and removes a recurring source of operational overhead for risk and operations teams. #### Hub Reports under TRAM [#hub-reports-under-tram] A new **Hub Reports** section is now available under **TRAM** (Tracking, Reporting, Alerting, and Monitoring) in the **B2CONNECT** Web UI, bringing reporting for margin accounts together in a single place. Back-office operators can request, track, and download reports directly from the platform — an important milestone in the rollout of TRAM, the unified reporting and observability layer for B2CONNECT. The initial release of Hub Reports ships with three reports: * **Consolidation Statement** — a complete picture of an account's activity and exposure for any reporting period, including opening and closing balances, deposits, withdrawals, fees, opening and closing equity, unrealized PnL, used and free margin, margin utilization, and a dedicated **Open Positions** section listing each position's symbol, direction, average price, unrealized PnL, and margin. Account names are populated automatically, so each statement is clearly attributed. * **Trading Report** — per-trade execution details for one or more margin accounts over a chosen date range, delivered as a CSV. Each row includes the connection used, taker login and order identifiers, executed price and volume, and commission, giving back-office and reconciliation teams everything they need to audit individual fills. * **Turnover (Traded Volume) Report** — aggregated traded volume per account and per symbol for the selected period, supporting fee schedules, rebate calculations, and periodic client reviews. *** ### Improvements [#improvements-2] #### Binance Futures WebSocket endpoints [#binance-futures-websocket-endpoints] **B2CONNECT** has been migrated to **Binance**'s new WebSocket URL architecture for perpetual futures, which separates traffic into dedicated public, market, and private channels. Brokers connecting to Binance Futures via B2CONNECT will continue to receive uninterrupted market data and order updates after Binance retires the legacy WebSocket URLs on **2026-04-23**, with no action required on the broker's side. #### Stream update reliability for Incoming Connectors [#stream-update-reliability-for-incoming-connectors] Subscription updates on **Incoming Connectors** are now more resilient under load. The platform allows more time for new streams to take effect and automatically retries on transient failures, preventing the rare cases where a slow update could leave a maker's symbols without fresh quotes until the next resubscription cycle. *** ### Resolved issues [#resolved-issues-3] * Resolved a consistency issue in the oneZero quoting integration where unsubscribing and immediately resubscribing to a symbol could occasionally fail with a duplicate-request error, leaving the symbol without market data until the next resubscription cycle. Resubscriptions are now handled atomically. ## March 2, 2026 [#march-2-2026] ### New features [#new-features-3] #### Automatic account liquidation on stop-out [#automatic-account-liquidation-on-stop-out] **B2CONNECT** now automatically liquidates open positions when an account's equity falls to the stop-out level, eliminating the need for manual intervention during margin events. The liquidation process executes iteratively — the system sends liquidation orders for all active positions, waits for each to reach a final state, and then evaluates whether the account has recovered before scheduling the next iteration. If the account's margin recovers above the stop-out threshold at any point, liquidation halts immediately. The engine is designed for operational reliability: if a restart occurs mid-liquidation, the process resumes safely without duplicating or missing orders. Execution uses live market pricing to ensure liquidation orders reflect current conditions, preventing margin miscalculations during volatile periods. The waiting period before liquidation begins and the retry policy between iterations are configurable. *** ### Improvements [#improvements-3] #### Account cache reliability [#account-cache-reliability] The account management system now supports per-account cache reinitialization. When a cache error is detected, only the affected account's state is rebuilt rather than triggering a broader reset. This targeted recovery approach improves stability and reduces the potential for stale account data to affect margin calculations or order routing during error-recovery scenarios. *** ### Resolved issues [#resolved-issues-4] There have been no customer-facing issues reported in this release. ## February 27, 2026 [#february-27-2026] ### New features [#new-features-4] #### New B2CONNECT website and deep Insights [#new-b2connect-website-and-deep-insights] This February release is dedicated to documentation updates. Alongside the ongoing expansion of our integrations-related docs, we've launched the new **B2CONNECT** product website and introduced the **Insights** section— deep-dive articles aimed at brokers, exchanges, and liquidity providers building multi-asset liquidity infrastructure. *** ### Improvements [#improvements-4] #### Liquidity engine performance, stability, and security enhancements [#liquidity-engine-performance-stability-and-security-enhancements] We've delivered a set of improvements across the quoting and trading engine to increase overall performance and operational robustness. These updates include several security and stability hardening primarily related to the underlying technology stack and runtime components that support core execution workflows. *** ### Resolved issues [#resolved-issues-5] There have been no customer-facing issues reported in this release. ## January 30, 2026 [#january-30-2026] ### New features [#new-features-5] #### Incoming Connectors: Trading Settings tab [#incoming-connectors-trading-settings-tab] A new dedicated **Trading Settings** tab is now available for Incoming Connectors, allowing the Hub Administrators to configure symbols directly within the connector setup. This streamlines onboarding of new liquidity providers and simplifies ongoing symbol configuration and updates. *** ### Improvements [#improvements-5] #### Improved FIX credentials compatibility [#improved-fix-credentials-compatibility] FIX credential settings for supported liquidity aggregators are now more aligned with the standard FIX naming convention, ensuring more consistent configuration and reducing setup friction. #### More descriptive error messages [#more-descriptive-error-messages] Incoming Connector pages now display clearer, human-readable error messages in two common cases: when credential validation fails, and when the Administrator tries to enable trading for a symbol that’s disabled in Hub settings. These messages help identify the issues, so troubleshooting is more straightforward. *** ### Resolved issues [#resolved-issues-6] * Generated FIX credentials no longer start with an underscore in `SenderID` or `TargetID`, resolving compatibility issues with counterparties that reject such values. ## December 22, 2025 [#december-22-2025] ### New features [#new-features-6] #### Perpetuals data over FIX: funding rate, mark price & funding interval [#perpetuals-data-over-fix-funding-rate-mark-price--funding-interval] B2CONNECT now enriches FIX market‑data streams with `FundingRate`, `MarkPrice`, and `FundingInterval` fields, allowing any FIX‑compatible platform to price and offer perpetual futures out of the box. These parameters are delivered alongside standard quote updates in the FIX contract, eliminating the need for custom side channels or additional integrations to pass funding data. #### Interest on idle cash and unused margin (AMS) [#interest-on-idle-cash-and-unused-margin-ams] The **AMS** module now supports paying interest on idle cash and unused margin via dedicated **Interest rate profiles** in the Web UI. Administrators can configure per‑asset interest rates and a daily posting time in UTC; B2CONNECT then accrues interest automatically and posts it once per day as separate **Interest** transactions on client accounts. Brokers, exchanges, and other trading platforms are empowered to create a clear incentive for end-users (traders) to keep extra funds in their accounts, strengthening client retention and serving as a strong competitive differentiator. *** ### Improvements [#improvements-6] #### Maker credentials management inside Incoming Connectors [#maker-credentials-management-inside-incoming-connectors] Trading and quoting Maker credentials are now configured directly within each Incoming Connector. Administrators can add, revoke, and review credentials in the same place where they manage the connection, reducing context switching and keeping connectivity and access control aligned per connector. #### Target maker [#target-maker] A new **Target maker** control has been added to the Incoming Connectors page, making it straightforward to set or review which maker is currently used for routing. This improves transparency around active maker selection and simplifies switching and validating liquidity sources. *** ### Resolved issues [#resolved-issues-7] There have been no customer-facing issues reported in this release. ## October 30, 2025 [#october-30-2025] ### New features [#new-features-7] #### New docs section: Supported FIX platforms [#new-docs-section-supported-fix-platforms] With this release, we’ve added a new [FIX platforms](supported-venues/fix-platforms) section to our documentation, showcasing trading platforms compatible with B2CONNECT via the **FIX protocol**. This new catalog includes baseline configuration guides and is linked to our FIX API reference. Integration teams can now quickly verify FIX compatibility and access the appropriate configuration templates from a single location, streamlining the setup process. *** ### Improvements [#improvements-7] #### Deep order recovery on LP disconnects [#deep-order-recovery-on-lp-disconnects] We’ve moved from a conservative recent‑orders snapshot to a controlled step‑by‑step rebuild that thoroughly recovers pending orders after a disconnect. As before, requests respect each Liquidity Provider’s API limits; the updated pacing keeps us right at the safe edge, delivering a far higher recovery count without triggering rate‑limit bans. Expect more complete catch‑ups on high count bursts and during volatile periods. *** ### Resolved issues [#resolved-issues-8] There have been no customer-facing issues reported in this release. ## September 30, 2025 [#september-30-2025] ### New features [#new-features-8] #### Internal risk warehousing (formerly B-Book) [#internal-risk-warehousing-formerly-b-book] B2CONNECT clients can now execute selected symbols internally within the crypto-native liquidity hub, retaining spread and reducing external fees. This new execution model provides per-symbol control to enable internal execution where it’s commercially advantageous, empowering clients to optimize their risk-return profiles with unprecedented precision. The configuration can be managed via CSV. #### Partial risk internalization (formerly C-Book) [#partial-risk-internalization-formerly-c-book] B2CONNECT clients can now optimize risk management with configurable order splitting between external hedging and internal execution. Set hedge ratios per symbol (0-100%) to determine the split, where the internal portion mirrors external fill pricing and proportions exactly. This approach reduces commission costs while maintaining risk control and supports both market and limit order flows. #### Price invalidation for synthetic symbols [#price-invalidation-for-synthetic-symbols] Synthetic markets now support invalidation signals the same way as organic symbols, providing consistent invalidation behavior across all symbol types. This development unlocks safe production deployment of the invalidation feature, providing traders with more reliable price feeds and reducing the risk of stale quotes across the entire trading ecosystem. #### Liquidity acquisition configuration via incoming connectors [#liquidity-acquisition-configuration-via-incoming-connectors] The configuration of liquidity acquisition service has been migrated from a global CSV to a structured, connector‑based flow. The new approach includes bulk asset upload capabilities, automated symbol-to-maker listing matching, and quoting CSV configuring, reducing setup time and potential errors while enabling more granular control over individual service instances. *** ### Improvements [#improvements-8] #### WebUI modernization [#webui-modernization] The Admin panel interface has been enhanced delivering improved usability. The following upgrades land across the **AMS accounts**, **AMS profiles**, **Notifications**, **Incoming Connectors** and **Symbols** sections: * **Navigation enhancements**: * Streamlined menu structure with fewer clicks to access key data. * Relocated Notifications to Hub settings for better organization. * Expanded table layouts for improved data visibility. * **Single Sign-On**: * Centralized identity provider with standards-based SSO. * Unchanged sign-in experience for end users. * Continued user management capabilities for B2CONNECT administrators. Additionally, the sidebar has been redesigned, with rebuilt left navigation reflecting the new information architecture, making the **Liquidity**, **Symbols**, **Accounts**, and **Settings** sections easier to access. #### AMS profiles: CSV import/export [#ams-profiles-csv-importexport] The **Commission** and **Margin Requirements** profiles setup has been accelerated through an import wizard and one‑click CSV export. These enhancements optimize workflows particularly when working with large instrument lists. #### Asset management [#asset-management] B2CONNECT administrators are now provided with enhanced control over asset configurations with built-in safeguards to prevent deletion of referenced assets. This ensures system integrity while providing the flexibility to clean up obsolete or unused assets. *** ### Resolved issues [#resolved-issues-9] * Fixed an issue with trading parameter calculations for instruments with contract sizes. The system now correctly converts all trading parameters using contract size multipliers, ensuring accurate minimum order amounts, price steps, and notional values are communicated through the FIX SecurityList endpoint. This fix particularly benefits trading of derivative contracts where the underlying instrument differs from the quoted contract size. ## August 29, 2025 [#august-29-2025] ### New features [#new-features-9] #### New docs section: Supported exchanges [#new-docs-section-supported-exchanges] With this release, we've introduced a detailed [Supported exchanges](supported-venues/exchanges) section in our documentation, offering a comprehensive reference for each exchange our platform supports. This addition promotes clarity and easy access, allowing B2CONNECT users to quickly compare and reference available capabilities across exchanges at a glance. *** ### Improvements [#improvements-9] #### Explicit default STP setting [#explicit-default-stp-setting] To prevent unexpected behavior and reduce reliance on exchange policy defaults, we now explicitly set a fixed internal default STP (Self-Trade Prevention) mode in our API calls. This ensures consistent and predictable trade execution across all environments, regardless of future changes by liquidity providers. *** ### Resolved issues [#resolved-issues-10] There have been no customer-facing issues reported in this release. ## July 31, 2025 [#july-31-2025] ### New features [#new-features-10] #### Granular asset management via Web UI [#granular-asset-management-via-web-ui] B2CONNECT administrators now benefit from enhanced control and efficiency in asset management with new export/import options integrated into the B2CONNECT Web UI: * **Bulk asset export**: Efficiently export assets to CSV for reporting or backup purposes, streamlining administrative tasks and protecting essential configuration data. * **Bulk asset import**: Effortlessly import multiple assets from CSV files, reducing manual entry, minimizing errors, and ensuring asset uniqueness through built-in validation rules. #### Alerts system for swap charge issues [#alerts-system-for-swap-charge-issues] The system monitoring has been enhanced by implementing automated notifications for failed swap charges. These real-time notifications provide detailed explanations of failures, facilitating quick troubleshooting, and boosting system reliability. Common issues addressed include missing market rates, symbol data discrepancies, infrastructure issues, and internal errors. *** ### Improvements [#improvements-10] #### Enhanced compatibility with Binance [#enhanced-compatibility-with-binance] To ensure continued compatibility and accuracy, B2CONNECT services have been updated to align with recent changes in the Binance API. This enhancement makes certain that the minimum notional values provided through the B2CONNECT FIX API SecurityList endpoint are always accurate, preventing order rejections due to incorrect amounts. Additionally, the Binance Spot adapter has been updated to meet the latest WebSocket API requirements, ensuring smooth order updates and improved platform reliability. #### Advanced raw message logging [#advanced-raw-message-logging] A significant enhancement has been added to order placement and execution workflow. A key point is the implementation of advanced raw message logging. This enables B2CONNECT to log all raw incoming and outgoing messages during its communication with a supported liquidity provider, thus enabling precise troubleshooting and rapid issue resolution at the LPs end. #### Improved error handling [#improved-error-handling] Another improvement in the order placement and execution workflow includes the refined logic for handling timeout errors. An order is now considered placed if such an error occurs, providing a definitive status and preventing uncertainty during order execution. #### Rate limiting for reliable connectivity [#rate-limiting-for-reliable-connectivity] The reconnect algorithm for a supported liquidity provider has been improved by integrating a robust rate-limiting mechanism. This enhancement caps the number of reconnect attempts to an optimal value, reducing the chance of IP bans and maintaining stable, uninterrupted connectivity. #### Reduced trading service startup time [#reduced-trading-service-startup-time] With this release, the bulk-load order event recovery mechanism has been implemented. By efficiently processing large volumes of order events during system startup, this update significantly reduces the time required to restore services after a restart or unexpected outage. As a result, traders experience minimal downtime, ensuring continuous access to the trading platform and improving overall operational efficiency. *** ### Resolved issues [#resolved-issues-11] There have been no customer-facing issues reported in this release. ## June 30, 2025 [#june-30-2025] ### New features [#new-features-11] #### Advanced multi-provider liquidity orchestration [#advanced-multi-provider-liquidity-orchestration] This release introduces a groundbreaking update in liquidity infrastructure management: B2CONNECT now features liquidity orchestration across multiple liquidity providers and trading platform types. Key enhancements include: * Liquidity acquisition from multiple providers and its distribution to diverse trading platforms and market data consumer types. * Price feed across all asset classes, including forex, CFDs, indices, metals, and crypto (both spot and derivatives), accessible via both single or multiple connectors. * Uninterrupted liquidity with automated order routing based on symbol availability and robust failover policies. #### Advanced spread control [#advanced-spread-control] B2CONNECT administrators can now precisely control the maximum allowable spread in order books, significantly enhancing liquidity and boosting trader confidence. They can set and manage maximum spread limits to avoid sharp market data fluctuations, and track anomalies through detailed metrics. #### Symbol-based price invalidation [#symbol-based-price-invalidation] B2CONNECT introduces sophisticated symbol-based price invalidation to ensure price accuracy: * **Web interface management**: Configure, view, and manage price invalidation parameters directly through the Web UI. * **CSV import**: Import symbols via CSV files that include detailed price invalidation parameters. * **Real-time logic**: Implement comprehensive real-time price invalidation across all stages for consistent and precise quoting and trading. #### Aggregated execution reports [#aggregated-execution-reports] Execution reporting now supports fill aggregation, optimizing reports for platforms such as cTrader. This feature consolidates multiple fills into a single, coherent execution report. B2CONNECT administrators can enable or disable aggregation settings to tailor reporting to the trading platform preferences. Alerts for overfilled aggregation scenarios provide timely insights for effective risk management. #### Automated swap fee charging [#automated-swap-fee-charging] B2CONNECT now streamlines swap charge management. B2CONNECT administrators can easily set up Swap Profiles and apply them to trading accounts. The built-in Swap Charges Planner helps schedule and run swap charges efficiently. Migration to an optimized Account Configuration system provides superior performance and reliability. *** ### Improvements [#improvements-11] #### Enhanced precision handling for FOK orders [#enhanced-precision-handling-for-fok-orders] Handling of Fill-or-Kill (FOK) orders has been improved to guarantee compatibility across all liquidity providers, even when the order amount precision differs from trading platform specifications. #### Standardized order cancellation for Liquidity Takers [#standardized-order-cancellation-for-liquidity-takers] The order cancellation support has been improved for liquidity aggregators and other liquidity consumers, ensuring more responsive and reliable order lifecycle management. #### Symbol integration into account configuration [#symbol-integration-into-account-configuration] Symbol management is now seamlessly incorporated into account configuration to maintain consistency across liquidity settings and to simplify administrative tasks. #### Streamlined UX [#streamlined-ux] The B2CONNECT WebUI has been upgraded, focusing on user experience and performance enhancements. These improvements feature a more intuitive color scheme and streamlined design, offering a modern and visually appealing interface. The user flow has been optimized, making navigation more straightforward and efficient. Additionally, component performance has been boosted, reducing load times and enhancing overall responsiveness for a better user experience. *** ### Resolved issues [#resolved-issues-12] * Fixed an issue where an order cancellation request might be mishandled if received before the system processed the initial order confirmation from a liquidity provider. ## May 30, 2025 [#may-30-2025] ### Improvements [#improvements-12] #### Enhanced FIX API SecurityList endpoint [#enhanced-fix-api-securitylist-endpoint] Improved the liquidity metadata handling to ensure that order placements, based on the liquidity parameters provided via the SecurityList FIX endpoint, are compatible across multiple liquidity streams. This upgrade aggregates liquidity parameters for symbols across multiple providers, combining them into universally supported values. As a result, orders can be placed across several liquidity providers either simultaneously or in a failover mode, ensuring compatibility with all involved providers. #### Improved handling of negative spreads [#improved-handling-of-negative-spreads] Enhanced management of negative spreads has been achieved through more efficient filtering of Level 2 quotes and incremental updates. This improvement targets asset prices that could cause negative spreads in liquidity distributed to trading platforms and other consumers via the FIX protocol. The newly updated business logic effectively and efficiently filters out such quotes to prevent the negative spreads from appearing in the distributed liquidity. #### Enhanced resilience when processing fast subscribe/unsubscribe sequences [#enhanced-resilience-when-processing-fast-subscribeunsubscribe-sequences] B2CONNECT FIX server can robustly handle fast subscribe/unsubscribe sequences by liquidity aggregators, even when these aggregators do not strictly adhere to the FIX protocol standard, reusing the same request IDs. The newly implemented algorithm reliably handles such cases, eliminating even the intermittent subscription failures. *** ### Resolved issues [#resolved-issues-13] * Fixed an issue, where orders were re-sent (placed again) if one of the supported liquidity providers returned an unrecognized error message. Such messages are now categorized under a unified system, resulting in conserving the API rate limits on redundant order placements and reducing the risk of IP bans. * Fixed an issue where, after replacing the API credentials of a supported liquidity provider with new ones, the system continued subscribing to the execution reports stream using the old credentials until restarted. This fix ensures that the credentials can be replaced live, without the restart of services. ## March 31, 2025 [#march-31-2025] ### New features [#new-features-12] #### New integration with Bybit [#new-integration-with-bybit] B2CONNECT has launched a new adapter for **Bybit**, providing full support for perpetual futures contracts. This integration leverages B2CONNECT's robust infrastructure, allowing access to Bybit's market data and trading functionalities. It ensures seamless trading and quoting, enabling client platforms to offer advanced trading options and enhanced user experience. Benefit from efficient order execution and reliable price feeds — all within the B2CONNECT ecosystem! #### Advanced Trade API support for Coinbase integration [#advanced-trade-api-support-for-coinbase-integration] With this release, B2CONNECT introduces full support for **Coinbase Advanced Trade API**, replacing the deprecated Coinbase Pro API. This update ensures uninterrupted access to Coinbase’s liquidity, benefiting from the superior capabilities and performance of the Advanced Trade API. This upgrade affirms B2CONNECT commitment to delivering cutting-edge liquidity solutions, ensuring clients always have access to the best available liquidity infrastructure. *** ### Improvements [#improvements-13] #### Improved symbol specification management and real-time configuration [#improved-symbol-specification-management-and-real-time-configuration] The process for managing symbol specifications during bulk import has been significantly enhanced. Users can now interactively review and selectively edit symbol specifications directly within the import interface. This improvement enables on-the-fly adjustments, ensuring higher accuracy and flexibility when dealing with large sets of symbols. #### Binance Futures adapter enhancements [#binance-futures-adapter-enhancements] Several improvements have been implemented for the Binance Futures adapter, increasing its reliability and stability: * **Execution report deduplication**: Logic has been added to effectively deduplicate execution reports from Binance Futures. This resolves issues caused by occasional duplicate reports originating from the LP side, ensuring accurate order state tracking. * **Order state recovery rate limiting**: A rate limiter has been implemented for requests related to order state recovery. This proactive measure prevents potential rate limit violations on the Binance Futures platform, safeguarding against temporary bans or request throttling during high-activity periods. These updates contribute to a more robust and resilient integration with Binance Futures. *** ### Resolved issues [#resolved-issues-14] There have been no customer-facing issues reported in this release. *** ## Past releases [#past-releases] ### December 24, 2024 🎄 [#december-24-2024-] #### New features [#new-features-13] ##### Taker orders routing to multiple LPs [#taker-orders-routing-to-multiple-lps] This newly released feature allows orders received through a single FIX connector to be routed to multiple liquidity providers. This functionality enables sophisticated order placement and execution strategies through: * **Failover mechanism**: Enables B2CONNECT to maintain each Taker connector linked to multiple liquidity sources and to dynamically reroute orders among them in case a provider becomes unavailable. * **Symbol-based order routing**: Caters to cases where a particular symbol may be unavailable with one liquidity provider, but listed on others. This feature allows for dynamic routing of orders to the most suitable liquidity source based on the specific trading symbol. This feature significantly enhances access to a wider range of trading instruments and improves fault tolerance for liquidity distribution at supported trading venues via both quoting and trading sessions. ##### Incoming connectors creation [#incoming-connectors-creation] B2CONNECT administrators can now create and configure connections to Makers via the Web UI. The solution supports a variety of protocols (WSS, REST, FIX), offering flexible and robust connectivity options. By streamlining the setup process, it enhances the user experience, making it easy to integrate incoming connectors. ##### Order status recovery at WebSocket disconnect [#order-status-recovery-at-websocket-disconnect] This feature ensures the recovery of pending order statuses in case a WebSocket connection is disrupted or unavailable. It's specifically designed for WSS+REST trading integration, allowing retrieval of a placed order status even if the execution report can't be extracted from a WebSocket data stream B2CONNECT subscribed to. This solution largely eliminates cases where an order is placed on the liquidity provider but is not correctly confirmed on the Taker platform due to WebSocket issues. The implementation significantly enhances execution quality and mitigates market risks. #### Improvements [#improvements-14] ##### Symbol creation interface [#symbol-creation-interface] The B2CONNECT Web UI now features a dedicated interface for adding symbols. This enhancement utilizes existing base and quote assets, building on the recent release of the Asset and Asset Classes management UI. This feature is in addition to the bulk settings import functionality, allowing for individual symbol creation and management. #### Resolved issues [#resolved-issues-15] There have been no customer-facing issues reported in this release. *** ### November 29, 2024 [#november-29-2024] #### New features [#new-features-14] ##### Taker FIX credentials management via the Web UI [#taker-fix-credentials-management-via-the-web-ui] The latest B2CONNECT release introduces a brand new Web UI Section in the Liquidity Hub administrative interface, designed for managing FIX protocol credentials. These authorization details are vital for B2CONNECT customers, including digital asset exchanges, brokerages, crypto payment gateways, and other liquidity consumers, to connect to the Liquidity Hub. Following the trend of previous improvements, such as the Maker API keys management interface, this update enables B2CONNECT administrators to efficiently generate and distribute FIX credentials. Once the credentials are generated and validated, B2CONNECT administrator can transfer them to a Taker platform so that their clients can authorize when connecting to the B2CONNECT FIX server. Credentials are automatically updated across B2CONNECT services, ensuring seamless client connectivity. This development marks a significant stride toward achieving comprehensive connectivity and streamlined liquidity distribution within B2CONNECT's growing infrastructure. #### Resolved issues [#resolved-issues-16] There have been no customer-facing issues reported in this release. *** ### October 31, 2024 [#october-31-2024] #### New features [#new-features-15] ##### Faster order placement and execution on the Binance spot platform [#faster-order-placement-and-execution-on-the-binance-spot-platform] B2CONNECT Liquidity Hub has implemented an advanced adapter to the WebSocket API for the Binance (spot) trading platform. This upgrade allows for faster order placement, thereby improving the trading experience and enhancing the liquidity distribution quality. By employing a high-end connectivity technology, trade-related messages are now transmitted through a bidirectional full-duplex protocol. When assessed against previous benchmarks, the order round-trip time on Binance (spot) has been shortened significantly. This advancement will be beneficial to any trading platform or liquidity taker client, substantially enhancing their user experience in order execution. #### Improvements [#improvements-15] ##### Enhanced Admin interface for configuring trading credentials [#enhanced-admin-interface-for-configuring-trading-credentials] B2CONNECT administrators can now independently configure trading credentials via the web interface, ensuring a faster and more secure process. This improvement simplifies the procedure of entering API keys using a dynamic, maker-specific form tailored with relevant fields, thereby streamlining operations. The system automatically validates the entered API keys to minimize errors. This is another addition to the rapidly expanding capabilities of the Liquidity Engine Web UI. #### Resolved issues [#resolved-issues-17] There have been no customer-facing issues reported in this or previous releases. *** ### September 30, 2024 [#september-30-2024] #### New features [#new-features-16] ##### Fully-featured liquidity adapter for Crypto.com [#fully-featured-liquidity-adapter-for-cryptocom] The full-blown liquidity acquisition adapter to **Crypto.com** is now available immediately to all B2CONNECT Liquidity Hub clients connecting via the FIX API. Crypto.com is a top-ranked cryptocurrency exchange platform that has recently been gaining traction among B2B clients as a direct market access enabler. With the introduction of the new connectivity option, B2CONNECT clients can now enhance their offerings with an expanded range of trading pairs. This feature also empowers them to diversify effectively, mitigating various risks such as counterparty, regulatory, and so on. The adapter enables access to price feeds (Level 2 quotes) on the trading platform and supports order placement, execution, and execution confirmation. Besides, its implementation ensures that these two main processes, getting quotes and trading, can be done in parallel, with the highest possible throughput and lowest network latency. This is the next step in B2CONNECT’s mission to enhance access to liquidity for its B2B clientele — digital asset exchanges and brokerages. We’re excited to provide trading platform operators with new opportunities to differentiate themselves by offering the trading community a wider range of trading options and better UX. ##### Liquidity configuration via CSV [#liquidity-configuration-via-csv] The B2CONNECT Web UI has been enhanced with the bulk import option of liquidity settings via a CSV file. This new feature enables B2CONNECT administrators to import an unlimited list of markets along with advanced liquidity parameters such as markups, volume modifiers, market depth, price and volume precision, and so on. Additional fields for defining synthetic instruments are provided to configure synthetic cross legs, quote sources, inversion, and more. The new interface validates the CSV file upon upload and also stores a history of imported settings. The latter empowers the B2CONNECT Hub operators to always have a fresh copy of the setup available for export as a CSV file, making it easier to enter adjustments, re-upload the configuration, and apply new liquidity settings. *** ### August 29, 2024 [#august-29-2024] #### New features [#new-features-17] ##### Faster Perpetual Futures trading via a high-end communication protocol [#faster-perpetual-futures-trading-via-a-high-end-communication-protocol] With this release, the B2CONNECT team has implemented a new integration with a fresh WebSocket API introduced by the Binance Futures platform earlier this year. This is a new option in addition to the time-tested REST API trading. The new connectivity technology uses a bidirectional, full-duplex protocol to transmit trade-related messages, which drastically increases execution quality. The average route time for trades shows an up to fourfold improvement over previously measured round-trip benchmarks. This is a true moonshot advancement in order execution quality that will allow any trading platform or other liquidity taker to offer exceptional trader UX improvements throughout their entire user base. ##### Concurrent connections to multiple API endpoints [#concurrent-connections-to-multiple-api-endpoints] This new feature allows B2CONNECT liquidity adapters to connect simultaneously to multiple endpoints associated with private and public APIs (where available). This enables access to digital resources on both types of endpoints at the same time. This advanced architecture improves resource availability and eliminates a single point of failure, giving B2CONNECT liquidity acquisition and distribution services the ability to simultaneously access market and trading data across various API clusters. The primary benefit of this new feature from a client perspective is much more reliable, fault-tolerant price feeds, order placements, and execution confirmations, improving UX while reducing market risks at the same time. #### Improvements [#improvements-16] * Trading log entries and error messages from both B2CONNECT internal services and external sources (such as supported liquidity providers) are now categorized and given a unified content and format before being transmitted to taker platforms. This ensures that messages are organized in a consistent manner and are better prepared for human consumption. This improvement is aimed at enhancing UX and reducing the load on a technical support team. * An improved B2CONNECT FIX server shutdown procedure has been implemented, which allows for graceful state saving and restoration, as well as prevents data loss due to interruptions of quoting and trading sessions. This enhancement ensures orderly logouts across all platforms connected via the FIX protocol, and availability of FIX messages after a restart. #### Resolved issues [#resolved-issues-18] * Fixed an issue where, in some scenarios, third-party FIX clients had issues reconnecting to the B2CONNECT FIX server after a logout. We have also ensured that a Logout message is consistently sent upon a client’s logout, which in rare cases may have been skipped prior to this release. * Fixed an issue that infrequently caused situations where after setting the order book depth to decrease, the number of levels would sometimes not increase back after reverting the settings. *** ### March 13, 2024 [#march-13-2024] #### New features [#new-features-18] ##### Liquidity distribution to the B2TRADER Brokerage Platform (BBP) [#liquidity-distribution-to-the-b2trader-brokerage-platform-bbp] With this release, the B2CONNECT team is excited to announce that the emerging B2TRADER Brokerage Platform has been added to our growing list of supported trading venues. This addition further advances our commitment to delivering top-notch connectivity to trading platforms and liquidity providers. The key updates encompass a bespoke order execution flow as well as custom FIX API endpoints that streamline the retrieval of available markets and contract specifications. With these enhancements, our industry-standard FIX protocol implementation enables a robust connection between the newly added platform and the liquidity providers supported by B2CONNECT. This integration empowers BBP’s clients to embrace flexible business models and adjustable execution strategies. And, as a result, further boost their success by providing exceptional user experiences to their end users — the members of the trading communities. ### November 10, 2023 [#november-10-2023] #### New features [#new-features-19] ##### Maker-integration with cTrader via the FIX protocol [#maker-integration-with-ctrader-via-the-fix-protocol] With this release, the B2CONNECT team is pleased to announce the achievement of a significant milestone in our ongoing quest to provide exceptional connectivity to both trading platforms and liquidity providers: we have successfully integrated B2CONNECT Liquidity Hub with **cTrader**. With this integration, B2CONNECT Liquidity Hub can now distribute the liquidity to cTrader, a complete trading platform solution for the forex and CFD brokers, via the FIX protocol. On one hand, this furnishes our clients running trading platforms with the ultimate access to liquidity. On the other hand, this empowers liquidity providers to implement comprehensive distribution solutions. This release marks the paradigm shift in the connectivity approach by including trading platform integrations alongside the liquidity providers and liquidity aggregators — our focus previously. This is a major step forward in expanding our ecosystem to include taker-venues, making our product a versatile liquidity distribution solution that meets the needs of a wide range of industry players in the dynamic world of trading. This new integration enables the provision of unique liquidity streams empowering our clients to differentiate themselves in a competitive and highly volatile market. Retail and institutional brokers, crypto exchanges, and liquidity providers can leverage our performant liquidity distribution solutions powered by industry-standard communication protocols and fast APIs built on scalable frameworks. *** ### October 20, 2023 [#october-20-2023] #### New features [#new-features-20] ##### Full support for Bitfinex Derivatives [#full-support-for-bitfinex-derivatives] Following the Bitfinex Spot support implemented earlier this year, we are pleased to announce full support for Bitfinex Derivatives with this release. It has been done per popular client request to support and improve diversification of perpetual futures liquidity flows, following the collapse of a global cryptocurrency derivatives player late last year. With this release, trading platforms powered by the B2BROKER technology receive additional benefits and opportunities, such as: * expand your offer with additional trading instruments * increase market depth due to additional liquidity source * improve liquidity, including faster and more flexible price feeds and better execution quality * diversify liquidity streams by the additional source of liquidity and avoid a single point of failure * differentiate yourself from competing platforms and, at the same time, delight your users by creating unique liquidity streams that have just become available from the newly supported platform. Among other features, the trading API and pre-execution model are fully supported and immediately available to client venues using the FIX protocol and relying upon the B2CONNECT’s signature FIX API (v1.2 and later). #### Improvements [#improvements-17] * A new tutorial has been added to the B2CONNECT Product guide, illustrating the process of setting up a connection to Coinbase. We took a special care to highlight the required credentials and help clients find them easily. *** ### September 29, 2023 [#september-29-2023] #### New features [#new-features-21] ##### FIX API 1.2 [#fix-api-12] With this release, B2CONNECT introduces a new version 1.2 of FIX API, which is an expanded and improved version of the previous implementation: * The Business Message Reject has been deleted. * The [Sequence Reset](fix-api#sequence-reset) message has been added. * The following tags have been added to the [Market Data Request](fix-api#market-data-request) message: `<267> NoMDEntryTypes` (required), `<269> MDEntryType` (required). * The following tag has been added to the [Market Data — Snapshot/Full Refresh](fix-api#market-data-snapshot-full-refresh) message: `<299> QuoteEntryID`. * The following tag has been added to the [New Order Single](fix-api#new-order-single) message: `<1> Account`. * The following tags have been added to the [Execution Report](fix-api#execution-report) message: `<64> SettlDate`, `<75> TradeDate`, `<103> OrdRejReason`. * The following tag has been added to the [Order Cancel Reject](fix-api#order-cancel-reject) message: `<39> OrdStatus` (required). The [FIX API specification](fix-api) has been updated to reflect the changes as well as to become more clear and consistent. *** ### May 12, 2023 [#may-12-2023] #### New features [#new-features-22] ##### A new form for entering API keys [#a-new-form-for-entering-api-keys] The B2CONNECT Web UI has been updated to display a customized form for entering API keys for each of the supported hedging platforms. As a result, the issues with entering the credentials have been eliminated. Since every platform features a different set of fields for entering the API keys, this form was updated to display the authorization fields as they are provided by each hedging platform and to prevent any ambiguity arising from the difference in the field names. #### Improvements [#improvements-18] * The contents of Web UI controls and field descriptions have been revised to afford a more intuitive interface. * The look and feel of the B2CONNECT Web UI has been enhanced by updating some of its most commonly used visual elements. #### Resolved issues [#resolved-issues-19] * Fixed an issue causing the API key editing window to hang when an entry for a hedging platform was absent in the configuration. Such exceptions are now handled, and the stability of the UI has increased as a result. * Fixed an issue due to which empty fields were erroneously assigned zero values after updating the hedging configuration. * Fixed an issue due to which duplicate entries could be displayed for clients on the Hedging Status tab. * Fixed an issue due to which incorrect values were submitted in certain scenarios when enabling or disabling hedging on the Hedging Status page of the Web UI. *** ### April 21, 2023 [#april-21-2023] #### Improvements [#improvements-19] ##### Liquidity provider validation before accepting incoming orders [#liquidity-provider-validation-before-accepting-incoming-orders] The order execution reliability has been greatly improved as a result of including a check for the actual availability of the supported liquidity providers before the B2CONNECT Liquidity Hub services can go forth and accept the incoming orders from a taker platform. Following the update of the B2CONNECT liquidity distribution services, they now always ensure that the connected liquidity providers are ready to execute a placed order, in which case the order is then accepted for execution on the connected trading venue serving as a liquidity consumer. ##### Type-agnostic execution of orders [#type-agnostic-execution-of-orders] If the order type that was set by a taker platform isn’t recognized as a valid execution option, the B2CONNECT liquidity distribution services can be configured to emulate the required order type by assigning a different type to the order. This way you can further ensure that the placed orders will be filled regardless of their types, and their execution quality will match the expectations of your end-users to the fullest possible extent. ##### Repeated requests for order placement [#repeated-requests-for-order-placement] The B2CONNECT order placement services have been revised to enable them to retry order placement if a target liquidity provider platform is unable to fill an order for a transient reason. If the dedicated B2CONNECT service recognizes the returned error as transient (as opposed to intrasient errors, such as those arising from connection failures), the service then works around this issue by automatically sending a repeated request for order placement, which increases the chances that the order will be eventually filled. This is especially useful in times of increased market volatility resulting in drastic increase in traders’ activity, which may overwhelm the liquidity provider services making it difficult to fulfill all the requests for orders execution. #### Resolved issues [#resolved-issues-20] * Fixed some issues affecting the B2CONNECT notification service. These include occasional service stability issues arising from an incorrect data format, as well as the issue due to which a user identifier defined in hedging configuration could not be resolved if this user’s trading platform was left unspecified. * Fixed an issue that affected the adapter used to connect to one of the supported liquidity providers and prevented restarting the service and restoring the connection after the liquidity provider has disconnected the communication protocol. * Fixed some minor issues with the B2CONNECT Web UI due to which it could be difficult for users to replace the API keys in certain scenarios. * Fixed an issue with the Hedging Reports section of the B2CONNECT Web UI due to which the Amount field in the Order Details section could be occasionally assigned incorrect data. *** ### March 10, 2023 [#march-10-2023] #### New features [#new-features-23] ##### Hedging on Bitfinex [#hedging-on-bitfinex] Bitfinex, a global cryptocurrency exchange and spot trading venue, is now supported as a new hedging platform. As is well known, diversification is the key to thriving, regardless of market conditions. This is why with the two most recent releases we specifically focused on providing the widest variety of connectivity options to our global-minded clients, while offering them the opportunity to hedge market risks on suitable platforms in as many regions and jurisdictions as possible with a view of achieving the maximum geographical and regulatory diversity. The newly released trading adaptor for the Bitfinex API is the next step on the B2CONNECT’s journey aimed at empowering its discerning B2B clients, which include cryptocurrency exchanges and crypto brokers. In the meantime, our main goal remains constant: we are eager to not only delight trader communities by ensuring a fantastic user experience, but also to offer trading platforms broad opportunities for spreading risks and allow them to take a savvy approach to exposure in a wide range of market situations. #### Improvements [#improvements-20] ##### Enhanced support for trading instruments engineered as contracts [#enhanced-support-for-trading-instruments-engineered-as-contracts] We have significantly expanded the contract specification capabilities for some of the supported crypto assets by encompassing all popular methods of defining trading instruments. With the enhanced contract sizes, the price and/or amount can be configured in any combinations while designing contracts for various symbols, with taking into consideration both the contracts that are priced by amount and those evaluated by face value regardless of their amount. #### Resolved issues [#resolved-issues-21] * Fixed an issue due to which the adaptor used for price discovery on one of the supported liquidity providers could hang in certain scenarios. * Fixed an issue which hampered the efficiency of the cloud resources utilization by making multiple subscriptions to quotes for the same asset if liquidity for this asset was used to maintain price feeds for several symbols. * Fixed an issue which caused intermittent disconnection of the FIX protocol after restarting one of the supported liquidity aggregators. * Fixed an issue related to number formats which occasionally appeared in hedging reports. As a result, the scientific EXP format used for some of the fields has been replaced with a more user-friendly financial format. *** ### February 17, 2023 [#february-17-2023] #### New features [#new-features-24] ##### Hedging on Kraken [#hedging-on-kraken] As part of our relentless pursuit of providing crypto asset exchanges and brokers seamless access to the widest possible choice of hedging platforms, we are pleased to announce full support for the Kraken trading API, which opens new horizons for trading venues relying on B2CONNECT Liquidity Hub in terms of risk transfer and supplying the price feed. This is a major landmark for B2CONNECT, made possible by enhancing the previously released adapter used for connecting to this well-established bitcoin trading platform and cryptocurrency exchange which is based in San Francisco. As a result, both Level 2 quotes and hedging for all symbols traded on Kraken are now available to B2CONNECT clients. #### Improvements [#improvements-21] ##### Extended documentation [#extended-documentation] [A new tutorial](how-to-articles/how-to-properly-configure-api-keys-on-kraken) has been added to B2CONNECT documentation, illustrating the process of obtaining the API keys required to enable hedging on Kraken using the newly introduced hedging adapter. Paying special attention to keeping our documentation up-to-date and complete, we invite you to learn more about B2CONNECT by exploring our Product Guide and encourage you to contact us if you have any suggestions or need further assistance. #### Resolved issues [#resolved-issues-22] * Fixed an issue which caused the hedging engine to hang up immediately after entering the API keys for connecting to some of the hedging platforms in certain scenarios. * Fixed an issue which prevented simultaneous placement of multiple hedging orders, causing instead their consecutive placements which resulted in slightly delayed execution. * Fixed an issue which caused recurrent switching between the main and backup liquidity providers in certain scenarios. *** ### January 27, 2023 [#january-27-2023] #### New features [#new-features-25] ##### Level 2 quotes supported for Bitfinex spot liquidity [#level-2-quotes-supported-for-bitfinex-spot-liquidity] Yet another major cryptocurrency exchange Bitfinex has been integrated, ensuring steady supply of spot asset liquidity from this global platform. This highly anticipated development opens exciting new opportunities for operators of crypto trading venues, since it is hard to overestimate the importance of being able to connect to unique liquidity sources. For those who are determined to survive the ongoing “crypto winter” and excel in a highly competitive environment, this is a great opportunity to appeal to extremely discerning trader communities with the best possible offering, which includes a wide array of trading instruments and guarantees tighter spreads and remarkable market depth. This is undoubtedly great news both for the exchanges powered by matching engines, such as B2TRADER, and for third-party crypto exchanges and brokers connected to B2CONNECT via the FIX protocol (either using the B2CONNECT proprietary FIX API or solutions relying on liquidity aggregators, such as oneZero and PrimXM). #### Improvements [#improvements-22] ##### Improved handling of Level 2 quotes [#improved-handling-of-level-2-quotes] The performance of locally maintained extended order books with a virtually unlimited number of price levels (up to 5,000 and beyond) has been enhanced, thanks to implementation of an improved solution, which enables combining multiple price feeds into a single data stream, as opposed to one-to-one channel subscriptions that were previously supported. This has resulted in a drastic performance boost for the price discovery engine, along with a notable increase in the frequency of Level 2 quote updates. #### Resolved issues [#resolved-issues-23] * Fixed an issue that caused occasional generation of empty reports due to incorrect logging of executed trades. * Fixed an issue that prevented subscription to more than a hundred trading instruments due to a bug in the adaptor used to connect to one of the supported liquidity providers. * Fixed an issue related to data exchange with message-oriented middleware, which caused occasional rejection of orders placed using the FIX protocol. * Fixed an issue due to which in certain scenarios the hedging engine attempted to place trades on one of the supported liquidity provider platforms despite the corresponding API keys being missing. * Fixed an issue due to which requests to place offset orders were occasionally sent to hedging platforms even when the order volume was zero after applying the trading rules governing decimal precision of order amounts on these platforms. ### December 16, 2022 [#december-16-2022] #### New features [#new-features-26] ##### Support for multiple accounts on a single hedging platform [#support-for-multiple-accounts-on-a-single-hedging-platform] Automated hedging can now be performed simultaneously on two or more accounts on the same hedging platform for routing offset trades with a purpose of hedging market risks. First and foremost, the B2CONNECT team is committed to empowering its user base — that is, operators of trading venues, such as spot crypto exchanges and brokerages — and putting their best efforts to implement as flexible and efficient hedging policies as possible. With that in mind, this newly added feature is aimed at supporting multiple accounts on a single hedging platform, while ensuring precise order placements, timely delivery of execution confirmations and in-depth reporting for each account used to make offset trades on a given liquidity provider platform. #### Improvements [#improvements-23] ##### Unmatched execution quality due to asynchronous placement of orders [#unmatched-execution-quality-due-to-asynchronous-placement-of-orders] The B2CONNECT order placement engine relying on trading sessions maintained using the FIX protocol has been vastly improved by adding support for asynchronous placement of large numbers of orders submitted for execution on liquidity provider platforms, which has resulted in unprecedented speed and unrivaled execution quality. ##### Extended infrastructure for engineering of synthetic instruments [#extended-infrastructure-for-engineering-of-synthetic-instruments] A new improvement to the B2CONNECT synthetics engine has significantly extended the range of available sources of quotes suitable for engineering synthetic trading instruments, such as synthetic crosses, fractional markets and inverted pairs. Accessible price feeds are not only received from a B2CONNECT instance hosting the synthetics engine itself, but also from any other instance within the Liquidity Hub ecosystem. #### Resolved issues [#resolved-issues-24] * Fixed an issue related to the reporting service: when a single order was filled by way of multiple executions on a particular hedging platform, only one of the executions was recorded. * Fixed a bug related to the [SimpleFIX Go library](https://github.com/b2broker/simplefix-go/) implementing the FIX protocol, which could have caused an issue with the logon sequence if a client used a different FIX protocol implementation. * Fixed an issue causing a resource leak in the synthetics engine that could have given rise to intermittent stability issues. In addition, another resource leak has been eliminated in an adapter used to connect to one of the supported spot cryptoasset liquidity providers, ensuring overall stability of the service, its reliability and uninterrupted uptime. ### November 25, 2022 [#november-25-2022] #### New features [#new-features-27] ##### Direct integration of the B2CONNECT FIX server with PrimeXM [#direct-integration-of-the-b2connect-fix-server-with-primexm] The B2CONNECT Liquidity Hub is now capable of distributing liquidity as a maker to PrimeXM. Client connections to this leading liquidity aggregation platform are powered by the industry-standard FIX protocol, and the liquidity bridged by B2CONNECT can now be distributed directly on PrimeXM for its subsequent distribution across other trading venues. Both the quoting and trading sessions are supported, providing immense benefits to trading venues participating in the B2CONNECT ecosystem and offering them new exciting opportunities to grow their business and differentiate from competitors in both the scope and performance of trading instruments available both to their users and the trading community as a whole. #### Improvements [#improvements-24] ##### Automatic validation of markups [#automatic-validation-of-markups] The price construction mechanism featured by B2CONNECT has been further improved by adding validation to the key parameters entered for price markups. If the markup values assigned to the BID and ASK sides are asymmetric, a warning is issued prompting a venue operator to correct the entered values so that unequal markup amounts are not placed on both sides of the order book. ##### More data for tracking orders and matching elements of the hedging flow [#more-data-for-tracking-orders-and-matching-elements-of-the-hedging-flow] The logging and reporting functionality provided by various B2CONNECT services has been enhanced by listing external execution identifiers assigned by connected liquidity providers along with their B2CONNECT-assigned equivalents. This way, order matching has become much quicker, also facilitating subsequent analysis of trades. Moreover, orders have also become easier to track thanks to newly introduced granular timestamps. #### Resolved issues [#resolved-issues-25] * Fixed an issue due to which the order book was reset upon receiving out-of-sequence incremental updates for Level 2 quotes from one of the supported liquidity providers. * Fixed an issue related to one of the supported liquidity providers: a command to subscribe to incremental updates was ignored for all trading instruments if it couldn’t be executed only for some of them. * Fixed an issue related to the B2CONNECT FIX protocol: non-sequential numbers were assigned to certain FIX messages. * Fixed a rarely occurring issue related to the B2CONNECT Web UI: toggling a certain switch when setting up one hedging platform could result in misconfiguration of another hedging platform. * Fixed an issue related to the reporting and alerting service used for sending messages to a Slack channel: in some cases, incorrect data was being reported. *** ### October 14, 2022 [#october-14-2022] #### New features [#new-features-28] ##### Liquidity from and hedging on FTX [#liquidity-from-and-hedging-on-ftx] We are happy to announce yet another major achievement in our quest for unrivaled connectivity for B2CONNECT across the spot crypto liquidity space: with this release, FTX, a top-rated global crypto exchange, has been supported, once again letting B2CONNECT assert itself as a flagship liquidity hub and price discovery engine. The liquidity for all markets represented on FTX is immediately available for any exchange powered by the B2TRADER matching engine as well as to any trading platform connected to B2CONNECT via the FIX API. Along with supplying the price feed for spot markets, the newly introduced connection adapter radically extends the range of price risk hedging options offered by the B2CONNECT hedging engine. #### Improvements [#improvements-25] ##### DB connectivity monitoring [#db-connectivity-monitoring] When it comes to the cloud infrastructure accommodating the B2CONNECT services, we put our best efforts to not only ensure its highest performance and extreme reliability, but also envision efficient ways to monitor and maintain connectivity. In keeping true to our principle — trust, but verify — we have implemented automated detection of connectivity issues related to managed cloud database services. ##### Optimal subscription management [#optimal-subscription-management] Superb performance is the cornerstone on which rests the success of the B2CONNECT liquidity platform, and it’s been proved time and again during its development that the key to achieving the highest degree of efficiency is constant optimization. This time, it has been ensured that the liquidity hub only subscribes to the symbols that take part in liquidity distribution. This saves the cloud resources due to removal of subscriptions which are not currently in demand and further improves the overall platform performance. #### Resolved issues [#resolved-issues-26] * Fixed an issue due to which one of services stopped after removing a subscription to a price feed. * Fixed an issue due to which a mandatory time-in-force parameter value wasn’t sent when placing hedging orders of a certain type on a particular hedging platform. *** ### September 23, 2022 [#september-23-2022] #### New features [#new-features-29] ##### Conversion of derivative contract lot sizes to smaller and larger tradable amounts [#conversion-of-derivative-contract-lot-sizes-to-smaller-and-larger-tradable-amounts] With this release, you can split derivative contracts and reform contract specifications with underlying digital assets to change the contract lot size and lot price. This is a major development, since it enables quoting and trading fractional and, inversely, consolidated crypto derivative contracts. For example, if an instrument is traded at a liquidity provider venue in lots of 1000, such derivatives can now be traded in lots of one to a million on a taker side, with the contract quotes readily adjusted to the new contract sizes. When the orders are placed for executions on liquidity provider venues, they are adjusted to meet the lot size requirements of each venue. #### Improvements [#improvements-26] ##### The order book state may be preserved indefinitely [#the-order-book-state-may-be-preserved-indefinitely] The adapter used to connect to liquidity providers has been further improved by adding the option to hold the last value of a quote indefinitely. A good case for this is dealing with acquisition of quotes when the asset price changes only intermittently even though the connection to the liquidity provider is alive. ##### The current state of Level 2 quotes is now reset upon disconnection [#the-current-state-of-level-2-quotes-is-now-reset-upon-disconnection] This improvement is related to the previous one: it has been ensured that even when the asset price is configured to handle infrequent refreshing of quotes, once connection to a liquidity provider goes down, the state of Level 2 quotes is reset until connection to the source of quotes is renewed. #### Resolved issues [#resolved-issues-27] * Fixed an issue due to which, when asset volume is denominated with high decimal precision, small order amounts could be truncated to zero and error messages may be sent by liquidity providers. It is now ensured that hedging is handled properly, and in cases when orders are so small that they would be rejected by liquidity provider venues, they are not sent there for execution. * Fixed an issue which caused race conditions. This has resulted in improved stability and performance of a hedging agent along with an adapter used to fetch asset quotes from a liquidity provider venue. * Fixed an issue related to recording of time values. It has been ensured that timing is now properly recorded and corrected for ongoing order execution requests. * Fixed an issue concerning a service responsible for handling the FIX protocol. The service is now capable of resuming the price feed after connection to the liquidity taker was reinstated. * Fixed an issue due to which upon entering a long numerical value on a Web UI form, its last digit was switched to zero. *** ### September 2, 2022 [#september-2-2022] #### New features [#new-features-30] ##### Updated documentation [#updated-documentation] A new section has been added to the B2CONNECT documentation providing a user interface overview and illustrating how to accomplish the most common tasks. Refer to the **Product guide** to learn about the hedging functionality provided by B2CONNECT. #### Improvements [#improvements-27] With this release, various changes have been introduced to B2CONNECT user interface, which include the following improvements: * A table header in the Hedging configuration section has become fixed, making it easier to see the field captions when scrolling down the page. * All buttons have been provided with tooltips describing their functionality. * The minimum screen resolution (960px) is now supported on all product pages. *** ### August 12, 2022 [#august-12-2022] #### New features [#new-features-31] ##### Full support for Huobi Futures [#full-support-for-huobi-futures] Huobi Futures, a top-rated derivative exchange platform, has been fully supported. As a result, robust supply of level 2 quotes has been ensured across the entire range of trading instruments, including but not limited to futures, swaps and perpetual swaps available on the newly supported platform. This new level of liquidity has been provided following a major update of a recently released Huobi Spot Adapter, which was greatly extended to allow B2CONNECT clients to explore all the advantages offered by Huobi-powered trading venues. The trading API is also supported, which opens new opportunities for best price execution and radically expands the range of options available to B2CONNECT Liquidity Hub clients in the realm of market risk mitigation while allowing them to offer their end users the tightest spreads and deepest order books across today’s markets. Among other features, pre-execution model is fully supported and immediately available to client venues utilizing the FIX protocol and relying upon the B2CONNECT signature FIX API. #### Improvements [#improvements-28] ##### Increased consistency of synthetic quotes [#increased-consistency-of-synthetic-quotes] The engine responsible for engineering synthetic cross pairs and fractional trading instruments has received yet another boost in functionality to increase the consistency of synthetic quotes by eliminating any outlying values when calculating spreads. ##### Extra validation ensuring decimal precision of asset prices [#extra-validation-ensuring-decimal-precision-of-asset-prices] Arguably, when it comes to cryptocurrencies and other types of digital assets, the issue of decimal precision may be challenging for some legacy trading platforms and liquidity aggregators that primarily deal with fiat instruments and traditional securities. In contrast, B2CONNECT ensures that liquidity is always ingested, handled and distributed with superb efficiency, regardless of decimal precision and numerical value range of asset prices. With an additional layer of validation added to its liquidity engine, B2CONNECT makes sure that decimal precision values are always handled in strict accordance with the client specification, throughout the entire liquidity processing pipeline. #### Resolved issues [#resolved-issues-28] * Fixed an issue due to which supported platforms could sometimes fail to subscribe to level 2 quotes provided by B2CONNECT. * Fixed an issue due to which the final status of an order execution could be recorded incorrectly in certain scenarios involving one of the supported hedging platforms. *** ### July 1, 2022 [#july-1-2022] #### New features [#new-features-32] ##### Hedging reports — New section in Web UI [#hedging-reports--new-section-in-web-ui] On a newly introduced Hedging Reports page, you can find the history of hedging orders, view comprehensive order data and drill down to the minute details of each execution. The data on order placement requests and hedging platform responses is readily available, along with the information related to timing of each step along the order processing pipeline. You can filter the reports by various criteria, including different types of order and counterparty IDs, order placement and execution data, as well as various time intervals. The table layout is configurable, making it possible to reorder the columns and display or hide any column according to your preferences. #### Resolved issues [#resolved-issues-29] * Fixed various usability issues to improve the user experience. * Fixed an issue which prevented access to inputs due to an overlapping menu. *** ### June 10, 2022 [#june-10-2022] #### New features [#new-features-33] ##### A tenfold increase in Level 2 quotes update speed [#a-tenfold-increase-in-level-2-quotes-update-speed] The rate of Level 2 quote updates has been increased ten times compared to the previous release, enabling liquidity feeds to be refreshed with an interval of 100 ms. This feature allows B2CONNECT Liquidity Hub clients to initiate and maintain the most up-to-date order books that enhance user experience for traders on the supported exchange and broker platforms, as well as make risk management aspects of trading venue operations more predictable. #### Improvements [#improvements-29] ##### API rate limits implementation [#api-rate-limits-implementation] The B2CONNECT Liquidity Hub hedging engine’s reliability has been given yet another boost with the implementation of support for request rate limits. This ensures optimal uptime for API connections employed for the purposes of trade executions and reporting. ##### Heartbeats and graceful connection termination [#heartbeats-and-graceful-connection-termination] Health checks and connection handling safeguards have been added to ensure a seamless connection to liquidity provider data. As a result, unmatched reliability in managing Level 2 quote feeds has been achieved. #### Resolved issues [#resolved-issues-30] * Fixed timeout issues that could affect reliability of full-duplex communication channels-while connecting to certain liquidity providers via API. * Fixed an issue with the mechanism responsible for restoring an API connection upon its interruptions in certain corner cases. * Fixed an issue due to which the Filled Amount field in hedging order execution reports could contain incorrect values. *** ### May 20, 2022 [#may-20-2022] #### New features [#new-features-34] ##### Markups as a function of order book depth [#markups-as-a-function-of-order-book-depth] B2CONNECT Liquidity Hub clients can now apply multiple markups based on the price level defined for Level 2 quotes. Together with variable volume modifiers introduced earlier this year, this feature empowers the trading venue operators to manage the liquidity of their order books to a highest precision, thus improving the user experience while mitigating market risks. #### Improvements [#improvements-30] ##### Improved logics for applying markups [#improved-logics-for-applying-markups] The algorithms used for applying both constant and multi-tiered markups have been revised. This has resulted in improved quality of liquidity distribution after applying markups. ##### More granular analytics with new data included in hedging order execution reports [#more-granular-analytics-with-new-data-included-in-hedging-order-execution-reports] More data about orders is now recorded by the B2CONNECT reporting engine. A new field has been added to store the order status information provided by hedging platforms. Furthermore, a new status has been included to distinguish expired orders from those canceled for other reasons. #### Resolved issues [#resolved-issues-31] * Fixed an issue that caused a leak of resources during disconnections occurring as a result of intermittent network failures. * Fixed several issues that occurred in rare scenarios. Reliability and high availability of services responsible for liquidity supply in various market conditions has been ensured as a result. *** ### April 29, 2022 [#april-29-2022] #### New features [#new-features-35] ##### Yet more liquidity from Huobi Global [#yet-more-liquidity-from-huobi-global] The B2CONNECT Liquidity Hub is celebrating a new major update: we worked hard to introduce a fully featured adapter for the top-rated crypto exchange Huobi Global. Both the Level 2 quote and hedging adapters have become available to all B2CONNECT Ecosystem participants. This highly anticipated component has boosted both the breadth and depth of the crypto spot liquidity offering, carrying a great advantage for supported digital asset exchanges, including B2TRADER. For the liquidity hub as a platform, this also ensures increased availability and improved failover capability. The influx of liquidity from the new source will also benefit the client venues integrated with B2CONNECT via FIX API. #### Improvements [#improvements-31] ##### Optimized market data delivery [#optimized-market-data-delivery] The parser of market data coming from one of the world's largest crypto exchanges has been optimized, which resulted in a significant improvement in the adapter performance. Latency has been reduced by an order of magnitude, and the quality of market data and overall reliability have been considerably improved. ##### More flexible hedging with enhanced time-in-force settings [#more-flexible-hedging-with-enhanced-time-in-force-settings] A hedging adapter for one of the major crypto-asset exchanges has been revamped, extending our offering to encompass the full range of trading parameters available for orders placed in the context of market risk hedging. With the newly introduced time-in-force options, our clients are free to devise more flexible and ultimately more efficient hedging strategies. #### Resolved issues [#resolved-issues-32] * Fixed an issue which didn't allow the hedging agent to record certain fields when trades were rejected by a hedging platform. * Fixed an issue which affected processing of incoming and outgoing messages used by one of the supported protocols, when some messages could be blocking other ones at a high load. A considerable potential bottleneck has been prevented as a result. * Fixed an issue that could affect order book consistency for one of the supported exchanges. * Fixed an issue that could have impact on the stability of some of the B2CONNECT services if reports were received in an incorrect format. * Fixed an issue that could result in a failure to cancel a previously placed order while executing a hedging strategy on one of the supported hedging platforms. ### April 8, 2022 [#april-8-2022] #### New features [#new-features-36] ##### Comprehensive integration with Bittrex Global [#comprehensive-integration-with-bittrex-global] A new adapter has been introduced to enable price discovery and market risk hedging on Bittrex Global. Connection to this global crypto exchange drastically extends the range of trading instruments and hedging options provided by B2CONNECT. ##### Hedging on Coinbase [#hedging-on-coinbase] A new adapter has been introduced to enable spot asset hedging on the Coinbase crypto exchange. For B2CONNECT Liquidity Hub clients who already came to appreciate the advantages of seamless Coinbase connection, this improvement signals complete integration with this major crypto trading platform, opening the opportunity for superior spot asset hedging. #### Improvements [#improvements-32] ##### Extended price feed options [#extended-price-feed-options] The price feed can now be streamed in the form of order book snapshots. Adding up to incremental feed updates, this further ensures even and reliable streaming of prices. ##### New performance benchmark reached [#new-performance-benchmark-reached] Over 200% increase in B2CONNECT performance has been secured thanks to optimization of the data interchange mechanism, which resulted in a major reduction of latency and more judicious use of computing resources. Smart use of cloud resources and bandwidth directly translates into the amount of trading instruments which a B2CONNECT instance can handle efficiently. This also implies increased market depth and higher frequency of symbol quote updates, along with a much better quality of order execution and improved bottom line. #### Resolved issues [#resolved-issues-33] * Fixed an issue impairing the reliability of streaming order book data in rare scenarios. * Fixed an issue which occasionally caused a resource leak in cases when specific configuration parameters were missing. The stability of the hedging services has improved as a result. * Fixed an issue causing occasional inversion of sides when hedging trades were placed on certain platforms. *** ### March 18, 2022 [#march-18-2022] #### New features [#new-features-37] ##### Streamlined order book consolidation [#streamlined-order-book-consolidation] With this release, B2CONNECT supports consolidation of Level 2 quotes with unlimited market depth into any order book, according to flexible configuration rules. As a result, B2CONNECT clients can stream a price feed with a specified liquidity distribution to fill an order book with fewer levels while preserving the overall market depth. This way the B2CONNECT platform, with its support for virtually unlimited market depth, becomes even easier to integrate with trading venues whose market depth is limited to just a dozen or a hundred order book levels. At present, this functionality is available only for services accessible via FIX API. ##### Improved SimpleFIX Go documentation [#improved-simplefix-go-documentation] The official documentation for the SimpleFIX Go library has been updated. This state-of-the-art library makes for a major contribution to open source on behalf of B2BROKER, providing an up-to-date FIX engine implementation out of the box while featuring high performance and employing a highly sought-after Go technology stack. The library is available at [https://github.com/b2broker/simplefix-go](https://github.com/b2broker/simplefix-go/) offering the global developer community a quick and easy approach to integrate FIX messaging pipelines into modern trading solutions powered by Go as well as ensure a closer integration with well-proven products from the B2BROKER family. #### Improvements [#improvements-33] ##### Support for liquidity with virtually unlimited order book depth [#support-for-liquidity-with-virtually-unlimited-order-book-depth] As a result of this improvement, nearly unlimited number of Level 2 quotes is now supported when it comes to the actual number of price levels in the order book, which includes (but is not limited to) order books featuring 1,000+ levels that are currently supported. ##### Extended configuration of Level 2 quotes [#extended-configuration-of-level-2-quotes] The set of configuration parameters required for consolidation of Level 2 quotes into a custom price feed has been extended to include the options that define the number of price levels being consolidated into a target order book, volume distribution settings and the rules for discovering prices at specific order book levels. #### Resolved issues [#resolved-issues-34] * Revamped a service responsible for switching the source of Level 2 quotes in the case when the counterparty starts supplying incorrect order book data. Continuous operation of price discovery services has been ensured as a result. * Fixed an issue that caused inversion of hedging trade sides in certain scenarios. *** ### February 25, 2022 [#february-25-2022] #### New features [#new-features-38] ##### Pre-trade execution control [#pre-trade-execution-control] B2CONNECT now supports pre-trade execution control that enables the trading venues integrated via the FIX API to connect to the B2CONNECT Liquidity Hub as takers. When connected as a taker, a venue receives Level 2 quotes, it can place orders and receive confirmations when a maker executes the orders. ##### FIX API documentation [#fix-api-documentation] Basic [FIX API specification](fix-api) has become available to help independent trading venues and liquidity providers integrate B2CONNECT Liquidity Hub into their solutions via the FIX API. #### Improvements [#improvements-34] ##### Pricing Service streams prices with markups already applied [#pricing-service-streams-prices-with-markups-already-applied] A specialized B2CONNECT service providing top-of-the-book prices (that is, Level 1 quotes) is now streaming quotes with configurable markups already applied, as opposed to the earlier implementation, with only the raw quotes provided so that markups had to be applied explicitly upon receiving the markup values via separate REST APIs. The newly introduced approach is much easier and less time-consuming. #### Resolved issues [#resolved-issues-35] * Fixed an issue that resulted in the lot size not being taken into account when placing hedging orders on certain hedging platforms. * Fixed issues that affected the stability and performance of the B2CONNECT hedging engine. *** ### February 4, 2022 [#february-4-2022] #### New features [#new-features-39] ##### Full support for Kraken spot liquidity [#full-support-for-kraken-spot-liquidity] Trading venues participating in the B2CONNECT Ecosystem can now take advantage of ready access to spot liquidity on one of the top-ranked cryptocurrency exchanges — yet another milestone for B2CONNECT continuing on its mission of diversifying access to liquidity, be it crypto spot markets, crypto derivatives or other popular trading instruments. #### Improvements [#improvements-35] ##### Improved support for Poloniex API [#improved-support-for-poloniex-api] The Poloniex connection adapter has been updated following the changes to the API of this leading digital assets exchange, which resulted in enhanced performance and improved connection stability. ##### Extended integration with B2TRADER [#extended-integration-with-b2trader] With this release, B2CONNECT features even deeper integration with B2TRADER, a flagship matching engine and crypto assets exchange platform. As a result, more efficient delivery of trading reports and faster execution of hedging orders have become possible. #### Resolved issues [#resolved-issues-36] * Fixed an issue related to the Poloniex adapter and causing inconsistencies in Level 2 quotes under certain circumstances. * Fixed a reporting-related issue to ensure that the fees and commissions data is properly received and reflected in hedging reports. * Fixed issues causing occasional quote feed inconsistencies arising immediately after updating the configuration of some of the B2CONNECT services. *** ### January 14, 2022 [#january-14-2022] #### New features [#new-features-40] ##### Volume modifiers variable by price level [#volume-modifiers-variable-by-price-level] B2CONNECT Liquidity Hub clients can now configure a volume modifier (otherwise known as multiplier) as a function of market depth. Risk management precision can be ensured by fine-tuning liquidity distribution data in the order book. ##### Execution of hedging orders on Binance Futures [#execution-of-hedging-orders-on-binance-futures] A new adapter has been introduced for execution of hedging orders on Binance Futures, a major platform specializing in crypto derivatives. Combined with instruments for perpetual futures trading, this new service creates truly exciting opportunities for B2CONNECT Liquidity Hub clients. ##### Hedging of spot assets with Binance perpetual futures [#hedging-of-spot-assets-with-binance-perpetual-futures] Spot asset trades can be hedged with perpetual futures. B2CONNECT clients can reduce costs and improve the cash flow by applying more attractive strategies. #### Improvements [#improvements-36] * A new adapter has been introduced for connection to Gemini, another major cryptocurrency exchange providing spot liquidity for B2CONNECT clients. * A new adapter has been introduced for execution of hedging orders on the Poloniex crypto exchange. #### Resolved issues [#resolved-issues-37] * Fixed an issue that could result in omission of some trade parameters in the hedging orders trade history. * Fixed an issue that could cause an order timeout error despite normal execution of actual trades. ### December 17, 2021 [#december-17-2021] #### New features [#new-features-41] ##### Hedging configuration in the B2CONNECT Admin panel [#hedging-configuration-in-the-b2connect-admin-panel] Introducing a new Admin panel with a convenient user interface featuring useful hedging configuration options, allowing you to: * Specify the minimum and maximum amount at which to execute hedging orders, and define different hedge ratios for each order side. * Map some of the hedging order symbols to other symbols, meaning that you can hedge using any symbols apart from those present in a particular instrument. These options can find a variety of applications. For example, you can hedge by forcibly splitting large orders and executing each portion separately. ##### Hedging status — New section in Web UI [#hedging-status--new-section-in-web-ui] On a new Hedging Status page, you can manage and monitor trading venues and hedging platforms to solve any of the following tasks: * Run or stop the hedging process. * Connect hedging platforms to client exchanges or disconnect them according to your risk transfer preferences. * Manage API keys provided by the connected hedging platforms. *** ### December 3, 2021 [#december-3-2021] #### New features [#new-features-42] ##### FIX integration — Another major liquidity distribution platform supported [#fix-integration--another-major-liquidity-distribution-platform-supported] A new adapter has been introduced for connection to another major platform specializing in margin trading. This is a welcome addition to a rich set of connectivity options available to B2CONNECT Liquidity Hub clients. ##### Simultaneous connection to a number of ecosystem makers [#simultaneous-connection-to-a-number-of-ecosystem-makers] Any venue participating in the B2CONNECT ecosystem (or *ecosystem taker*) can now establish a live connection with multiple *ecosystem partners*, enjoying simultaneous access to multiple liquidity streams and gaining a competitive edge on the turbulent hedging market #### Improvements [#improvements-37] * The identifier assigned to executions by an exchange is now being tracked throughout the entire succession of hedging operations. This greatly improves the quality of end-to-end analytics available to risk managers employed at venues participating in the B2CONNECT ecosystem. * The hedging order placement process has been streamlined, resulting in improvements to the prioritization engine, which ensures the fastest possible routing of orders resulting in timely and efficient risk transfer coming handy to any risk management strategy. * In anticipation of possible connection failures or other issues compromising continuous liquidity flow from ecosystem makers, both the price feed and hedging can be configured to prescribe automatic switching to another ecosystem partner or external liquidity provider, followed by switching back to use them again as soon as the connection is restored. #### Resolved issues [#resolved-issues-38] * Fixed an issue that could compromise reliability of order routing services in some scenarios. Fault tolerance is now ensured in potentially disruptive cases, such as when trading symbols are found to be misconfigured or missing from a hedging configuration. *** ### November 12, 2021 [#november-12-2021] #### New features [#new-features-43] ##### The VWAP and total volume included in reports [#the-vwap-and-total-volume-included-in-reports] Hedging orders exceeding a certain amount (configurable) can be executed in multiple portions. The total hedging volume and Volume Weighted Average Price are included into a corresponding report. ##### 100 price levels — Market depth milestone passed [#100-price-levels--market-depth-milestone-passed] Liquidity can now be provided with a market depth of more than 100 order book levels, which in practice implies virtually infinite order book. The previous milestone, with a maximum of 100 levels in the order book, has been reached and passed — the actual market depth now depends solely on the available computing resources. ##### Flexible user roles and granular access permissions [#flexible-user-roles-and-granular-access-permissions] It is now possible to configure and assign custom user roles, dynamically if required. This approach to maintaining access permissions ensures proper access control granularity, promising an easier way to manage a multitude of permissions across various system modules. #### Improvements [#improvements-38] * Data exchange between various product services via the internal messaging system has been optimized, resulting in sturdier interoperability and reduced consumption of cloud resources. * Currency pairs can now be inverted, which adds up to the range of hedging parameters available for synthetic instruments. They can be modeled on any of the symbols in a pair, regardless of whether they are notionally considered base or quoted. #### Resolved issues [#resolved-issues-39] * Fixed an issue that imposed an unreasonable limit upon the order book depth. *** ### October 22, 2021 [#october-22-2021] #### New features [#new-features-44] ##### Synthetic Engine integration [#synthetic-engine-integration] The Synthetics Engine has become an integral part of the B2CONNECT Liquidity Hub ecosystem. ##### Notional values as hedging order limits [#notional-values-as-hedging-order-limits] The set of hedging configuration parameters has been extended, making for a much more flexible risk management: when configuring limit settings of your hedging orders, you can list both a base asset and a notional symbol which may be quoted in any asset, including fiat currencies. ##### More order types, hedging with time-in-force settings [#more-order-types-hedging-with-time-in-force-settings] The set of available time-in-force options has been extended. Apart from a variety of market orders, you can place limit orders and configure their slippage settings. #### Improvements [#improvements-39] * Precise timing is now an important aspect of analytics available to B2CONNECT Liquidity Hub clients. The time of order execution at a hedging platform is now being tracked, opening doors for new insights inspired by accurate execution data. * It is now possible to specify the minimum and maximum amount for hedging orders. The amount limits are adjusted to the hedge ratio. #### Resolved issues [#resolved-issues-40] * Fixed an issue compromising the stability of an internal service monitoring the status of sources supplying Level 2 quotes to B2CONNECT. Continuous streaming of liquidity feeds is now ensured. *** ### June 10, 2021 [#june-10-2021] #### New features [#new-features-45] ##### RESTful API with Swagger documentation [#restful-api-with-swagger-documentation] RESTful API has been provided to lay the ground for a graphical user interface and further integration between B2CONNECT and other B2BROKER products featuring a UI. ##### External liquidity providers as venues for price risk hedging [#external-liquidity-providers-as-venues-for-price-risk-hedging] Trades executed on B2TRADER can now be hedged automatically, by forwarding price risks to an external liquidity provider, such as Binance. ##### Direct hedging upon external liquidity providers for B2BX clients [#direct-hedging-upon-external-liquidity-providers-for-b2bx-clients] Direct hedging of price risks via external liquidity providers has become possible. You can execute hedging orders on Binance or any other platform connected to a client exchange participating in the B2CONNECT ecosystem and receiving liquidity from B2BX. ##### Currency conversion for values displayed in reports [#currency-conversion-for-values-displayed-in-reports] A new service has been introduced, tracking conversion rates and allowing you to convert the reported order size and trade total values into any currency. #### Improvements [#improvements-40] ##### Extended hedging parameters [#extended-hedging-parameters] The set of hedging parameters has been extended, enabling B2CONNECT clients to: * configure hedge parameters based on trader account identifiers * define a hedge ratio based on the trade side (buy or sell) * map a hedging instrument to another spot market symbol (for instance, you can hedge BTC/USDT trades with BTC/USDC orders) ##### Improved trade placement and execution analytics [#improved-trade-placement-and-execution-analytics] More data about each trade is now provided by B2TRADER, improving end-to-end analytics derived from hedging requests and responses. ##### Synthetics engine supports inversion [#synthetics-engine-supports-inversion] When designing synthetic instruments, components of synthetic cross pairs can now be inverted. #### Resolved issues [#resolved-issues-41] * Fixed an issue causing the hedging agent to drop connection in case of empty credentials having been specified for any API member in the configuration. * Fixed an issue preventing operation of some of the markets available to a pricing service. * Fixed an issue related to a price discovery gateway and resulting in improper application of market depth constraints to some of the trading instruments. *** ### February 18, 2021 [#february-18-2021] #### New features [#new-features-46] ##### Internal hedging on B2TRADER [#internal-hedging-on-b2trader] Introducing a new hedging agent, named Hedgehog, for redirecting trading orders placed on one platform to another venue. ##### Authorization based on JSON Web Token [#authorization-based-on-json-web-token] A new JWT-based service has been implemented, enabling authorization of clients connecting to B2CONNECT. Among other things, this makes it possible to identify transactions made on different B2TRADER platforms with a view of subsequent hedging. ##### Tracking of hedging orders [#tracking-of-hedging-orders] A new service has been implemented for gathering statistics and analytics necessary to properly monitor execution of hedging orders. #### Improvements [#improvements-41] ##### Timeout customization for individual instruments [#timeout-customization-for-individual-instruments] Custom timeouts can now be configured separately for each instrument. Using this option, you can reset the instrument's order book and switch to another price source, ensuring price quotation reliability for low-liquidity instruments. ##### Improved price feed [#improved-price-feed] The price feed reliability has been ensured, while the overall performance has improved. ##### New metrics for performance monitoring [#new-metrics-for-performance-monitoring] New metrics have been added for tracking the status and performance of B2CONNECT services to identify and prevent any possible failures. #### Resolved issues [#resolved-issues-42] * Fixed an issue preventing constructed quote (market) updates for some instruments by checking that a corresponding symbol is mapped. Learn about trading platforms, payment providers, and other third-party solutions integrated with B2CORE Learn about trading platforms, payment providers, and other third-party solutions integrated with B2CORE Gain a deeper view of the B2CORE Back Office user interface Gain a deeper view of the B2CORE Back Office user interface Step-by-step guides for common admin tasks and configurations in the B2CORE Back Office Step-by-step guides for common admin tasks and configurations in the B2CORE Back Office Deploy branded mobile apps for iOS and Android Deploy branded mobile apps for iOS and Android Identify and address common issues quickly and effectively with our guides Identify and address common issues quickly and effectively with our guides The B2CORE API is restricted and *not* publicly available. If you require the API documentation, please submit a support ticket with a clear and detailed description of your intended use cases. Providing a thorough explanation of how you plan to use the API will help us assess your needs accurately and minimize follow-up questions or delays. Explore the Back Office and learn how to launch your own partnership programs Explore the Back Office and learn how to launch your own partnership programs Discover IB Room and join a partner plan to begin attracting new clients while earning rewards Discover IB Room and join a partner plan to begin attracting new clients while earning rewards ## May 29, 2026 [#may-29-2026] ### New features [#new-features] #### CPA (Cost-Per-Acquisition) payment plans [#cpa-cost-per-acquisition-payment-plans] A new **Cost-Per-Acquisition (CPA)** payment model is now available. Brokers can reward partners when a referred client reaches a milestone, such as completing **registration**, passing **KYC verification**, or making a **minimum deposit**. *** #### Granular access permissions [#granular-access-permissions] Access to the **Introducing Brokers** section can now be controlled with greater precision. The broad **View** and **Edit** permissions have been split into per-section permissions, so Back Office roles can be granted access to exactly the sections they need — for example, viewing **Reports** without the ability to edit **Payment plans**. *** ### Improvements [#improvements] * A **date range** filter has been added to an individual partner's payment report, making it easier to review rewards over a specific period. *** ### Resolved issues [#resolved-issues] * Resolved an issue where exporting trades for a specific client could be very slow for partners with large trade histories. These exports now complete significantly faster. *** ## Past releases [#past-releases] ### April, 2026 [#april-2026] #### New features [#new-features-1] ##### Platform Spread and Platform Markup payment plans [#platform-spread-and-platform-markup-payment-plans] Two new payment plans are now available — **Platform Spread** and **Platform Markup**. They reward partners based on the actual spread and markup applied on the trading platform, captured automatically per symbol, rather than values estimated from a configured ratio. #### Improvements [#improvements-1] * The process that recalculates statistics and reports has been reworked for greater speed and reliability. Partner and program figures now refresh more consistently, even for brokers handling large data volumes. *** ### March, 2026 [#march-2026] #### New features [#new-features-2] ##### IB chain reassignment [#ib-chain-reassignment] New **“Reassign Users”** UI added. Brokers can now reassign an entire IB sub-branch from one partner to another in a single operation. This significantly simplifies the reassignment process, making it faster and less prone to errors than moving branches manually one by one. #### Improvements [#improvements-2] * A **Position lifetime** column has been added to the **Trades** table. *** ### February, 2026 [#february-2026] #### New features [#new-features-3] ##### TradeLocker platform integration [#tradelocker-platform-integration] The **TradeLocker** platform is now supported, enabling brokers to connect TradeLocker to their partnership program and reward partners on the same terms as other platforms. Support covers accounts, symbols, trading groups, trades, and payment plans, all manageable from the Back Office. #### Improvements [#improvements-3] * Added a new **IB Program Type** restriction. *** ### January, 2026 [#january-2026] #### New features [#new-features-4] ##### Asynchronous data exports [#asynchronous-data-exports] Exporting large data sets from the **Introducing Brokers** section — including trades, payments, accounts, and rewards — now runs asynchronously in the background. Brokers can continue working while an export is prepared and download the file once it's ready, rather than waiting on the page or risking a timeout. This makes it possible to export much larger data sets reliably. ### December, 2025 [#december-2025] #### New features [#new-features-5] ##### B2TRADER platform integration [#b2trader-platform-integration] The B2TRADER platform is now integrated with B2CORE IB, enabling brokers to connect B2TRADER to their IB setup and start rewarding partners on the same terms as other platforms. All payment plans are supported, so you can keep existing partner configurations and apply the same reward logic across supported environments. ##### Spread payment plan for cTrader [#spread-payment-plan-for-ctrader] The Spread payment plan is now available for the cTrader platform, allowing brokers to reward partners based on a percentage of the spread. This option aligns cTrader with the spread-based rewards model already available on other platforms, so you can keep a consistent approach to partner payouts. #### Improvements [#improvements-4] * Reports for deposits and withdrawals have been reimplemented to improve consistency and performance. The updated reporting logic is designed to present results in a clearer, more stable way. ### October, 2024 [#october-2024] #### New features [#new-features-6] ##### New Spread payment plan for MT5 platform [#new-spread-payment-plan-for-mt5-platform] The IB team is excited to introduce the much-anticipated Spread payment plan for the MetaTrader 5 platform. This innovative plan enables brokers to reward their partners based on a percentage of the spread, significantly expanding their referral reach across various markets. ##### Tier volume in USD [#tier-volume-in-usd] From now on, trading volume for tiers can be set not only in lots, but in USD as well, offering brokers increased flexibility in IB types configuration. #### Improvements [#improvements-5] * The **IB** column has been added to the **Clients** page. It shows the partner's name who referred the client and serves as a link to the partner details. * The **Payments** > **Methods** page has been removed from the Back Office due to the potential for unforeseen issues arising from modifying or deleting payment methods. For the same reason, it’s no longer possible to delete platforms through the Back Office. * When creating a new IB type, a default tier with empty parameters will no longer be automatically created, as previously done. #### Resolved issues [#resolved-issues-1] There have been no customer-facing issues reported in this release. *** ### August, 2024 [#august-2024] #### New features [#new-features-7] ##### Migration to PostgreSQL [#migration-to-postgresql] Our team is happy to announce that the migration from MongoDB to PostgreSQL has been successfully completed. Although this is mostly an internal technical enhancement, end-users will notice that the IB application now runs faster and more stable. ##### Min. position lifetime for cTrader [#min-position-lifetime-for-ctrader] For the cTrader platform, the **Min position lifetime** option has been added. The logic is exactly the same as for MT platforms: if a position was closed earlier than the Min position lifetime, it’s not taken into account in rewards calculations. The **Min position lifetime, sec.** field is now available in the cTrader platform preferences. #### Improvements [#improvements-6] * IDs of new partners are now in UUID format, not an index number, as it was before. This change eliminates the need for the **Encrypted** setting on the **Promo** > **Landings** > **Links** page. Existing IDs retain the numeric format, the **Encrypted** setting continues to work for them. All existing referral links remain working. * Information on clients’ accounts is now available on a separate **Accounts** tab in IB details. * Payment of rewards has become faster, thanks to technical improvements that allow for parallelization of the process. * Now running the system processes from the Back Office is disabled by default. It’s aimed at avoiding potential overloads of the database and application. Contact our technical support team if you need to restart a process. * To improve system performance, process logs are no longer stored in the database. As a result, the **Introducing brokers** > **Logs** section has been removed from the Back Office menu, and the **Logs** column has been removed from the **Introducing brokers** > **Processes** page. * To improve system performance, data storage limits have been implemented in the database: * Processes: 1 month * Deposits: 1 year * Withdrawals: 1 year * Trades: 1 year ### March 21, 2023 [#march-21-2023] #### New features [#new-features-8] ##### cTrader integration with IB [#ctrader-integration-with-ib] cTrader has been integrated with B2CORE IB, allowing you to connect the cTrader platform to your IB instance by navigating to **Introducing Brokers** > **Platforms** > **Platforms**. #### Resolved issues [#resolved-issues-2] * Fixed an issue due to which it was impossible to create a payment plan for all symbols in a trading group as it was only created for the selected symbol. * Fixed an issue due to which the trade opening time wasn’t updated according to the time zone set on the MetaTrade4 platform. * Fixed an issue due to which the position lifetime didn’t match the time difference between opening and closing a position. * Fixed an issue due to which the clients’ deposit and withdrawal operations weren’t displayed in the **Introducing Brokers** section. * Fixed an issue due to which duplicate records were displayed for deposit and withdrawal operations. ### April 12, 2022 [#april-12-2022] #### New features [#new-features-9] ##### Brand new IB section [#brand-new-ib-section] The IB section featuring new design and extended functionality for running partnership programs has been introduced in the B2CORE UI. For details, refer to the **For partners** section. ##### Max amount payment plan [#max-amount-payment-plan] A new **Max amount** payment plan has been introduced with this release. With this plan, you can pay partners a fixed amount for each lot traded by their clients, in the same way as with the Lot payment plan, but with the opportunity to set the maximum reward amount regardless of the number of levels and specify the exact amount which a partner receives at each level. For details, refer to [Payment plans](broker-guide/payment-plans#max-amount). ##### Data on deposits, withdrawals and trades [#data-on-deposits-withdrawals-and-trades] The **Deposits**, **Withdrawals**, and **Trades** tabs have been added to IB details in the B2CORE Back Office. The tabs display data on deposits, withdrawals, and trades of all clients of a selected partner. The export feature as well as filtering and sorting options are available. *** ### March 29, 2022 [#march-29-2022] #### New features [#new-features-10] ##### Deposits & withdrawals data [#deposits--withdrawals-data] The **Deposits** and **Withdrawals** sections have been added to **Platforms**. They display data on deposits/withdrawals of all clients on all trading accounts, indicating the date-time, account, amount, and currency as well as the unique identifier of the operation on the trading platform. *** ### March 15, 2022 [#march-15-2022] #### New features [#new-features-11] ##### Platform disabling [#platform-disabling] A new feature that enables you to turn off a trading platform without deleting it has been implemented. A new **Status** field (Enabled/Disabled) has been added to the platform details in **Platforms** > **Platforms**. ##### Account disabling [#account-disabling] A new feature that allows you to disable trading accounts without deleting them has been implemented. Disabled accounts are excluded from data sync and reward payment. A new **Enabled** field (Yes/No) has been added to the account details in **Platforms** > **Accounts**. ##### Filter by account type [#filter-by-account-type] This feature is aimed at closer integration with PAMM, MAM, and B2COPY. It helps to distinguish trading accounts from investment accounts. A new **Account type** field has been added to **Platforms** > **Accounts**, **Platforms** > **Trades** and **Payments** > **Rewards**. When opening a trading account, its type is obtained from B2CORE. When changing the type of an accounts group in B2CORE, the type is updated for all accounts. ##### Trading volume in USD [#trading-volume-in-usd] The **Trading volume, USD** column has been added to the **Introducing brokers** section and **Clients** tab in broker details. Filtering by non-zero/zero trading volume (Yes/No) is available. The **USD Trading volume** field has also been added to the **Payment report**, **Reports** tab in partner details and IB type details, to the trade details and payment details. ##### Deposits & withdrawals data [#deposits--withdrawals-data-1] The **Deposits** and **Withdrawals** tabs have been added to the client details in **Program** > **Clients** and account details in **Platforms** > **Accounts**. They display data on deposits/withdrawals, indicating the date-time, account, amount, and currency of the operation. ##### Contract size [#contract-size] A new **Contract size** field has been added to the symbol details, trade details and payment details. *** ### March 1, 2022 [#march-1-2022] #### New features [#new-features-12] ##### Partners and clients data import [#partners-and-clients-data-import] Customers who switch to B2CORE from other systems can now import data of their partners and clients into B2CORE IB. #### Improvements [#improvements-7] * Languages and themes of banners in selectors are now displayed in alphabetical order in the B2CORE UI. *** ### February 15, 2022 [#february-15-2022] #### New features [#new-features-13] ##### Deposits & withdrawals details [#deposits--withdrawals-details] Dates, currencies, amounts, and account numbers of deposits and withdrawals have been synchronized with MT4 and MT5. ##### Trading volume in USD [#trading-volume-in-usd-1] Trading volume in USD is now calculated for each trade. #### Improvements [#improvements-8] * The capability to sort banners by size has been added to the B2CORE UI. The banners are ordered by their width. If two banners have the same width, their length is taken into account. * The Client tag field has been added to the client’s details. Before, it was displayed only on the Clients tab in the partner’s details. *** ### February 1, 2022 [#february-1-2022] #### New features [#new-features-14] ##### PDO Driver v3 [#pdo-driver-v3] MetaTrader 4, MetaTrader5, and B2CORE Payment Method have migrated to the PDO driver v3. ##### B2CORE admin tags [#b2core-admin-tags] Access to the data of B2CORE Back Office sections can now be restricted using tags specified for the admin. See [B2CORE Back Office Guide](https://docs.b2core.b2broker.com/en/back-office-guide.html) for more details. ##### Languages priority [#languages-priority] The Priority property has been added to the Languages tab of **Promo** > **Landing** > **Links**. ##### Symbol group trades [#symbol-group-trades] The Trades tab has been added to the trading group details. On this tab, you can see and export a list of trades in the symbol group. #### Improvements [#improvements-9] * The **Base currency code** and **Quote currency code** fields have been added to **Platforms** > **Symbols**. Filtering and sorting by these fields are supported. *** ### January 18, 2022 [#january-18-2022] #### New features [#new-features-15] ##### WEBAPI v4 driver [#webapi-v4-driver] Sync of trading groups and trading symbols can now be run with the newly integrated WEBAPI v4 driver. ##### Drivers priority [#drivers-priority] The **Priority** property has been added to drivers, with prioritization logic similar to that of rate providers: first, the driver with the highest priority is taken, in case of failure — the next backup driver, and so on. If all drivers return a failure, the service reports that the function can't be performed. This property has been added to the **Drivers** tab in **Platforms** > **Platforms**. When creating a driver, it's automatically assigned the lowest priority; the priority can be changed when a driver is being edited. #### Improvements [#improvements-10] * A validation by platform ID has been added to the B2CORE Back Office, which prohibits connecting the same trading platform multiple times. ### December 21, 2021 [#december-21-2021] #### New features [#new-features-16] ##### Converter platform support [#converter-platform-support] Starting with this release, partners can receive rewards for the exchange operations performed by their clients. Currency pairs data is taken from the Currency pairs section of the B2CORE Back Office. Rewards are paid in the base currency of the partner's account, regardless of the currency pair of the exchange operation. The Commission payment plan is available. Rewards for exchange operations on demo accounts aren't processed. ##### Customizing link languages [#customizing-link-languages] For links in **Promo** > **Landings**, language customization has been added. You can configure separate URLs for each language of the landing page on the **Languages** tab, which has been added to the **Link** editing page. #### Improvements [#improvements-11] * From now on, when clients and partners are deleted from the B2CORE Back Office, their details such as name, email and account number are still displayed in the rewards history. * The **Platforms** section has been optimized to display information about various trading platforms: unused fields have been hidden to reduce the amount of displayed data and make it more accessible. * Sorting by the **Registrations**, **Clicks**, **Click Conversion Rate** fields has been added to the sections **Promo** > **Banners** > **Banners** and **Promo** > **Landing** > **Links**. *** ### December 7, 2021 [#december-7-2021] #### New features [#new-features-17] ##### Concurrency integration [#concurrency-integration] The concurrency framework has been implemented along with parallel processing of commands for synchronizing data with trading platforms, calculating rewards, crediting money to accounts and canceling rewards. The performance is expected to increase on average by 500%. ##### Support for B2CORE multi-currency accounts [#support-for-b2core-multi-currency-accounts] A new version of the **Payment method** for IB has been developed, which is compatible with multi-currency accounts of the B2CORE. It's important that this feature doesn't imply multi-currency payments: rewards are still paid in the original account currency or base currency. #### Improvements [#improvements-12] * The **Landing page** selector has been removed from banners create/edit pages. *** ### October 26, 2021 [#october-26-2021] #### New features [#new-features-18] ##### Export feature [#export-feature] The **Export** button is added to the number of sections and tabs and allows to download available data. For most sections, unless stated otherwise, the data is downloaded in CSV format, and retains all filters and a structure of the original table. The **Export** button is only visible to users with granted **Export** permissions. Explore the new feature here: * **Banners** — Introducing brokers > Program > Introducing Brokers > Edit > Banners tab. * **Links export** — Introducing brokers > Program > Introducing Brokers > Edit > Links tab. * **Currencies** — Introducing Brokers > Payments > Currencies section. * **Account transactions** — Introducing brokers > Payments > Accounts > Edit > Transactions tab. * **Transaction rewards** — Introducing brokers > Payments > Accounts > Edit > Transactions > Edit > Rewards tab. * **Logs** — Introducing brokers > Logs section. * **Countries** — Introducing brokers > Preferences > Location > Countries section. * **Accounts** — Introducing Brokers > Payments > Accounts section. The data in the Accounts section is downloaded in CSV format, and retains all filters and a structure of the original table except for the Balance field, which doesn't get exported. *** ### October 12, 2021 [#october-12-2021] #### New features [#new-features-19] ##### Transactions export [#transactions-export] List of transactions in the **Introducing Brokers** > **Payments** > **Transactions** section can now be exported via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. The export feature for this and other sections and tabs is only available to users with Export permissions. ##### Symbols export [#symbols-export] List of symbols can now be exported in the **Introducing Brokers** > **Platforms** > **Symbols** and **Introducing brokers** > **Programs** > **Types** > **Symbols** tab sections via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. ##### Trades export [#trades-export] Trades data for a particular account or a client can now be exported via the **Export** button located on **Trades** tab in **Introducing Brokers** > **Platforms** > **Accounts** and **Introducing Brokers** > **Clients** sections. The data is downloaded in CSV format, and retains all filters and table structure of the original table. ##### Accounts export [#accounts-export] List of all accounts or accounts belonging to a specific client can now be exported via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. To explore the feature navigate to **Introducing brokers** > **Platforms** > **Accounts** or **Introducing brokers** > **Clients** > **Account** tab. ##### Clicks statistics export [#clicks-statistics-export] Clicks data on the **Introducing brokers** > **Program** > **Introducing brokers** > **Clicks** tab can now be exported via the **Export** button that replaced the **Excel** and **CSV** buttons. The data is downloaded in CSV format, and retains all filters and table structure of the original table. #### Improvements [#improvements-13] * Newly generated QR codes in the **Promo** section are now displayed in a smaller size. *** ### September 28, 2021 [#september-28-2021] #### New features [#new-features-20] ##### Clients and trading groups export [#clients-and-trading-groups-export] List of Introducing brokers clients and **Platform** > **Groups** can now be exported to a CSV file via the new **Export** button that replaced the **Excel** and **CSV** buttons. This feature is only available to users that have **Export** permissions. All entries in an exported data set are sorted in the same way they were in the original table. #### Improvements [#improvements-14] * Users can now see when a particular program's tier or level was created and updated. * Date-time in all sections is now displayed in a single format: `Mon. DD, YYYY HH:MM:SS`, for example: Jan. 21, 2021 11:28:06. Month abbreviations consist of the first three characters of the month name. Months with four-character names, such as June, aren't abbreviated. * Paxios currency new alias is updated in currency details. #### Resolved issues [#resolved-issues-3] * Fixed the Client ID filter error in Preferences > Security > Authorizations, Preferences > Security > Authentications. *** ### September 14, 2021 [#september-14-2021] #### New features [#new-features-21] ##### Tiers and levels settings export [#tiers-and-levels-settings-export] Tiers and levels settings of an IB Program can now be exported to a CSV file via the new **Export** button (that replaced the **Excel** and **CSV** buttons). This feature is only available to users that have Export permissions. All entries in an exported data set are sorted in the same way they were in the original table. To explore the new feature, navigate to **Introducing Brokers** > **Program** > **Types** > **details** > **Tiers** and **Levels** tab. ##### Clicks records export [#clicks-records-export] Clicks records export is now available to users with **Export** permissions via the new **Export** button. All entries in an exported data set are sorted in the same way they were in the original table. To explore the new feature, navigate to **Promo** > **Analytics** > **Clicks**. *** ### August 31, 2021 [#august-31-2021] #### New features [#new-features-22] ##### Export and import permissions for Introducing brokers [#export-and-import-permissions-for-introducing-brokers] New **Export permission** and **Import permission** groups have been added to the **System** > **Groups** > **Introducing brokers** section of the B2CORE Back Office. ##### Geolocation update button [#geolocation-update-button] It has become possible to update your database to the latest version by clicking the **Update** button on the **Database** tab in the **Preferences** > **Location** > **Geolocation** section. ##### QR code generation [#qr-code-generation] It has become possible to generate QR codes for a partner link. A new feature is available in the **Program** > **Introducing brokers** section on the **Links** tab of the partner’s detailed information. #### Improvements [#improvements-15] * Only the languages, that are enabled in the **System** > **Localization** section, are now being displayed if you click the localization button next to the **Name** and **Description** fields of the **Preferences tab** in the **Introducing brokers** > **Program** > **Types** section. * You can now filter trading groups by multiple parameters at the same time. To do that, type in a list of groups separating them with space, comma, or colon in the filter field. * Symbol settings import support is available for macOS and Windows. *** ### August 03, 2021 [#august-03-2021] #### Improvements [#improvements-16] * The list of trading instruments is now synchronized and displayed in the **Symbols** section of the B2CORE Back Office. *** ### July 20, 2021 [#july-20-2021] #### New features [#new-features-23] ##### New Description field [#new-description-field] A new **Description** field has been added to IB types. In this field you can specify more information about the partnership program. ##### QR codes colors and icons [#qr-codes-colors-and-icons] Color and icon configurations for QR codes generation are added to the B2CORE Back Office. ##### Link to Release notes [#link-to-release-notes] You can navigate to Release notes from the **Updates** section of the B2CORE Back Office. #### Improvements [#improvements-17] * IB types, partners and clients are combined in the **Program** section in the B2CORE Back Office to optimize the convenience of B2CORE IB use. * To create a new IB type, specify only its name, description, type of registration, approval, and currency for rewarding partners. * When registering in the type with disabled approval option, the partner redirects immediately to the IB Room with no need to refresh the page. * The size of the distributive is now 2 times smaller. It speeds up the installation and updating processes, minimizes the amount of space needed on the hard drive and optimizes the hosting costs. * The troubleshooting is faster and more accurate, and the problems can be solved in a few seconds due to the improved diagnostics of the geographical location service. *** ### July 6, 2021 [#july-6-2021] #### Improvements [#improvements-18] * On the **Payment plans** tab of a symbol, you can now configure how much the broker pays for trades with this symbol for all IB types or edit these values in one place. This is especially useful when new symbols appear on trading platforms: on the list of symbols, sort and filter by date to select recently added symbols, then set up payment plans for all types at once on one page. * In the details of a partner, the number of levels for which the broker pays this partner is now explicitly displayed. When changing the IB type, the number of levels automatically changes according to the IB type settings. To set up individual conditions for a partner, the broker can select Custom Levels and specify the number of Master Levels for which the partner receives a reward. * The **encrypted links** configuration is moved from IB type settings to **Links** to make the setup more convenient. To enable or disable encryption for a link, open the edit link and set the value to Enabled or Disabled. * It's now possible to see not only levels for which the broker pays partners, but also those for which the broker doesn't pay. Partners still can see only paid levels which are configured in the IB type or individually for a partner. The Show hidden levels option can be enabled in the IB type, it's disabled by default. #### Resolved issues [#resolved-issues-4] * Fixed an issue with filtering by 0. You can now filter entries by any value including 0, for example, find crypto currency 0x. * In the partners app, fixed a filter that incorrectly displayed the list of rewards for the specified time period — not including the end date. For the end date, the time was set to 00:00, which caused incorrect selection and made it impossible to view the rewards of one day. The end date is now set to 23:59. *** ### June 22, 2021 [#june-22-2021] #### Improvements [#improvements-19] * Added currencies signs. * Special characters are now allowed in the Alias field for currency. * For payment plan, number of digits after the decimal separator now matches the currency settings (minor unit value). All non-significant zeros after the decimal separator are hidden for readability. * A new type of client request has been added to quickly filter requests related to Introducing brokers in the B2CORE Back Office. #### Resolved issues [#resolved-issues-5] * Fixed sorting and filters by country, latitude, longitude and position lifetime. *** ### June 8, 2021 [#june-8-2021] #### Improvements [#improvements-20] * Base and quote currencies were added to symbol details, trades details, and reward details. * Reward states naming was improved. The following states are now available: * **Done** — the reward was successfully credited to the partner’s account * **Pending** — the reward was calculated, but not yet credited to the partner’s account * **Canceled** — the reward was canceled and debited from the partner’s account * In the **trade details**, fields naming and order were reworked and improved. The data is now split into two tabs — **Trade data** and **Rewards**. * In the **reward details**, fields naming and order were reworked and improved. The data is now split into two blocks — **reward data** and **trade data**. * In the **symbol details**, fields naming and order were reworked and improved. The data is now split into two tabs — **Symbol** and **Payment plan**. * All top-ranked cryptocurrencies with a market capitalization of over $1B added to the default configuration to make the setup process easier. *** ### May 26, 2021 [#may-26-2021] #### New features [#new-features-24] ##### Min position lifetime [#min-position-lifetime] New parameter was added to MT4 and MT5 platforms in Introducing brokers. If a position was closed earlier than the min position lifetime, it's not taken into account in rewards calculating. ##### Symbols import [#symbols-import] It's now possible to import symbol settings, as a CSV file, in IB types. The **Import** button is available on the **Symbols** tab of the **IB type details** in the B2CORE Back Office. You can now export settings, change the formula, and then import the settings file in the same or in a different IB type. #### Improvements [#improvements-21] * Tier name was added. * Added MaxMind geolocation service diagnostics. * Added PostgreSQL reporting support for MT5. #### Resolved issues [#resolved-issues-6] * Fixed displayed number of digits after decimal separator for JYP. *** ### April 27, 2021 [#april-27-2021] #### New features [#new-features-25] ##### Reports [#reports] The Reports section has been added. At the moment, Acquisition report and Payment report are available with date range filters, grouping by hour, day, week, month, year. IB also provides performance indicators with actual value, absolute, and relative change compared to the previous period, as well as traffic analytics: group by country, geographic region, traffic source. ##### Symbols export [#symbols-export-1] It's now possible to export symbol settings to a CSV file. The Export button is available on the Symbols tab of IB type details. ##### New rates provider integrated [#new-rates-provider-integrated] A new rates provider has been integrated — **Open Exchange Rates**. #### Improvements [#improvements-22] * Reworked and optimized the naming of entities related to Symbols. * Another update in rates providers: B2BINPAY Rate Provider was removed. * Open positions on MetaTrader 4 added to trading session syncing. * Position ID added to trading session syncing. * Payment Level UX improved. * Added Diagnostic failure details. *** ### March 16, 2021 [#march-16-2021] #### New features [#new-features-26] ##### Lot size [#lot-size] A new **Lot size** field has been added for cent groups in the **Platforms** > **Groups** section. ##### Geolocation service [#geolocation-service] A new IP intelligence and online fraud prevention tool - **MaxMind** has been added to **Preferences** > **Location** > **Geolocation**. ##### Location data [#location-data] New fields: **Latitude**, **Longitude** and **Country** have been added to clicks statistics data in **Promo** > **Analytics**. ##### Country of residence [#country-of-residence] A new **Country of residence** field has been added to IB’s and client’s **Personal data** tabs. ##### Countries [#countries] A new **Countries** section has been added to **Preferences** > **Location**, displaying a list of countries divided into the following fields: Name, Alpha-2 code, Alpha-3 code and Numeric code, which conforms to the [ISO-3166 standard](https://www.iso.org/iso-3166-country-codes.html). ##### Geographic regions [#geographic-regions] A list of Geographic regions in M49 Standard Country or Area Codes for Statistical Use (United Nations GeoScheme) has been added. ##### Geospatial queries support [#geospatial-queries-support] Added Geospatial Queries support within GeoJSON objects: points and polygons. ##### Clicks and registrations stats [#clicks-and-registrations-stats] Statistics on banner clicks and the following registrations are added to **Promo** > **Analytics**. *** ### March 2, 2021 [#march-2-2021] #### New features [#new-features-27] ##### User-Agent info for link clicks [#user-agent-info-for-link-clicks] To **Promo** > **Analytics** > **Clicks**, a new field **User-Agent** has been added to display information about the software, such as browser and operating system, used by people who clicked on partners’ affiliate links. ##### Extended settings for Master levels [#extended-settings-for-master-levels] A new setting is added to Master partners that allows to override the number of Levels a Master partner is paid for. ##### HTTP version preference [#http-version-preference] Added HTTP Protocol Version (1.0, 1.1, 2.0) preference to deal with Expect: 100-continue header. *** ### February 16, 2021 [#february-16-2021] #### New features [#new-features-28] ##### Rewards data export [#rewards-data-export] Brokers can now export information about all rewards paid within a particular IB type or to a particular partner via the new **Export** button added to **Program** > **Introducing Brokers** / **Type** > **Edit** > **Rewards** tab. ##### Master partner settings [#master-partner-settings] A new feature that allows brokers to individually set the Number of Levels and Master Level Ratio for Master partners has been added to the Personal data tab of an IB. ##### Trading session sync by trading account number [#trading-session-sync-by-trading-account-number] A new **Trading account number** option has been added and allows a broker to synchronize the trading session for the selected trading account from the admin panel. ##### Banners [#banners] New **Banners**, **Themes**, **Languages** and **Sizes** subsections have been added to the Promo > Banners section, allowing the broker to create and manage the banners in an easier and more efficient way. ##### Prevented attacks log [#prevented-attacks-log] A new **Security** > **Attacks** section has been added that displays all prevented brute-force attacks. ##### System incidents log [#system-incidents-log] A new **Security** > **Incidents** section has been added that displays information about all security incidents registered in the systems such as: invalid client ID, invalid client secret or invalid access token. ##### Blacklist and Whitelist settings for an API access [#blacklist-and-whitelist-settings-for-an-api-access] New **Blacklist** and **Whitelist** sections have been added and allow admin users to manage which IPs get access to APIs. *** ### February 2, 2021 [#february-2-2021] #### New features [#new-features-29] ##### IB type change [#ib-type-change] A new option has been added that allows brokers to change partner’s type. ##### Rewards cancellation [#rewards-cancellation] A new option has been added that allows brokers to cancel trade rewards. ##### Tier rolling period [#tier-rolling-period] A new **Tier period** field has been added to the **Program** > **Types** > **Edit** > **Preferences** tab, allowing the broker to customize the duration of each tier in rolling days. ##### Trading groups archiving [#trading-groups-archiving] Brokers can now archive trading groups, accounts, and symbols that were removed from trading platforms. ##### Rewards per transaction [#rewards-per-transaction] A new **Rewards** tab, that contains a list of all rewards for a specific transaction, has been added to transaction details in **Payments** > **Transactions**. #### Improvements [#improvements-23] * The process of setting up landing links for partners is simplified. ### December 22, 2020 [#december-22-2020] #### New features [#new-features-30] ##### Encrypted tokens [#encrypted-tokens] Encrypted tokens option has been added to **Promo** > **Landings** > **Links**. ##### Tier calculation [#tier-calculation] Tiers can now be calculated by the number of active clients referred by a partner. ##### Position settings in payment plan [#position-settings-in-payment-plan] A new **Position** field has been added to the **Platforms** > **Symbols** > **Edit** > **Payment plan** tab and indicates whether the payments are made for a closed or an open position, or for both. ##### Bulk update of trading groups [#bulk-update-of-trading-groups] An option to bulk update the settings of the trading groups has been added. ##### 145 new filters [#145-new-filters] Data filtering across the entire **Introducing Brokers** section has been made even better with around 145 of new filters. *** ### December 8, 2020 [#december-8-2020] #### New features [#new-features-31] ##### Program rewards statistic [#program-rewards-statistic] Report on all rewards payable in a particular program type has been added to **Program** > **Types** > **Edit** > **Reports** tab. ##### Partner’s rewards statistic [#partners-rewards-statistic] Report on all rewards payable to a particular partner has been added to **Introducing brokers** > **Edit** > **Reports** tab. ##### Export of partners and clients data [#export-of-partners-and-clients-data] Data in the **Introducing brokers** > **Program** > **Introducing brokers** and **Introducing brokers** > **Program** > **Clients** sections can now be exported via the newly added export function in CSV or Excel formats. *** ### November 24, 2020 [#november-24-2020] #### New features [#new-features-32] ##### Payments and trades data export [#payments-and-trades-data-export] Data in the **Trades** and **Payments** sections can now be exported in CSV or Excel formats. ##### Restricted registration [#restricted-registration] A new **Restricted registration** type has been added to **Program** > **Types** > **Edit** > **Preferences** and allows a selective acquisition of new partners for a particular partnership program. *** ### November 17, 2020 [#november-17-2020] #### New features [#new-features-33] ##### New payment systems [#new-payment-systems] Three new rate providers have been integrated: **B2BINPAY**, **CoinMarketCap** and **European Central Bank**. ##### Custom rate provider [#custom-rate-provider] With the new **Custom rate provider** feature, brokers can now create their own crypto currency exchange rates. ##### Support for multi-language links [#support-for-multi-language-links] Multi-language links support has been added to the B2CORE URI. ##### System logs [#system-logs] The **Logs** section has been added and provides detailed information about all system events. ##### Network diagnostics [#network-diagnostics] Network diagnostic is added and allows to individually or in bulk test the connection of drivers in **Platforms**, **Rates** and **Geolocation** sections. ##### Unix socket support [#unix-socket-support] **Unix socket** support has been added to the **Payment method** connection settings. ##### AWS deployment support [#aws-deployment-support] Support for deployment on AWS has been added. *** ### September 22, 2020 [#september-22-2020] #### New features [#new-features-34] ##### Client details [#client-details] Brokers can now view full client details in the **Partner** > **Referral** section of the B2CORE UI. ##### Reward details [#reward-details] Brokers can now view full partner rewards details in the **Partner** > **Rewards** section of the B2CORE UI. #### Improvements [#improvements-24] * A majorly improved **Introducing brokers** section of the B2CORE Back Office that now displays all data available in the partnership program. * The **Client chain** field has been added to the client’s **Personal data** tab and indicates which partner referred a particular client to the broker. The chain data is presented in the following format: Partner's name → Client's name. Understand the basics and learn everything you need to start using the B2TRADER API Understand the basics and learn everything you need to start using the B2TRADER API Consult an in-depth reference describing REST API requests and responses Consult an in-depth reference describing REST API requests and responses Explore the supported WebSocket API methods and streams Explore the supported WebSocket API methods and streams Connect to the FIX 4.4 API for market data streaming and order execution Connect to the FIX 4.4 API for market data streaming and order execution ## June 2, 2026 [#june-2-2026] ### Improvements [#improvements] #### Trading API: Stop orders for closed markets [#trading-api-stop-orders-for-closed-markets] The **Trading API** now accepts **Stop** orders for markets that are closed according to their trading calendar. The order is stored and activates automatically when the market reopens, instead of being rejected at submission. #### Reports API: full account history [#reports-api-full-account-history] Trading reports can now be generated for the entire account history. The previous **92-day** limit has been removed, and an **All data** range is now available for report generation. #### Trading API: market asset identifiers [#trading-api-market-asset-identifiers] The `baseAssetId` and `quoteAssetId` fields have been added to the v6 `/markets` responses, allowing clients to resolve the base and quote assets of each market without additional lookups. #### Accurate unrealized PnL [#accurate-unrealized-pnl] Unrealized PnL returned by the API is now calculated using the correct order book side for each position direction, improving the accuracy of PnL values in position and margin responses. *** ### Resolved issues [#resolved-issues] * Resolved an issue where `WebhookAlert` order reason and position modifier values were returned as numeric codes instead of API enum strings in History API `/v2/orders` responses. ## April 9, 2026 [#april-9-2026] ### New features [#new-features] #### Trading credit in API responses [#trading-credit-in-api-responses] Broker-issued **trading credit** is now exposed through the API. The account margin data response and the real-time margin stream include the current credit amount in the Reference Asset (`creditInRAT`). Credit is included in the account equity and excluded from the withdrawable amount. *** ### Improvements [#improvements-1] #### Webhook Trading API: webhook URL in key listing [#webhook-trading-api-webhook-url-in-key-listing] The list webhook API keys response now includes the `webhookUrl` field, so the configured webhook endpoint can be retrieved for each key. ## March 16, 2026 [#march-16-2026] ### New features [#new-features-1] #### Webhook Trading API [#webhook-trading-api] A new **Webhook Trading API** has been added, enabling automated order creation via webhook alerts with API key authentication. **Key points:** * Create and manage webhook API keys for secure authentication * Receive trading alerts and create orders automatically * Idempotency supported via deduplication ID * Market type routing by symbol prefix (spot, CFD, perpetual) #### Public Account ID [#public-account-id] A new `publicAccountId` field has been added across all API endpoints, providing a human-readable account identifier as an alternative to internal UUIDs. **Affected APIs:** * Trading API — account-related responses and filters * Settings API — account configuration endpoints * History API — all REST endpoints and WebSocket streams * Reports API — report responses and filters #### Long-term trading data history [#long-term-trading-data-history] Date range restrictions have been removed from **Order History** and **Closed Positions** endpoints, allowing access to full trading history without time-based limitations. *** ### Improvements [#improvements-2] #### Transfer subtype field [#transfer-subtype-field] A new `subtype` field has been added to transfer responses in the History API to distinguish **Negative Balance Protection** transfers from manual ones. #### Rounded position prices [#rounded-position-prices] The `positionPriceInRAT` values are now properly rounded in closed position API responses according to the Reference Asset (RAT) scale. *** ### Resolved issues [#resolved-issues-1] * Resolved an issue where `/total-swaps` requests returned HTTP 504 timeout errors. ## March 11, 2026 [#march-11-2026] ### Added FIX API documentation [#added-fix-api-documentation] Added new FIX API section covering Market Data and Trading sessions via the FIX 4.4 protocol. ## March 11, 2026 [#march-11-2026-1] ### Initial version [#initial-version] ## March 2, 2026 [#march-2-2026] ### New features [#new-features-2] #### Trading Terminal AI assistant [#trading-terminal-ai-assistant] A new **AI assistant** has been added to the Trading Terminal, providing traders with an intelligent widget for market analysis and trading support. *** ### Improvements [#improvements-3] #### Public Account ID (preview) [#public-account-id-preview] The `publicAccountId` field has been added to account-related API responses as a preview, ahead of the full rollout across all endpoints. ## February 25, 2026 [#february-25-2026] ### New features [#new-features-3] #### Funding Rates API [#funding-rates-api] New API endpoints have been added for retrieving funding rate data synchronized from **B2CONNECT**, including funding rates, mark price, and funding interval for Perpetual Futures markets. **Key points:** * Funding rate values streamed in real time * Mark price used for position valuation when available from LP * Funding interval synchronized per market configuration * FIX API contract extended with funding data fields #### OHLC Candlestick API [#ohlc-candlestick-api] A new API endpoint has been added for retrieving OHLC (candlestick) data, supporting both **Spot** and **Perpetual Futures** markets. Minute-level candle data is now stored for up to 5 years. OHLC candle data streaming is also available via the WebSocket API using gRPC transport, providing real-time candlestick updates. #### Favorite markets [#favorite-markets] A new **Favorite markets** feature has been added, allowing traders to manage personalized market lists via the Trading API. #### Comment field for orders and positions [#comment-field-for-orders-and-positions] A new `comment` field has been added to order and position responses across REST, WebSocket, and History APIs. The comment can be set when placing an order and is propagated to the associated position and execution records. #### B2COPY Integration API [#b2copy-integration-api] New API endpoints have been added for **B2COPY** and IB (Introducing Broker) integrations, including special account types for copy trading. The `isCopyTradingAccount` field has been added to the `/api/v1/total-fundings` endpoint. *** ### Improvements [#improvements-4] #### FIX API: enhanced request throughput [#fix-api-enhanced-request-throughput] The FIX API trading request processing has been optimized to support up to 100 requests per second per connection. All `TimeInForce` types are now supported, including **GTD** (Good Till Date). #### Multilingual support [#multilingual-support] Trading API, Settings API, and Reports API endpoints now support multilingual content with full Unicode character support, enabling localized responses for configurable fields, report names, and templates. #### Stop Market order calculation [#stop-market-order-calculation] The **Value** and **Amount** calculation for **Stop Market** orders has been corrected for **Spot** markets. **Slippage Rate** has been removed from **CFD** and **Perpetual Futures** order calculations. #### Trading API: empty categories hidden [#trading-api-empty-categories-hidden] Empty market categories are now automatically excluded from Trading API responses, reducing unnecessary data in category listings. #### Balance API: zero balance for all assets [#balance-api-zero-balance-for-all-assets] Assets without prior balance operations now return a zero balance in API responses instead of being omitted. #### Cross-rate market configuration [#cross-rate-market-configuration] Markets used exclusively for cross-rate calculations can now be disabled for trading while remaining active for rate conversion. #### History API: extended contracts [#history-api-extended-contracts] Positions and Events API responses have been extended with additional fields. The `updatedAt` field is now available as a sorting and filtering parameter in History Server API endpoints. #### Settings API: market update endpoint [#settings-api-market-update-endpoint] The market update endpoint has been changed from `PATCH` to `PUT` semantics, requiring the full market object in the request body. #### Settings API: legacy endpoints removed [#settings-api-legacy-endpoints-removed] Legacy commission and routing rule endpoints have been removed following the tier commission update. Use the current endpoints as documented in the API reference. *** ### Resolved issues [#resolved-issues-2] * Resolved an issue where `takeProfitPrice` and `stopLossPrice` values were missing from the History Server `/v2/orders` endpoint responses. * Resolved an issue where bulk order cancellation returned a successful result for non-existing orders. * Resolved an issue where bulk order cancellation returned a successful result for orders that could not be cancelled. * Resolved incorrect error codes returned when `closePositionLotAmount` was set to `0`, a negative value, or an empty string. * Resolved an issue where the WebSocket Book stream continued sending prices with an outdated tick size after market parameter changes. * Resolved an issue where negative spreads in the **Market Data API** were not handled correctly. * Resolved an issue where orders could not be created when using the default 24/7 calendar. * Resolved an issue where the `/external-orders` API returned `null` for `rejectReason` although the Trading Server received a reason from the LP. Customize your Trading Terminal and configure settings Customize your Trading Terminal and configure settings Explore and manage all available trading widgets Explore and manage all available trading widgets Learn basic terms and values used across the platform Learn basic terms and values used across the platform Obtén una introducción rápida a B2TRANSLATE y familiarízate con los conceptos básicos y términos clave Obtén una introducción rápida a B2TRANSLATE y familiarízate con los conceptos básicos y términos clave Explora la interfaz de B2TRANSLATE y empieza a gestionar las traducciones de tu producto Explora la interfaz de B2TRANSLATE y empieza a gestionar las traducciones de tu producto ## 9 de julio de 2026 [#july-9-2026] ### Nuevas funciones [#new-features] #### Notificaciones [#notifications] **B2TRANSLATE** ahora incluye un centro de notificaciones. Una campana en la parte inferior de la barra lateral muestra una insignia con el número de notificaciones no leídas y abre un panel con tus notificaciones más recientes, como una traducción con IA finalizada, una exportación lista o una importación completada. Abre **Todas las notificaciones** para ver el historial completo y marca las notificaciones como leídas individualmente o todas a la vez. Las notificaciones también se pueden enviar fuera de la aplicación — por **correo electrónico**, **Slack** o **Telegram**. Un administrador del espacio de trabajo configura estos canales y elige quién recibe cada tipo de evento. *** #### Página de configuración de la cuenta [#account-settings-page] Un nuevo elemento **Cuenta** en la barra lateral abre una página dedicada de **Configuración** que reúne tus opciones personales en un solo lugar, con pestañas para **Tokens de API personales** y **Cambiar contraseña**. *** ### Mejoras [#improvements] #### Cambia tu propia contraseña [#change-your-own-password] Ahora puedes cambiar tu contraseña de inicio de sesión desde **Cuenta** > **Cambiar contraseña**, sin contactar con un administrador. *** #### Navegación rediseñada [#redesigned-navigation] Los controles para el idioma de la interfaz, las notificaciones y el cierre de sesión se han movido a la parte inferior de la barra lateral para un acceso más rápido. Los **Tokens de API personales** ahora se gestionan en la nueva página **Cuenta** > **Configuración**, que reemplaza el anterior menú de perfil. *** ### Problemas resueltos [#resolved-issues] No se han reportado problemas visibles para los clientes en esta versión. ## 29 de junio de 2026 [#june-29-2026] ### Mejoras [#improvements-1] #### Interfaz modernizada [#modernized-interface] La interfaz de **B2TRANSLATE** se ha reconstruido sobre una pila tecnológica moderna. Todo lo que utilizas permanece exactamente donde estaba — la actualización renueva la base de la interfaz y abre el camino para una entrega más rápida de nuevas funciones. ## 14 de mayo de 2026 [#may-14-2026] ### Mejoras [#improvements-2] #### Gestión de idiomas del tenant para el rol Customer [#tenant-language-management-for-the-customer-role] Los usuarios con el rol **Customer** ahora pueden gestionar la lista de idiomas de su tenant directamente desde el modal **Editar proyecto** — pueden añadir o eliminar idiomas sin solicitar ayuda a un administrador. Para evitar cambios accidentales, el campo de nombre del tenant ahora es de solo lectura para los usuarios **Customer**. ## 29 de abril de 2026 [#april-29-2026] ### Nuevas funciones [#new-features-1] #### Historial de versiones de traducciones [#translation-version-history] Cada clave de traducción ahora conserva un registro de auditoría de los últimos 10 valores de destino por idioma. Desde la vista de traducciones, abre el diálogo del historial para ver quién cambió una traducción, cuándo y cuál era el valor anterior — y restaura cualquier versión anterior con un solo clic. Esto protege las traducciones de ediciones accidentales y sobrescrituras de IA. *** ### Mejoras [#improvements-3] #### Tokens de API personales — vencimiento personalizado [#personal-api-tokens--custom-expiration] Al crear o rotar un **Token de API personal**, ahora puedes elegir la fecha de vencimiento exacta mediante un selector de calendario, hasta un año por adelantado. Esto reemplaza las opciones predefinidas fijas anteriores y se alinea con las políticas de seguridad empresariales que requieren una rotación periódica de credenciales. *** #### Nuevos idiomas: hebreo y mongol [#new-languages-hebrew-and-mongolian] El **hebreo** ahora está disponible con compatibilidad completa de derecha a izquierda (RTL), y se añade el **mongol** con las formas plurales correctas. Ambos idiomas están disponibles de inmediato en todos los proyectos y listos para la traducción con IA. ## 31 de marzo de 2026 [#march-31-2026] ### Nuevas funciones [#new-features-2] #### Tokens de API personales [#personal-api-tokens] **B2TRANSLATE** ahora admite **Tokens de API personales** — un nuevo método de autenticación para el acceso programático a la API. Los usuarios pueden generar tokens de larga duración para integrar **B2TRANSLATE** con herramientas externas y flujos de trabajo de automatización sin compartir sus credenciales de inicio de sesión. * Genera y gestiona tokens personales desde la página **Perfil** * Los tokens admiten todos los endpoints de la API V2 * Vencimiento de tokens configurable: 1, 6, 12 o 24 horas * Revoca tokens en cualquier momento por seguridad ## 17 de marzo de 2026 [#march-17-2026] ### Nuevas funciones [#new-features-3] #### Orden personalizado de idiomas [#custom-language-ordering] Ahora puedes personalizar el orden en el que aparecen los idiomas en todo tu proyecto. Abre el modal **Orden de idiomas** desde el **menú de tres puntos** en la página **Proyectos** o desde dentro de un proyecto y, a continuación, arrastra y suelta los idiomas en la secuencia que prefieras. El orden personalizado se aplica a los menús desplegables y las listas de idiomas de todo el proyecto. Para volver al orden alfabético predeterminado, haz clic en **Restablecer valores predeterminados** en el modal. ## 10 de febrero de 2026 [#february-10-2026] ### Nuevas funciones [#new-features-4] #### Modo compacto [#compact-mode] Se ha añadido un nuevo interruptor de **Modo compacto** al **menú de perfil**, que te permite reducir el espaciado y la densidad de todos los componentes de la interfaz de usuario. Esta opción proporciona una interfaz más condensada para quienes prefieren ver más contenido en su pantalla a la vez. *** ### Mejoras [#improvements-4] #### Compatibilidad con idiomas BCP 47 [#bcp-47-language-support] B2TRANSLATE ahora admite el **estándar BCP 47** para códigos de idioma, lo que proporciona una identificación de idiomas más precisa y un mejor manejo de variantes regionales. El sistema mantiene la compatibilidad con versiones anteriores de los códigos de formato heredados en el endpoint de traducciones, lo que garantiza que las integraciones existentes sigan funcionando sin problemas. Cada idioma de la tabla de idiomas ahora incluye una etiqueta descriptiva para mayor claridad. #### Búsqueda y filtros unificados [#unified-search-and-filters] Los campos de búsqueda y los controles de filtro se han estandarizado en todas las páginas del sistema, proporcionando una experiencia de usuario uniforme en toda la plataforma. Este enfoque unificado facilita localizar y filtrar contenido independientemente de la página en la que estés trabajando. *** ### Problemas resueltos [#resolved-issues-1] No se han reportado problemas visibles para los clientes en esta versión. ## 13 de enero de 2026 [#january-13-2026] ### Mejoras [#improvements-5] #### Actualización del modelo de IA [#ai-model-upgrade] B2TRANSLATE ha actualizado su motor de traducción con IA de Chat GPT 4.0 a **Chat GPT 5.2**, ofreciendo una mejor calidad de traducción y un rendimiento mejorado en todos los idiomas compatibles. #### Búsqueda mejorada con atajos de teclado [#enhanced-search-with-keyboard-shortcuts] La navegación se ha optimizado con la incorporación de atajos de teclado para acceder rápidamente a la búsqueda. Ahora los usuarios pueden pulsar **⌘/** (**Ctrl+/**) y **⌘K** (**Ctrl+K**) para abrir instantáneamente la función de búsqueda, lo que permite localizar claves y navegar por los proyectos más rápidamente. *** ### Problemas resueltos [#resolved-issues-2] No se han reportado problemas visibles para los clientes en esta versión. ## 12 de diciembre de 2025 [#december-12-2025] ### Mejoras [#improvements-6] #### Página de traducciones rediseñada [#redesigned-translations-page] La página **Traducciones** se ha reorganizado para ofrecer una vista más clara y una experiencia de edición más fluida: * Los identificadores de clave ahora ocupan filas independientes e incluyen insignias de categoría y marcas de tiempo de la última actualización. * Las columnas de traducción tienen etiquetas más claras y cada una muestra una insignia de idioma, para que siempre sepas qué idioma estás editando. * Las acciones como Traducir con IA, Restablecer a la traducción de origen y Guardar como vacío se agrupan bajo iconos intuitivos para facilitar su descubrimiento y uso. * Los controles globales — selector de idioma, campo de búsqueda, panel de filtros, importación de claves y carga de CSV — se colocan de forma coherente y son más fáciles de encontrar. *** ### Problemas resueltos [#resolved-issues-3] No se han reportado problemas visibles para los clientes en esta versión. ## 30 de septiembre de 2025 [#september-30-2025] ### Mejoras [#improvements-7] Esta versión introduce completas **traducciones predeterminadas en diversos idiomas** y proporciona a los administradores **capacidades automatizadas de traducción masiva mediante la integración con ChatGPT**, optimizando los flujos de trabajo de localización y acelerando la implementación global. ## 10 de septiembre de 2025 [#september-10-2025] ### Nuevas funciones [#new-features-5] #### Compatibilidad con pluralización [#pluralization-support] B2TRANSLATE ahora incluye una compatibilidad integral con la pluralización, lo que permite traducir con precisión **cadenas dependientes de la cantidad** en todos los idiomas. Esta función aborda la necesidad crítica de manejar cadenas que cambian según la cantidad, como "1 archivo" frente a "3 archivos", lo que es especialmente importante para los idiomas con **reglas de plural complejas**. El sistema detecta de forma inteligente cuándo se requiere pluralización según la combinación del formato de clave y el idioma de destino. Cuando se necesita pluralización, B2TRANSLATE genera automáticamente varios campos de entrada para cada clave de acuerdo con las reglas Unicode para las formas plurales. Cada forma incluye etiquetas contextuales que explican el uso adecuado, como "uno", "pocos" o "muchos", ayudando a los traductores a comprender cuándo debe aplicarse cada forma. Esta función es totalmente compatible con las traducciones mediante IA. Para obtener más detalles, consulta [Gestionar formas plurales](user-guide/manage-translations/handle-plural-forms). Todas las cadenas existentes sin pluralización siguen funcionando plenamente, lo que garantiza una compatibilidad total con los proyectos y flujos de trabajo actuales. *** ### Mejoras [#improvements-8] #### Jerarquía de traducciones más clara [#clearer-hierarchy-of-translations] La gestión de traducciones predeterminadas y personalizadas se ha vuelto más intuitiva. El **icono de candado** se ha eliminado y su funcionalidad se ha reemplazado por opciones más declarativas: **Restablecer al valor predeterminado** y **Guardar como vacío**. La información sobre herramientas del campo **Traducción** indica qué traducción predeterminada se utiliza actualmente en la WebUI. #### Visualización de claves y navegación de proyectos mejoradas [#enhanced-key-display-and-project-navigation] La interfaz del proyecto se ha rediseñado para proporcionar una mejor visibilidad y una organización más flexible de las claves de traducción. Anteriormente, las **Categorías** eran obligatorias y podían ocultar determinadas claves. Ahora, el sistema muestra de forma predeterminada la lista completa de todas las claves del proyecto, lo que proporciona a los traductores acceso inmediato a todo su ámbito de traducción. Las **Categorías** se han reposicionado como herramientas opcionales de **filtrado**, manteniendo su funcionalidad de asignación automática. Los traductores ahora pueden trabajar con cualquier clave independientemente de la asignación de su categoría. Esta mejora resulta especialmente beneficiosa para mantener la coherencia de las traducciones, ya que las claves similares ahora son visibles juntas en la lista unificada en lugar de estar potencialmente ocultas en diferentes secciones de categorías. Cuando sea necesario, los filtros de categoría se pueden seguir aplicando para reducir la lista de claves y realizar un trabajo específico. Además, las **páginas de traducción** se han reorganizado para ofrecer una estructura y visualización más claras: * Las traducciones predeterminadas se han agrupado en una sola columna. * Se han añadido iconos de idioma. * La información sobre cuándo se añadió o actualizó una clave se ha trasladado a los detalles de la clave. *** ### Problemas resueltos [#resolved-issues-4] No se han reportado problemas visibles para los clientes en esta versión. ## 4 de agosto de 2025 [#august-4-2025] ### Mejoras [#improvements-9] Esta versión está dedicada a mejoras internas que benefician a los administradores de nuestra plataforma. Aunque esta vez no hay nuevas funciones para ti, estas actualizaciones ayudan a garantizar que todo funcione sin problemas. ## 27 de junio de 2025 [#june-27-2025] ### Nuevas funciones [#new-features-6] #### Plataformas [#platforms] Esta versión introduce una nueva entidad de **plataforma**. Las plataformas son contenedores independientes dentro de los productos, como Web, iOS y Android. Cada plataforma tiene su propio conjunto de categorías, mientras que todas las plataformas dentro de un producto comparten el mismo conjunto de idiomas. Actualmente, esta función está habilitada exclusivamente para el tipo de producto `b2core`. Las plataformas son añadidas y configuradas por los administradores. Si un proyecto tiene una sola plataforma, la experiencia de usuario no cambia. Sin embargo, si se añaden varias plataformas, aparecen las pestañas correspondientes en la página **Categorías** y los usuarios deben seleccionar primero una plataforma antes de proporcionar traducciones. *** ### Mejoras [#improvements-10] * Mejora interna: se ha añadido un nuevo endpoint para actualizar una lista de idiomas en el modal de selección de idioma de la página **Traducciones**. *** ### Problemas resueltos [#resolved-issues-5] * Se corrigió un problema con la búsqueda de claves en las categorías. ## 20 de mayo de 2025 [#may-20-2025] ### Nuevas funciones [#new-features-7] #### Funcionalidad de descarga/carga de traducciones [#translation-downloadupload-functionality] Con esta versión, hemos implementado la funcionalidad de descarga/carga de traducciones. Ahora puedes exportar las traducciones seleccionadas de un idioma específico en formato CSV para editarlas externamente. Una vez editado, puedes volver a cargar el CSV en B2TRANSLATE, lo que permite actualizaciones masivas y una gestión de las traducciones más rápidas y sencillas. Además, el sistema mostrará mensajes que indican si un intento de exportación/importación se realizó correctamente o falló. Para obtener más detalles, consulta [el artículo](user-guide/manage-translations/download-and-upload-translations). #### Botones de copia para claves [#copy-buttons-for-keys] Para mejorar aún más la interacción del usuario, hemos añadido un botón de copia junto a cada nombre de clave en la página Traducciones. Esta actualización te permite copiar sin esfuerzo el nombre completo de la clave al portapapeles. El botón de copia incluye una confirmación visual para indicar que la acción de copia se realizó correctamente. Esta funcionalidad es compatible con los principales navegadores web, incluidos Chrome, Safari y Firefox, lo que garantiza una experiencia de usuario uniforme. #### Cursor RTL/LTR para los idiomas árabe, farsi y urdu [#rtlltr-cursor-for-arabic-farsi-and-urdu-languages] El manejo de traducciones se ha mejorado con compatibilidad para idiomas de derecha a izquierda (RTL) y de izquierda a derecha (LTR) en el editor. La dirección del texto ahora se ajusta automáticamente según el idioma seleccionado, optimizando la visualización del texto sin distorsiones. El movimiento del cursor y la selección de texto son fluidos en todas las direcciones, y estas mejoras se incorporan sin problemas sin afectar las capacidades existentes del editor. Esta actualización garantiza una gestión de texto sólida para todos los idiomas compatibles, proporcionándote una experiencia de traducción intuitiva. *** ### Problemas resueltos [#resolved-issues-6] * Se corrigió un problema por el que los iconos no se mostraban correctamente en el navegador Firefox. ## 26 de marzo de 2025 [#march-26-2025] ### Nuevas funciones [#new-features-8] #### Traducciones con IA mediante ChatGPT [#ai-translations-with-chatgpt] Con esta versión, hemos actualizado nuestra integración con ChatGPT para habilitar las traducciones mediante IA para los usuarios. Ten en cuenta que esta función no está habilitada de forma predeterminada y debe solicitarse explícitamente para cada proyecto. El uso de IA para traducciones es limitado: para cada proyecto que utiliza la integración con ChatGPT, se proporciona un crédito mensual y los costes de traducción con IA se deducen automáticamente de este saldo asignado. Las traducciones con IA están disponibles para todos los idiomas del proyecto, excepto el idioma predeterminado (normalmente inglés). Esta función traduce la **Traducción predeterminada (EN)** al idioma seleccionado y la añade al campo **Traducción**. Para obtener más detalles, consulta [Traducir con IA](user-guide/manage-translations/translate-with-ai). #### Nuevo rol Customer [#new-customer-role] Se ha añadido el nuevo rol de usuario, **Customer**. Es similar al anterior rol **Editor**, pero amplía la funcionalidad al proporcionar acceso a traducciones con IA. Todos los usuarios que tienen asignado actualmente el rol **Editor** pasarán sin problemas al rol **Customer**, independientemente de si la función de traducción con IA está activada en sus respectivos proyectos. *** ### Mejoras [#improvements-11] * Para mejorar la experiencia de usuario y la eficiencia de navegación, se han añadido **campos de búsqueda** a todos los menús desplegables. Esto permite a los usuarios localizar rápidamente elementos específicos dentro de listas extensas, optimizando la interacción general. * Se ha añadido el icono de **avatar de usuario** a la barra superior. Al pasar el cursor sobre él, puedes acceder a tu información de correo electrónico y rol junto con el botón **Cerrar sesión**. El selector de idioma se ha eliminado de la barra superior, pero sigue disponible en el menú principal. *** ### Problemas resueltos [#resolved-issues-7] No se han reportado problemas visibles para los clientes en esta versión. ## 11 de febrero de 2025 [#february-11-2025] ### Nuevas funciones [#new-features-9] #### Seguridad mejorada [#enhanced-security] Con esta versión, la autenticación de dos factores (2FA) se ha actualizado para requerir aplicaciones de autenticación, como **Google Authenticator** como opción principal y **Twilio Authy** como alternativa para usuarios de regiones donde Google Authenticator podría no estar disponible. Al iniciar sesión en B2TRANSLATE, ahora se te pedirá que configures una aplicación de autenticación para generar códigos 2FA siguiendo las instrucciones en pantalla. Por motivos de seguridad, se te solicitará introducir un código de la aplicación cada vez que inicies sesión después de proporcionar tus credenciales. *** ### Problemas resueltos [#resolved-issues-8] No se han reportado problemas visibles para los clientes en esta versión. *** ## Versiones anteriores [#past-releases] ### Diciembre de 2024 🎄 [#december-2024-] #### Nuevas funciones [#new-features-10] ##### Mejoras de la interfaz de usuario [#ui-enhancements] La última versión incorpora varias mejoras en la interfaz de usuario para ofrecer una experiencia más intuitiva y optimizada. * En la página **Proyectos**, los tipos de proyecto ahora están organizados en pestañas, lo que proporciona una vista más compacta y estructurada. * El menú principal ahora se puede contraer para mayor comodidad. * Se han realizado las siguientes actualizaciones en la página **Traducciones**: * Para la edición de traducciones, el campo de entrada ahora admite autocompletado y resaltado de sintaxis para una mayor facilidad de uso. * El menú **Enviar traducciones** se ha reposicionado encima de la tabla para un acceso más rápido. * El botón **Filtros** se ha hecho más visible. * La paginación se coloca de forma coherente en la parte inferior de la página. * En la página **Inicio de sesión**, la contraseña ahora está oculta de forma predeterminada. Además, se ha añadido un enlace de soporte para los usuarios que experimentan problemas al iniciar sesión. #### Mejoras [#improvements-12] * Se han realizado mejoras en el backend mediante la refactorización de determinados endpoints, dando el primer paso hacia un mejor rendimiento y mayor velocidad. * Se han implementado los componentes del sistema de diseño, con el objetivo de mejorar la reutilización, mantenibilidad y escalabilidad del código. * Se introducen nuevos servicios para recopilar métricas, que permiten una mejor supervisión y análisis. #### Problemas resueltos [#resolved-issues-9] No se han reportado problemas visibles para los clientes en esta versión. *** ### Octubre de 2024 [#october-2024] #### Nuevas funciones [#new-features-11] ##### WebUI traducida a 20 idiomas [#webui-translated-into-20-languages] Nos complace anunciar que la WebUI de B2TRANSLATE ya está disponible en 20 idiomas. Además del inglés, ahora puedes usar B2TRANSLATE en francés, alemán, italiano, polaco, portugués, ruso, español, ucraniano, turco, árabe, indonesio, hindi, urdu, farsi, japonés, coreano, vietnamita y chino (tanto tradicional como simplificado). Esta actualización mejora la experiencia de usuario para nuestra comunidad global. Hemos añadido una opción de selección de idioma al menú principal, lo que hace que su uso sea fácil e intuitivo. #### Mejoras [#improvements-13] Yandex.Metrika junto con Webvisor se ha integrado en B2TRANSLATE para que podamos profundizar en los análisis e identificar mejor los problemas de usabilidad. ### Septiembre de 2024 (Parte 2) [#september-2024-part-2] #### Nuevas funciones [#new-features-12] ##### IA integrada para mejorar la traducción [#ai-integrated-for-enhanced-translation] Con esta versión, **DeepL** y **ChatGPT** se han integrado como servicios de traducción. Las actualizaciones principales incluyen: * **Flujos de trabajo de IA**: Asigna flujos de trabajo de IA específicos a proyectos completos o idiomas individuales. * **Permisos de traductor**: Configura usuarios de IA con permisos de traductor. * **Funcionalidad de glosario** (solo para DeepL): Añade términos a un glosario para mantener una traducción coherente de los términos definidos. * Y muchas más. Estas integraciones de servicios de IA mejorarán la eficiencia, la calidad y la velocidad de entrega de las traducciones. *** ### Septiembre de 2024 [#september-2024] #### Nuevas funciones [#new-features-13] ##### Selector de idioma para modificar traducciones más rápidamente [#language-selector-for-faster-translation-modifying] Tras las recientes actualizaciones para simplificar la gestión de traducciones, se ha añadido un selector de idioma a la página **Traducciones**. Anteriormente, los usuarios tenían que volver constantemente a la lista de idiomas al modificar traducciones en varios idiomas. Ahora, al seleccionar una categoría accedes directamente a la lista de claves. Puedes cambiar de idioma mediante el nuevo selector de esta página, lo que reduce significativamente el tiempo necesario para establecer las traducciones. #### Mejoras [#improvements-14] * Al añadir un nuevo proyecto, ahora se carga más rápido y muestra un precargador dinámico. * La columna **Claves nuevas** se ha eliminado de la lista de proyectos. Este cambio mejora la experiencia de usuario al reducir elementos innecesarios en la página **Proyectos** y mejorar el rendimiento mediante el almacenamiento en caché de los datos de las claves. * El motor de búsqueda ahora conserva los resultados de búsqueda al recargar la página, proporcionando una experiencia de usuario coherente. * Al cambiar a la página siguiente de resultados de búsqueda, la página se desplaza automáticamente hacia la parte superior, proporcionando una experiencia más intuitiva. *** ### Junio de 2024 [#june-2024] #### Mejoras [#improvements-15] ##### Gestión simplificada de traducciones predeterminadas [#simplified-default-translations-management] Se ha añadido una nueva columna que muestra las traducciones predeterminadas en el idioma seleccionado, distinto del inglés, a la página **Traducciones**. Anteriormente, solo se proporcionaban traducciones en inglés, pero ahora los usuarios pueden editar fácilmente las traducciones de los 22 idiomas compatibles. ##### Nuevos tipos de proyecto [#new-project-types] Se han añadido dos nuevos tipos de proyecto: `pbsr-v2` y `pbsr-admin`. *** ### Abril de 2024 [#april-2024] Nos complace anunciar el lanzamiento de **B2TRANSLATE versión 2**, repleto de nuevas funciones y mejoras para optimizar tu flujo de trabajo de traducción. Estas son las novedades de esta versión: #### Nuevas funciones [#new-features-14] ##### Claves pretraducidas del proyecto Template [#pre-translated-keys-from-the-template-project] Las traducciones precargadas para las claves del proyecto Template ya están disponibles para todos los idiomas compatibles en los proyectos existentes. Para los proyectos nuevos, los usuarios ahora tienen la flexibilidad de elegir entre precargar todos los idiomas o seleccionar los idiomas específicos que necesitan. ##### Traducciones editables por el usuario [#user-editable-translations] Hemos introducido la posibilidad de que los usuarios modifiquen las claves pretraducidas en sus respectivos idiomas. Esta flexibilidad permite a los usuarios ajustar las traducciones según los requisitos o preferencias específicos de sus proyectos. ##### Formulario de comentarios [#feedback-form] Ahora hay disponible un nuevo formulario de comentarios en el menú principal. Esto permite a los usuarios enviar comentarios directamente desde la plataforma B2TRANSLATE, lo que permite al equipo de B2TRANSLATE recopilar información, abordar problemas y mejorar continuamente la experiencia de usuario. :tada: **¡Feliz traducción!** To properly connect Binance to B2CONNECT Hub using an Ed25519 key, you need to: ### Get a list of trusted IP addresses from B2CONNECT [#get-a-list-of-trusted-ip-addresses-from-b2connect] Contact your Account Manager to obtain a list of B2CONNECT IP addresses. You'll need them later, to properly configure a list of trusted IPs. ### Create Ed25519 keys [#create-ed25519-keys] 1. Download and install the Asymmetric Keys Generator. 2. Generate private and public Ed25519 keys. Follow the **How to create an Ed25519 key pair?** section of the [Binance instruction](https://www.binance.com/en/support/faq/detail/6b9a63f1e3384cf48a2eedb82767a69a) for step-by-step guidance. ### Register your Ed25519 keys on Binance [#register-your-ed25519-keys-on-binance] Follow the **How to register my Ed25519 key on Binance?** section of the [Binance instruction](https://www.binance.com/en/support/faq/detail/6b9a63f1e3384cf48a2eedb82767a69a) for step-by-step guidance. ### Edit restrictions [#edit-restrictions] Add previously acquired B2CONNECT IP addresses as trusted IPs to the allowlist of newly registered API keys. ### Configure the connection on the B2CONNECT side [#configure-the-connection-on-the-b2connect-side] Contact your Account Manager for guidance on integrating the keys into the B2CONNECT settings. When creating API keys on the Kraken platform, on the **Add API key** page, set the **Nonce window** field to `10000000000` (one followed by ten zeros). To avoid typos when entering this value, you can copy it above and paste it into the form as follows: Generate Kraken API keys This is required for proper handling of time variables (nanoseconds in this case). The following table provides an overview of liquidity provider platforms that are supported by B2CONNECT and outlines the B2CONNECT adaptor connectivity capabilities when connecting to a corresponding platform. [^1]: 20 for WSS B2CONNECT supports connectivity to multiple FIX-enabled trading platforms across various asset classes. Access or distribute liquidity with the [B2CONNECT FIX API](../fix-api). The table below outlines the supported platforms and their integration capabilities. Orders with the `GTC` Time in force are currently supported as `IOC`. 1, 2 Supported under the External Maker Specification. This guide outlines the steps you need to follow to properly prepare your Android app for Google review, approval, and successful publication on Google Play. These instructions provide general guidance as of the date of publication. You are responsible for completing all required fields in your Google Play Console. Providing incorrect or incomplete information may result in warnings, restrictions, or suspension of your developer account by Google. ## Step 1. Compliance checkpoint [#step-1-compliance-checkpoint] Before creating and submitting your Android app for Google review, determine the countries where you want your app to be available and ensure you hold all required licenses and legal permissions for each country. This process may take time, so obtain the necessary licenses in advance to confirm that you are authorized to offer all configured trading instruments in your B2CORE instance and provide this information during the Google Play review. To learn more about Google Play policies for financial services and cryptocurrency, refer to their **Policy center** and specifically to the following: * [Blockchain-based content](https://support.google.com/googleplay/android-developer/answer/6112435?hl=en\&ref_topic=3450769\&sjid=9872213577143447449-NA) * [Understanding Google Play’s cryptocurrency exchanges and software wallets policy](https://support.google.com/googleplay/android-developer/answer/6112435?hl=en\&ref_topic=3450769\&sjid=9872213577143447449-NA) ## Step 2. Prepare required app information [#step-2-prepare-required-app-information] Prepare the following information that will be required when creating your app in the Google Play Console and submitting it for Google review. ### Support and legal information [#support-and-legal-information] Provide the following details: * **Privacy policy URL** — a link to a publicly accessible web page that explains how your app collects, uses, stores, and protects user data. For Android apps published on Google Play, the privacy policy is mandatory, even if your app collects minimal data. The page must: * Be publicly available. * Be hosted on your website or another reliable public domain. * Clearly describe what data is collected, how it is used, and how users can request account deletion or data removal. * **Demo account** — a demo account that Google can use during the review process (for details, refer to [Step 3. Create and configure a demo account in the B2CORE UI](#step-3-create-and-configure-a-demo-account-in-the-b2core-ui)). * **Contact email for Google** — an email address used for official communication from Google. This email will be linked to your developer account in Google Play Console. * **Public developer contact details** — contact information visible to users on Google Play, which must include: * Support email * Contact phone number * Website URL ### Store Listing information [#store-listing-information] Prepare the following store listing details for your app: * App name * Short description (up to 80 characters) * Full description (up to 4,000 characters) * Graphical assets (can be provided by the B2CORE team). To request them, contact [android-support@b2broker.com](mailto:android-support@b2broker.com) or your account manager. ## Step 3. Create and configure a demo account in the B2CORE UI [#step-3-create-and-configure-a-demo-account-in-the-b2core-ui] To be able to review all of your app functionality, the Google reviewers need access to a demo account. For this reason, you need to configure a demo account as follows: * Verify your demo account by going through all the steps of your configured KYC procedure. * In the Back Office, examine and enable all the B2CORE UI modules that will be featured in your mobile app. Each module must be properly configured to ensure that your mobile app will not be rejected by Google during review. * If your app enables its users to transfer or exchange assets, you also need to make sure that there are enough funds on your demo account, so that the Google reviewers are able to check the transfer and exchange functionality as well. ## Step 4. Register in the Google Play Console as an Organization [#step-4-register-in-the-google-play-console-as-an-organization] To publish your Android app, you need to register in the [Play Console](https://play.google.com/console/signup) as an organization and create a developer account. Further on, with each Android release, the B2CORE team will provide new app bundles (`.abb` files) for you and you will be responsible for managing the regular maintenance of the app. For more information, refer to [Get started with Play Console](https://support.google.com/googleplay/android-developer/answer/6112435?hl=en\&ref_topic=3450769\&sjid=9872213577143447449-NA). ## Step 5. Create a new app in the Play Console [#step-5-create-a-new-app-in-the-play-console] To create an app: Sign in to the [Google Play Console](https://play.google.com/console/). Select your developer account. To start a new app, click **Create app**. Fill in the app details: * In the **App name** field, enter the name for your app. This is how your app will appear on Google Play. * In the **Default language** dropdown, select **English**. * In the **App or game** section, select **App**. * In the **Free or paid** section, select **Free**. App details Add an email address that Google Play users can use to contact you about your app. In the **Declarations** section, accept app developer declarations and confirm policy compliance. Declarations Click **Create app**. After creating the app, you'll be redirected to the Dashboard to continue the app setup. If you’re not automatically redirected, you can access it anytime from the **Home** menu in the Play Console by clicking your app. ## Step 6. Set up your app on the Play Console Dashboard [#step-6-set-up-your-app-on-the-play-console-dashboard] At this step, provide all the information requested by Google Play about your app. To provide information about the app: In the Play Console, select your app. Click each link in the **Set up your app** section of the Dashboard and fill in the required details. Play Console Dashboard ### Set privacy policy [#set-privacy-policy] * In this section, enter a link to your privacy policy that explains how you handle sensitive user and device data. * Click **Save** to return to the Dashboard. ### App access [#app-access] * In this section, select the option **All or some functionality in my app is restricted**. App access ### Ads [#ads] * In this section, select the option **No, my app does not contain ads**. * Click **Save** to return to the Dashboard. ### Content ratings [#content-ratings] * In the **Category** section, fill in the following: * **Email address** — specify your contact email. * Select the option **All other app types**. * Enable the checkbox to **Agree with the Terms of Use**. Content ratings — Category * In the **Questionnaire** section, select **No** for all the following: * Downloaded app * User content sharing * Online content * Promotion or sale of age-restricted products or activities * Miscellaneous Content ratings — Questionnaire * In the **Summary** section, verify the displayed summary and click **Save**. ### Target audience and content [#target-audience-and-content] * In the **Target audience**, select the checkbox **18 and over**. Selecting this checkbox will redirect you to the **Summary** section. * You can fill in the previous sections, such as **App details**, **Ads**, and **Store presence** if necessary. Target audience and content * In the **Summary** section, verify the displayed summary and click **Save**. ### Data safety [#data-safety] * Read the **Overview** section. * In the **Data collection and security** section, select the options as shown below and provide a URL to the section in your B2CORE UI where an account can be deleted. The URL must follow this format: `https://{your-Front-Office-URL}/profile-info` Make sure to replace `{your-Front-Office-URL}` with the domain of your B2CORE UI. Ensure that your B2CORE instance supports account deletion. This is a Google Play requirement and may be checked at any time by Google Play or by users. Failure to comply may result in suspension of your developer account in Google Play Console or a permanent ban. Data collection and security * In the **Data types** section, fill in the following: * **Location**: B2CORE does not collect this type of data. * **Personal info**: Specify the data that clients are required to provide during registration in your B2CORE instance. This usually includes (but isn't limited to) "Name", "Email address", "Phone number", or other. * **Financial info**: B2CORE does not collect this type of data. * **Health and fitness**: B2CORE does not collect this type of data. * **Messages**: B2CORE does not collect this type of data. * **Photos and videos**: B2CORE does not collect this type of data. * **Audio files**: B2CORE does not collect this type of data. * **Files and docs**: B2CORE does not collect this type of data. * **Calendar**: B2CORE does not collect this type of data. * **Contacts**: B2CORE does not collect this type of data. * **App activity**: B2CORE collects "App interactions" data. * **Web browsing**: B2CORE does not collect this type of data. * **App info and performance**: B2CORE collects "Crash logs" and "Diagnostics" data. * **Device or other IDs**: B2CORE does not collect this type of data. * In the **Data usage and handling** section, you will see a set of questionnaires related to the data collected by the app. * Complete the questionnaires in the **Personal info** section as shown in the example below: Personal info * Complete the questionnaires in the **App info and performance** and **App activity** sections as shown in the example below: Cash logs * In the **Preview** section, verify the displayed summary and click **Save**. ### Government apps [#government-apps] * Select **No** for the displayed option. Government apps * Click **Save** to return to the Dashboard. ### Financial features [#financial-features] * Select the checkboxes for the features that your app provides. Make sure to select only the features that your app actually provides. These may differ from the example shown below. Financial features * Click **Save** to return to the Dashboard. ### Health apps [#health-apps] * Select the option **My app does not have any health features** and click **Next**. * The **Documentation** section doesn't require any additional actions. * Click **Save** to return to the Dashboard. ### Store settings [#store-settings] * In the **App category** section, fill in the following: * In the **App or Game** option, select **App**. * In the **Category**, select **Finance**. * In the **Store Listing contact details** section, enter the email address, phone number, and website that will be visible to users on Google Play. * (Optional) In the **External marketing** section, you can select the checkbox for **Advertise my app outside Google Play**. Store settings ### Set up your store listing [#set-up-your-store-listing] * In the **Listing assets** section, fill in the following: * **App name** * **Short description** * **Full description** Listing assets * In the **Graphics** section, attach graphic assets provided by the B2CORE team. Click **Add assets** and upload each graphic asset one by one, and select the appropriate category for each asset. * After you’ve added all provided assets, click **Save**. ### Send app information for review [#send-app-information-for-review] All the information that you've provided about your app must be sent for Google review. Click **Publishing overview** in the main menu and then click **Send X changes for review**. ## Step 7. Upload the app bundle (.aab) for a production release [#step-7-upload-the-app-bundle-aab-for-a-production-release] To upload your app bundle and configure a production release in the Google Play Console: In the Play Console, select your app. Navigate to **Test and release** > **Production**. Open to the **Countries/regions** tab and select the countries where you want your app to be available, according to the licenses that allow you to distribute the app and provide services. Click **Create new release** in the upper-right corner. Create new release Click **Change signing key**. Google Play uses app signing based on cryptographic keys to verify the authenticity and security of your app. Proper configuration of **Google Play App Signing** is critical to ensure a secure deployment and, where applicable, a smooth transition for existing `.apk` users to the Google Play version. Change signing key Download the encryption public key. * Select the option **Upload a new app signing key from Java keystore**. * Click **Download encryption public key** (Option 1). Download encryption public key Send the downloaded key in the `.pem` file format to the B2CORE team either by emailing [android-support@b2broker.com](mailto:android-support@b2broker.com) or through your account manager. The B2CORE team will generate an app signing key, encrypt it using the provided public encryption key, and return it to you together with your application in `.aab` format, signed with the same key. This process may take some time. After receiving the **signed app bundle** (`.aab`) and the **app signing key archive** (`.zip`), return to **Test and release** > **Production** > **Releases** > **Untitled release**. On the **Releases** page, click **Edit release**. Upload the received **app signing key** (`.zip`). * Select the option **Upload the app signing key (.zip)**. * Click **Upload generated ZIP** (Option 4). Upload app signing key Upload the received **app bundle** (`.aab`). * Drag and drop the provided `.aab` file. Don't modify it. * After uploading, make sure no errors are shown. You may see the following warning message. This is expected and can be safely ignored. **Warning** `This App Bundle contains native code, and you've not uploaded debug symbols. We recommend that you upload a symbol file to make your crashes and ANRs easier to analyze and debug.` Fill in the **Release details**. * The **Release name** field is filled in automatically after uploading the `.aab` file. * In the **Release notes** field, paste the release notes provided by the B2CORE team or leave the field empty. Release details Click **Next**. Review the release information and make sure there are no errors highlighted in red. You may see the following warning message. This is expected and can be safely ignored. **Warning** `This App Bundle contains native code, and you've not uploaded debug symbols. We recommend that you upload a symbol file to make your crashes and ANRs easier to analyze and debug.` Start the rollout. * Click **Save** to submit the app for Google review. * You will be redirected to **Publishing overview**, where you must click **Send X changes for review**. App review and rollout may take several days. The review will result either in successful publication on Google Play or in a rejection with the reason provided. If you experience issues resolving a rejection, contact the B2CORE team at [android-support@b2broker.com](mailto:android-support@b2broker.com). ## Step 8. After approval: app monitoring [#step-8-after-approval-app-monitoring] After your app is approved, regularly check its availability and policy compliance to avoid enforcement actions. Failure to perform these checks may result in policy violations, app removal, suspension, or permanent termination of your developer account in the Play Console, often without prior notice. ### Check app availability [#check-app-availability] Confirm that the app is visible on Google Play in all allowed countries and that installation and basic functionality work as expected. ### Check compliance [#check-compliance] Keep your app listing, privacy policy, and country distribution aligned with your current licenses and legal permissions. ### Monitor policy status [#monitor-policy-status] Periodically check if any actions required in **Monitor and improve** > **Policy and programmes** > **Policy status**. ### Review app content [#review-app-content] Periodically check if any actions required in **Monitor and improve** > **Policy and programmes** > **App content**. Ensure that all app information is up to date. ### Monitor Google Play communications [#monitor-google-play-communications] Regularly check the contact email linked to your Google Play Console and respond promptly to any notifications. Google Play policies and deployment processes change regularly. If you notice any missing or outdated information in this instruction, contact us at [android-support@b2broker.com](mailto:android-support@b2broker.com) for assistance or clarification. In addition to creating standalone desktop solutions, B2CORE offers you assistance with publishing branded mobile applications for iOS and Android. To publish your app on the App Store, you need to consider a variety of policy issues to ensure strict compliance with all of the guidelines and regulations, which may be a non-trivial task. In this document, you can find detailed instructions on how to properly prepare your iOS app to speed up its approval and successful publication on the App Store. All trademarks, logos, and brand names referenced in this document are the property of their respective owners. All company, product, and service names used in this document are for identification purposes only. The use of these names, trademarks, and brands does not imply endorsement. ## Step 1. Prepare the licenses for trading crypto [#step-1-prepare-the-licenses-for-trading-crypto] First of all, before proceeding with building and submitting your iOS app for review, you need to determine in which countries this app will be available and take special care to obtain all the licenses required to provide your services in these countries. This procedure might be time-consuming, and you must obtain all the required licenses in advance to make sure that you are allowed to trade all the instruments that are configured in your B2CORE solution, and then hand over these licenses to the App Store review team. App Store Connect — Country and Region Availability The license requirements are mandatory, and the permissions to servicing trading operations must be granted by Apple. To learn more about the licensing requirements which apply specifically to cryptocurrencies, refer to [App Store Review Guidelines - 3.1.5 Cryptocurrencies](https://developer.apple.com/app-store/review/guidelines/#cryptocurrencies). ## Step 2. Create and configure a demo account in the B2CORE UI [#step-2-create-and-configure-a-demo-account-in-the-b2core-ui] To be able to review all of your app’s functionality, the App Store review team needs access to a demo account. For this reason, you need to configure a demo account as follows: * Verify your demo account by going through all the steps of your KYC procedure. * In the Back Office, examine and enable all the B2CORE UI modules that will be featured in your mobile app. Each module must be properly configured to ensure that your mobile app will not be rejected by the App Store during review. * If your app enables its users to transfer or exchange assets, you also need to make sure that there are enough funds on your demo account, so that the App Store review team is able to check the transfer and exchange functionality as well. ## Step 3. Enroll in the Apple Developer Program as an Organization [#step-3-enroll-in-the-apple-developer-program-as-an-organization] To be able to open an Apple Developer account, you must provide the following information: * your D-U-N-S number * your Legal Entity Status * your Legal Binding Authority * your website address To publish your iOS app, you need to enroll in the Apple Developer Program as an organization, and then share access to your developer account with the B2CORE team by sending your access credentials to our company email: [ios-admin@b2broker.com](mailto:ios-admin@b2broker.com). Further on, with each iOS release, the B2CORE team will upload a new app build for you, and you will be responsible for managing the regular maintenance of the app (for details, refer to [Step 8. Update your app with new releases](deploying-your-ios-app#step-8.-update-your-app-with-new-releases)). For general information, refer to [Before You Enroll — Apple Developer Program](https://developer.apple.com/programs/enroll/). For step-by-step instructions, refer to [Enrolling in the Apple Developer Program as an organization](https://developer.apple.com/support/app-account/). ## Step 4. Grant access and admin permissions to the B2CORE team [#step-4-grant-access-and-admin-permissions-to-the-b2core-team] For the B2CORE team to be able to configure your app at App Store Connect, you need to grant the following admin permissions to our team. To do this, proceed as follows: 1. At App Store Connect, switch to **Users and Access**. 2. On the **People** tab, add a new person with the B2BROKER company email: [ios-admin@b2broker.com](mailto:ios-admin@b2broker.com). 3. In the **Roles** section, enable the **Admin** role. 4. In the **Additional Resources** section, make sure that all the permissions are enabled as follows: * **Access to Reports** * **Access to Certificates, Identifiers & Profiles**, which includes: * **Access to Cloud Managed Distribution Certificate** * **Access to Cloud Managed Developer ID Certificate** * **Create Apps** App Store Connect — Users and Access ## Step 5. Provide all necessary information to your account manager [#step-5-provide-all-necessary-information-to-your-account-manager] Contact your account manager at B2BROKER to inform the development team that they must prepare your app for publishing. You need to provide the following information to your account manager, which will be passed over to the development team: * The information about licenses, along with the credentials to your B2CORE Demo Account. * The URL of your B2CORE UI instance. * The legal name of your company, as well as your Apple Developer account name (typically, it coincides with the company name specified when creating a Developer Account as an Organization). Your Apple Developer account must be registered under your organization as an LLC; personal accounts aren't permitted. * The email of the Developer Account’s owner. In addition, you need to provide the following information: * The name of your iOS app (it must not exceed 16 characters). * The primary language of the app (English is set by default) and a list of supported languages for localization purposes. * Your preferences regarding the app icon (such as the required color scheme). * Your preferences regarding the app screenshots displayed on the product page on the App Store. After your account manager contacts the B2CORE development team, they prepare your app and upload the build to the App Store. The app then appears at the App Store Connect, with its version indicated and its status set to **Prepare for Submission**. App Store Connect — Prepare for Submission ## Step 6. Specify the pricing, availability and privacy options [#step-6-specify-the-pricing-availability-and-privacy-options] At App Store Connect, configure the following app settings: * **Pricing and Availability** In this section, you need to specify the following options: * We recommend that you offer your mobile app for free and set the **Price Schedule** field to `US$0.00 (Free)`. * Set the **Tax Category** field to `App Store software`. * In the **Availability** section, select the countries in which your app will be available, according to the licenses obtained by you. * For the other options in this section, you can leave the default settings. App Store Connect — Pricing and Availability * **App Privacy** In this section, specify the **Privacy Policy URL**, which must be the same one that you specified for your B2CORE UI instance. App Store Connect — App Privacy Next, click **Get Started** and complete the quiz to specify your app’s data collection policy: * **Contact Info** Your app will collect the user’s email address by default. Depending on your app’s configuration, it may also collect other data, such as the username, phone number, user address and other contact information. Please make sure that you indicate the collected data according to the options that are specified in your B2CORE Back Office. * **Identifiers** The **User ID** data is collected by default. The **Device ID** data is not collected. * **User Content** The user photos and videos are collected. * **Other User Content** On this page, select `App Functionality` and `Other Purposes`. The following example illustrates the data collection settings that must be specified by a client publishing a standard iOS app: * **Data Linked to You**: * **Contact Info** * **User Content** * **Identifiers** * **Data Not Linked to You**: * **Diagnostics** * **Contact Info**: * **Name** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Email Address** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` For the question **Do you or your third-party partners use email addresses for tracking purposes?**, select the answer `No, we do not use email addresses for tracking purposes.` * **Phone Number** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Physical Address** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Other User Contact info** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **User Content**: * **Photos or Videos** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Other User Content** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Identifiers**: * **User ID** * `Used for Other Purposes` and `App Functionality` * `Linked to the user's identity` * **Diagnostics**: * **Crash Data** * `App Functionality` To learn more, refer to [App privacy details on the App Store](https://developer.apple.com/app-store/app-privacy-details/). ## Step 7. Specify a demo account from which the Apple Review team will log in [#step-7-specify-a-demo-account-from-which-the-apple-review-team-will-log-in] Once your app is uploaded to App Store Connect, you need to specify a demo account that you have created at [Step 2](deploying-your-ios-app#step-2.-create-and-configure-a-demo-account-in-the-b2core-ui). The App Store review team will use this account to log in and review your app. To specify a demo account, proceed as follows: 1. At App Store Connect, switch to **App Review** > **Prepare for Submission**. In the **App Review Information** section, enable the **Sign-in Required** checkbox, and then specify the login and password for your demo account. 2. In the **Contact Information** section, specify the contact information of a person responsible for configuring App Store Connect. The App Store review team will contact this person to inform them whether the app is accepted or rejected, or whether any additional information is needed. 3. In the **Notes** field, add the links to your licenses and attach their scans (if available). The licenses must be provided for each country that you selected in the **Availability** section at [Step 6](deploying-your-ios-app#step-6.-specify-the-pricing-availability-and-privacy-options). The links must be added below the information on how to locate the delete account button. 4. In the **Notes** field, add the following text: > The app doesn't rely on any third-party API, including any API that might put our users' data at risk. The app uses only a custom REST API to communicate with the backend with the purpose of providing financial services. This API is developed and owned by our company. Therefore, we guarantee correct functioning of the API. App Store Connect — App Review Information 5. Specify the following fields: * **Promotional Text** * **Description** * **What’s New in This Version** * **Keywords** * **Support URL** * **Marketing URL** * **Version** * **Copyright** App Store Connect — Additional Information To learn more about these fields, refer to [Platform version information](https://developer.apple.com/help/app-store-connect/reference/platform-version-information). 6. Click **Add for Review** to submit your app for review to the App Store team. When your app is reviewed and approved, its status will be changed to `Ready for Distribution`. ## Step 8. Update your app with new releases [#step-8-update-your-app-with-new-releases] With each iOS release, the B2CORE team will upload a new app build for you in App Store Connect. You need to create a new app version, add the new build to the version, and submit it for review to the App Store team. ### Create a new app version [#create-a-new-app-version] When the B2CORE team notifies you of a new iOS release, create a new app version in Apple Store Connect, add a new build to it, and submit it for review to the App Store team. You can create a new version only if the current app version has the `Ready for Distribution` status. If for some reason, your current app version wasn’t submitted for review and has an editable status, [update the current version with a new build](deploying-your-ios-app#update-the-current-app-version-with-a-new-build) instead of creating a new version. For a full list of possible statuses, refer to [App and submission statuses](https://developer.apple.com/help/app-store-connect/reference/app-and-submission-statuses). 1. From Apps, select your app. 2. On the **Distribution** tab, click the **add** button (+) displayed in the **iOS App** section of the sidebar. 3. In the **New Version** popup, the new version number (for example, `1.24.0`) and click **Create**. You can view a complete list of app versions and builds uploaded for them on the **TestFlight** tab. 4. Review the new version metadata. When you create a new version, the metadata from the current version is transferred to the new version automatically. For a description of the version properties, refer to [Platform version information](https://developer.apple.com/help/app-store-connect/reference/platform-version-information). 5. Click **Save** in the upper-right page corner. 6. Add the latest app build to the newly created version: * Scroll down to the **Build** section, and then click the **add** button (+) displayed next to the section. * In the **Add Build** popup, select the build with the *highest* version number and click **Done**. App Store Connect — Add a build App Store Connect — Select the latest build 7. Add the release notes to the **What’s new in this version** field. The RNs for each iOS release can be found [here](../release-notes/release-notes-mobile). The RNs may not be fully applicable to your app, so you may need to edit them to include only the updates relevant to your app’s functionality. For example, if the RNs mention updates for a trading platform that your app doesn’t support, omit that item from the **What’s new in this version** field. 8. Click **Save** in the upper-right page corner. 9. Click **Add for Review** to submit the new app version for review to the App Store team. When your new app version is reviewed and approved, its status will be changed to `Ready for Distribution`. ### Update the current app version with a new build [#update-the-current-app-version-with-a-new-build] If your current app version doesn’t have the `Ready for Distribution` status in App Store Connect, you can’t create a new app version when a new iOS release is available. Instead, select a new build for the current version and submit it for review to the App Store team. 1. From Apps, select your app. 2. In the sidebar, select the app version for which you want to upload a new build. You can do it only for the version that has one of the editable statuses. For a full list of possible statuses, refer to [App and submission statuses](https://developer.apple.com/help/app-store-connect/reference/app-and-submission-statuses). 3. Scroll down to the **Build** section. 4. To remove the previous build, hover over the build and click the **delete** button (-) that appears on the right side of the build row. App Store Connect — Remove a build 5. Add the latest build: * Click the **add** button (+) displayed next to the **Build** section. * In the **Add Build** popup, select the build with the *highest* version number and click **Done**. App Store Connect — Add a build 6. In the **Version** field, update the version number to match the new iOS release. For example, change `1.23.0` to `1.24.0`. 7. Add the release notes to the **What’s new in this version** field. The RNs for each iOS release can be found [here](../release-notes/release-notes-mobile). The RNs may not be fully applicable to your app, so you may need to edit them to include only the updates relevant to your app’s functionality. For example, if the RNs mention updates for a trading platform that your app doesn’t support, omit that item from the **What’s new in this version** field. 8. Click **Save** in the upper-right page corner. 9. Click **Add for Review** to submit the new app version for review to the App Store team. When your new app version is reviewed and approved, its status will be changed to `Ready for Distribution`. The **Dashboard** page provides a quick overview of key financial metrics over the selected period, helping you analyze the overall performance and financial activity. ## Access to the Dashboard [#access-to-the-dashboard] The **Dashboard** is available to users who are assigned the permission `Access to Finance Dashboard` under the **Statistics** category and opens after signing in to the Back Office. For other Back Office users, the **Dashboard** is hidden, and they are redirected to the **Clients** > **General** page after signing in. For more details about user groups and permissions, refer to [How to add a user group and grant permissions](../how-to-articles/manage-system-settings/how-to-add-a-user-group-and-grant-permissions). By default, the financial metrics are displayed for the current day. You can select one of the following periods: * Today * Yesterday * Last 7 days * Last 30 days * Last 90 days * This month * Last month * Custom range You can also filter the displayed metrics by using the following filters located above the metric blocks: * **Client Type** * **Jurisdiction** * **Country** * **Manager** * **Client Tags** To reset the selected filters and period, click the **Reset** button. Dashboard The following information is displayed on the Dashboard: ## Deposits [#deposits] * **Total deposit** — the total amount of deposits, in USD, for the selected period. The metric is calculated against the **Final amount (USD)** column in [Finance > Deposits](finance/deposits). Only the completed deposits in the final status are included. * **Average deposit** — the average deposit amount for the selected period, which is calculated as: `Total deposit / Number of deposits` ## Withdrawals [#withdrawals] * **Total withdrawal** — the total amount of withdrawal, in USD, over the selected period. The metric is calculated against the **Final amount (USD)** column in [Finance > Payouts](finance/payouts). Only the completed withdrawals in the final status are included. * **Average withdrawal** — the average deposit amount for the selected period, which is calculated as: `Total withdrawal / Number of withdrawals` ## Summary [#summary] * **Net deposit** — the net amount of deposits, in USD, for the selected period, calculated as: `Total deposit − Total withdrawal` B2CORE is a fully-featured CRM providing a complete set of customization and access control options. ## Authorization and permissions [#authorization-and-permissions] B2CORE provides a full set of personalization and access control options. User access is controlled by applying different user group permissions. After your B2CORE profile is activated, you can sign in to the Back Office using the credentials provided by your administrator. Upon encountering an error when trying to sign in, check the login and password, along with the input language and Caps Lock state. If everything appears to be correct, contact your administrator to clarify the status of your profile. ## General interface options [#general-interface-options] The Back Office user interface is uniform across all pages, ensuring consistent look and feel and featuring a common set of basic options. This document describes how to shape the data displayed on a page, how to filter and sort this data, and then export it to a file. ### The top bar options [#the-top-bar-options] At the top of a typical Back Office page, you can find a top bar with the following elements: * the **☰ main menu** button Click it to expand or collapse the main menu. * **Backend version** The currently deployed version of your Back Office. * **Server time** The fixed system time in GMT+0. It can't be changed and ensures accuracy and consistency across all transactions, logs, and activities within B2CORE. * the **Open personal area** link Click the link to access the **Sign In** page of the B2CORE UI associated with your Back Office. * the **Bell** icon Click it to see pending client requests. The number of new requests is displayed on a counter badge. * the **Warning** icon Click it to view platform connectivity alerts, such as notifications about trading platforms that are currently unreachable. The number of active alerts is displayed on a counter badge. * the panel displaying the email address from your user profile In the upper-right page corner, click the profile button displaying your email address to access the **Log out** button and **Enable 2FA** option (or **Disable 2FA**, if two-factor authentication is already enabled). Two-factor authentication (2FA) is obligatory and must be enabled for all user profiles in the Back Office. To enable 2FA through time-based one-time passwords (TOTP) for your user profile, click **Enable 2FA**, and then click **OK** in the popup. Next, follow the displayed instructions to set up 2FA with Google Authenticator. After enabling 2FA, sign in to the Back Office by entering your login and password, followed by a code from the Google Authenticator app. ### Common options [#common-options] The following buttons can be found on most Back Office pages. * Above a table: * create button — the **Create** button used to add a new entry * export button — the **Export** button used to export table data to a CSV file * the **Select** and **Select All** buttons used to select multiple table entries and perform bulk actions on them (where available) * In a table header: * search button — the **Search** button used to apply custom filters * reset button — the **Reset** button used to reset custom filters * In a table row: * edit button — the **Edit** button used to drill down the data and access details * delete button — the **Delete** button used to delete an entry Page elements may serve as hyperlinks that can be clicked to drill down to details. Access to this data is maintained based on the permissions assigned to a particular user group. ### Filtering and sorting [#filtering-and-sorting] Throughout the Back Office, the data is typically organized in tables. Table data can be sorted and filtered. The columns by which you can sort data are marked with up and down arrows displayed in column headers (no arrows are displayed when sorting isn't available). You can click these arrows to sort data in ascending or descending order, by a single column at a time Along with a sorting order, you can specify multiple criteria for filtering column data. When filtering is available, the appropriate input fields are displayed in column headers. The inputs vary depending on a data format, such as text, number, date, time, or list. To facilitate filtering by date, two fields for the start and end dates may be displayed so that you can define a time period. To enable or disable filters, click the **Search** and **Reset** buttons. ### Pagination [#pagination] You can display table data across multiple pages and specify how many records to display on a page (the total number of records found is displayed next to the page size selector). To navigate between pages, click **Prev** or **Next**, or click a specific page number. ### Visibility [#visibility] To choose the data fields to include in a table, click **Column Visibility** and mark or unmark the columns you want to display or hide. Once applied, the new visibility settings become effective for all Back Office users (visibility of specific fields depends on the access permissions granted to particular users). ### Data export [#data-export] The data on most of the Back Office pages can be exported to a CSV or XLSX file. To do this, click the **Export** button, choose a file format, and then select whether to download the data to your computer or deliver it to an email address from your profile. The data in a resulting file matches both the current visibility settings and the applied sorting and filtering criteria. Use this menu to access to the functionalities of the **Introducing brokers (IB)** product, designed to support referral programs that help expand your client base. Through these programs, you can encourage your existing clients to become partners and attract new traders to your brokerage. In return, partners earn a percentage of the revenue generated from the trading activity of their referrals, fostering a mutually beneficial partnership. If you don't have this menu in your Back Office, contact your account manager to learn more about obtaining and implementing the IB program. For more information about IB, refer to the [product documentation](https://docs.ib.b2core.b2broker.com/). On this page, you can view feedback left by clients after tickets that they reported to HelpDesk in the B2CORE UI are marked as resolved. The following information is provided about each ticket for which feedback is submitted: **Id** The identifier of a ticket that was reported by a client to HelpDesk. Click a ticket identifier to view ticket details in SupportPal or Zendesk. *** **Email** The client email address. *** **Comment** The feedback text. *** **Date** The data and time when feedback was submitted. *** **Status** The client satisfaction rating. Possible values: * Extra Positive * Positive * Neutral * Negative * Extra Negative *** **Subject** The subject of a ticket. If a ticket is reopened and then resolved again, a client can submit updated feedback that is added as a new record to the **Ticket feedback** page. The following is a list of communication platforms supported in B2CORE: **See also** [How to manage communication platforms](../how-to-articles/manage-communication-platforms) The following is a list of KYC providers integrated with B2CORE. When configuring [verification levels](../back-office-guide/verification/levels), you can use the built-in KYC provider or rely on the supported third-party KYC providers to verify the identity of your clients. Listed below are the names of document groups that can be verified by each KYC provider, along with details explaining how the verification procedure is conducted with each provider in the B2CORE UI. **See also** [How to manage verification options](../how-to-articles/manage-verification-options) ## CRM & automation systems [#crm--automation-systems] The following CRM platforms can be connected to B2CORE to streamline sales processes and automate client management workflows: ## Customer support platforms [#customer-support-platforms] The following are platforms integrated with B2CORE, offering solutions for managing client tickets and enhancing support interactions: ## Data analytics tools [#data-analytics-tools] The following are platforms integrated with B2CORE for collecting and analyzing client action data in the B2CORE UI and mobile apps, providing insights into user behavior, engagement, and business results: The following is a list of payment systems integrated in B2CORE. These systems can be used to configure [deposit](../back-office-guide/system/deposit-system#deposit-methods) and [withdrawal methods](../back-office-guide/system/payout-system#payout-methods) that will be available to your clients in the B2CORE UI. For each payment system, it is indicated whether it supports deposits, withdrawals, or both. Additionally, you can find icons that can be displayed as icons of deposit and withdrawal methods in the B2CORE UI. The icons are used to easily identify a method that uses a specific payment system among the other methods. ## Payment System Service (PSS) [#payment-system-service-pss] For each payment system, it's also specified whether it supports connection to B2CORE through the new **Payment System Service (PSS)**. This service enhances integration by offering a single connection to support a range of deposit and withdrawal options offered by the system. This is especially effective when the system operates as a cashier system, consolidating and processing payments from multiple sources into one unified system (for details, refer to [How to add deposit and withdrawal methods through PSS](../how-to-articles/manage-payment-methods/how-to-add-deposit-and-withdrawal-methods-through-pss)). If you intend to connect payment systems through PSS, please contact your account manager first to confirm the availability of PSS-supported connections on your B2CORE instance. ## Support for PSS methods in mobile apps [#support-for-pss-methods-in-mobile-apps] PSS payment methods, including both deposits and withdrawals, are now supported in the iOS and Android mobile apps starting from version 1.30.0 (iOS) and 2.8.0 (Android). **See also** [How to manage payment methods](../how-to-articles/manage-payment-methods) The following are the trading platforms and hubs supported in B2CORE, with details on their specific features and functionalities. ## Trading platforms [#trading-platforms] ## Trading hubs [#trading-hubs] ### December, 2025 [#december-2025] **v1.31 (iOS)** This version includes: * **Savings now available in the app** Clients can now access **Savings** directly in the app. They can view and subscribe to savings programs, create wallets in the required currencies, monitor active programs, add funds, track interest payments, and, if needed, withdraw funds before the plan's end date.
Savings hub Subscribe to a savings program Installments
* **Streamlined Total balance calculation** The total balance shown on the app **Dashboard** now reflects the combined balances of all wallets and trading accounts and fully matches the total displayed in the B2CORE UI. * **New Activity section** A new **Activity** section has been added to the app, providing a complete history of all transactions in one place. Clients can now easily track their deposits, withdrawals, transfers, and exchanges, as well as search for transactions in specific currencies. The **Activity** section is accessible from the tab bar, as well as from the **Home** and **Wallets** screens. Use **pull to refresh** to quickly update the section and view the most up-to-date information.
Activity Currency search
* **Support for copy trading, PAMM, and MAM** Copy trading, PAMM, and MAM functionality from **B2COPY** is now supported in the app via a web view. This enables clients to access these services directly from the app, through the **Services** section. * **Blockchain explorer link for withdrawal tracking** Clients can now track withdrawal transactions on the blockchain directly from the app. For crypto wallets, a link to `https://www.blockchain.com/explorer` is available for withdrawals in Bitcoin, Ethereum, and Bitcoin Cash, making transaction monitoring easier and improving transparency. * **Static payment details for deposits via B2BINPAY V3 and Coinsbuy V3** The app now supports **static payment details** for deposits via **B2BINPAY** and **Coinsbuy** when connected through **API V3**. With static payment details, clients can generate one or more blockchain-specific deposit addresses directly in the app. These addresses are saved for future use and can be reused for subsequent deposits. In addition, the crypto deposit flow via **B2BINPAY V3** and **Coinsbuy V3** has been improved with clear **fee breakdowns** and **indicative amount** displays, providing better transparency and a smoother deposit experience. * **Full B2TRANSLATE integration for payment forms** Payment forms in the app are now fully integrated with [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly Weblate). Labels for all components of dynamic forms for PSS-connected deposit and withdrawal methods, as well as validation error messages, can now be customized and translated into multiple languages via B2TRANSLATE. * Bug fixes and improvements to ensure a smoother and more efficient user experience. *** ### November, 2025 [#november-2025] **v1.30.2 (iOS)** * This version is a bug-fixing release that improves the app experience. *** ### September, 2025 [#september-2025] **v1.30.0 (iOS)** This version includes: * **Extended multi-lingual support** With [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly WEBLATE) integration, the app now supports localization in up to **35 languages**. The key benefits include: * Offering the same language options on the app as in the B2CORE UI. * Customizing translations for each of the 35 supported languages via B2TRANSLATE. * Maintain translations for both the app and the B2CORE UI using a single tool: B2TRANSLATE. * Improving scalability and client satisfaction by removing language barriers. The integration is already in place, but translations for the supported languages need to be added to B2TRANSLATE. Full localization will become available once this process is completed.
Ar Ch
* **PSS deposit & withdrawal methods now in the app** Withdrawal methods configured via the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) in the Back Office are now available in the app. This completes support for both **deposit methods**, which were previously integrated, and **withdrawal methods** connected through PSS. * **Bonuses now available in the app** Clients can now access and manage bonuses directly in the app, including deposit bonuses. Bonuses are supported on **MT4/5** and **cTrader**. Bonuses are added as **credit funds** to clients’ trading accounts, increasing trading capital and margin. Once the bonus requirements are met, the bonus amount is converted into real funds and becomes withdrawable; otherwise, it expires.
Bonus programs Subscribe to a bonus program Active bonus programs
* **Refreshed UI for trading accounts** The **Trading** section has been updated for a more intuitive and seamless experience, enabling clients to: * Open trading accounts effortlessly. * Top up accounts in fewer steps. * Navigate to trading smoothly.
Trading accounts Trading account details
* **Feedback form** Clients can now quickly rate their experience as positive or negative within the app, with the option to provide a more detailed comment. The feedback form appears automatically after several app launches or financial operations and can also be accessed anytime from the **Profile** menu. The feedback data can be tracked via analytics tools.
Feedback form Share feedback from Profile
* Fixes and improvements to ensure stable performance and reliability. *** ### July, 2025 [#july-2025] **v1.29.1 (iOS)** This version includes bug fixes and performance improvements for a better app experience. *** ### June, 2025 [#june-2025] **v1.29 (iOS)** This version includes: * **Deposits methods configured via PSS now supported in the app** Deposit methods configured in the Back Office through the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) are now accessible to users directly within the app. Please note, withdrawal methods via PSS aren’t yet supported in the app. * **Multi-language support** (Beta) The app now supports 16 new interface languages, including **Arabic**, **Polish**, **German**, **Russian**, **Persian**, **Chinese**, **French**, **Thai**, **Italian**, **Indonesian**, **Hindi**, **Vietnamese**, **Portuguese**, **Czech**, **Japanese**, and **Korean**. Languages can be switched directly in the app in **Profile** > **Languages**. All languages are currently in Beta, and translation improvements will continue in future updates.
Profile > Languages Language list
* **Redesigned Wallets** The **Wallets** interface has been updated with a cleaner, more modern design, featuring: * Refreshed wallet card design * Display of the portfolio’s **Estimated Total** * Quick access to depositing funds and other financial operations * Enhanced wallet details, including total and available balances, recent transactions, and clearly highlighted action buttons.
Wallet list Hide balances Wallet details
* **Enhanced deposit experience** A redesigned flow makes it easier and faster for users to complete deposits.
Enhanced deposits Deposit form
* **Support for favorite cTrader accounts** Users can now mark cTrader accounts as favorites. Once marked, these accounts appear in the **Favorite Trading Accounts** widget, providing quick and easy access to trading directly from the **Home** screen. Favorite cTrader accounts * **Support for custom tiles in Services** Custom tiles can now be added to the **Services** section to link users to third-party services or external resources that support your brokerage business. Configuration must be set in the **Back Office**, where the tile name and redirect URL must be specified. Once configured, custom tiles will appear in the app under **Services**. In the Back Office, the option to configure custom menu links will become available with the [June 2025 release](release-notes#june-2025). * **Streamlined account creation with the Go to Deposit option** The account creation process has been streamlined to clearly indicate when a minimum deposit is required. If funds are insufficient for opening a new trading account, users will see the required amount along with the **Go to Deposit** button, encouraging quick funding and faster trading. Go to Deposit * Optimized overall app performance to provide a faster, more stable, and responsive user experience. *** ### March, 2025 [#march-2025] **v1.28 (iOS)** This version includes: **Improved sign-up and onboarding experience** The sign-up and onboarding processes in the app for new clients have been improved: * **Quick app overview**: before accessing the **Sign Up** and **Sign In** forms, clients now see a brief app overview showcasing key features through several screens. This enhancement aims to increase registration conversion and attract more potential clients.
Make flexible deposits All wallets in one place All account operations Track every wallet easily
* **Revamped design**: the **Sign Up** and **Sign In** forms have been redesigned for a better user experience.
Sign In Sign Un
* **Enhanced security**: during sign-up, setting a passcode is now required. Once set, it can’t be disabled. Enabling Face ID remains optional. If a client hasn’t previously set up a passcode or enabled Face ID, these steps will now be included during sign-in.
Set a passcode Enable Face ID
* **Verification**: a prompt to complete verification has been added to the onboarding process, encouraging clients to verify their identity, make their first deposit, and start trading faster. Complete verification **One-click access to trading** Clients can now access the MT4, MT5, and cTrader trading terminals by tapping **Trade** from their accounts in the app, making trading more convenient. To enable this feature, specify the **Web Terminal URL** in the platform details upon navigating to **Products** > **Platforms** in the B2CORE Back Office (for details, refer to [How to enable one-click trading access from the B2CORE UI and mobile app](../how-to-articles/manage-platforms/how-to-enable-one-click-access-to-web-trading-terminals)). Trade button on account cards *** ### December, 2024 [#december-2024] **v1.27 (iOS)** This version includes: * **Enhanced security with passcodes** Setting a passcode is now available during sign-up or sign-in to ensure improved app security. * **Optional biometric authentication** Biometric options, such as Face ID or Touch ID, have been introduced as an additional layer of security for quick and secure access. * **Support for analytics in Amplitude** The Amplitude platform is now supported for the app, enabling you to get analytics about your clients’ actions within the app. Please contact your account manager for assistance in setting up and getting Amplitude analytics. * Bug fixes and improvements affecting the display and usability of the app's interface for a more seamless user experience. *** ### v1.26 (iOS) [#v126-ios] * This version brings internal enhancements and behind-the-scenes fixes to boost app performance and improve the user experience. *** ### v1.25 (iOS) [#v125-ios] This version includes: * **Redesigned Deposit section** The **Deposit** section, accessible via **Services** > **Finance**, has been redesigned for a smoother deposit experience. You can now easily select a wallet and deposit currency, and then choose one of the supported payment methods. Once selected, you’ll receive the deposit address or have the option to enter bank details to finalize your transaction. Additionally, before making a deposit, you can check current rates and calculate estimated amounts based on those rates in the **Indicative amounts** section. * The app performance has been enhanced for a faster and more seamless experience. *** ### v1.24 (iOS) [#v124-ios] This version includes: * **App Services** We are pleased to introduce the new app services feature, making it easier for you to locate supported services, such as Trading, Finances, HelpDesk, IB, and others, and see what will be available soon. The feature enables you to: * access services directly from the Home screen * search for the service you need * tap a service tile to quickly navigate to the desired service. * **Integration with Zendesk** The Zendesk customer support platform has been integrated, offering ticketing, live chat, and AI tools. Tap the HelpDesk button to navigate to the Zendesk interface from the app, without any additional authorization. * **Enhanced IB Room** The enhancements to the IB Room include detailed information about clients and rewards, enabling you to: * view a list of Direct IB and Sub-IB clients registered using your referral links. For each client, you can view the details about their total traded volumes and reward amounts you received. * view a list of rewards paid to your wallet and navigate to reward details. * **Password validation** When setting new passwords, they are now validated to comply with security standards, ensuring they meet the required length and include the necessary character requirements. * Bug fixes and improvements for a more refined and user-friendly interaction. *** ### v1.23 (iOS) [#v123-ios] This version includes: * **Integration with B2TRADER Brokerage Platform** With this release, we are thrilled to announce integration with B2TRADER Brokerage Platform, offering you a comprehensive trading experience: * Single sign-on: sign in to the app and navigate to the BBP platform without additional authorization. * Account list with detailed balances: keep your funds under control with a comprehensive view of account balances. Create and rename accounts to keep your funds well organized. * Asset balances screen: view asset details, including the amounts of free and frozen funds, with the option to hide assets with zero balances. * Order book and Price chart: monitor trading data and make buy and sell decisions, with quick access to the order placing screen. * Candlestick and Line charts: switch between chart types and scroll through historical values. * Limit & Market orders: place Limit and Market orders using all the supported time in force settings (Market: IOC, FOK; Limit: IOC, FOK, GTC, GTD, Day). * Order lists: access open and historical order lists, providing easy navigation to order parameters and details, and options for quick canceling or repeating an order. * **Redesigned Dashboard** The redesigned Dashboard offers the following enhancements: * **New widgets**: use new widgets, such as Total Balance, Last Transactions, Favorite Trading Accounts (now displaying only MT4 and MT5 accounts added to favorites), and IB Program. * **Organize the Dashboard**: easily organize your Dashboard by dragging and dropping widgets according to your preferences. * **Support for banners**: banners can now be displayed on the Dashboard. * **Profile info**: you can now view your profile name and picture at the top of the Dashboard. * **Quick navigation to HelpDesk**: tap the button in the topbar for quick access to the HelpDesk, if supported. * **Apple store info**: you can now review what’s new in the latest app version before downloading it. * Bug fixes and improvements to offer a smoother and more streamlined user experience. *** ### v1.22 (iOS) [#v122-ios] This version includes: * **Integration with CentroID** Support for CentroID has been added, providing connectivity to various trading platforms and liquidity sources. Now you can add your CentroID margin accounts, and make transactions on the accounts. * **Introducing Brokers (IB)** The IB Room option has become available in the Profile menu. Use it to register as a partner in referral programs and create your unique referral links. Attract new traders, earn rewards based on the trading activities of your newly referred clients, and track program performance using the IB Room Dashboard. * Bug fixes and improvements to ensure a more seamless and efficient user experience.
### December, 2025 [#december-2025-1] **v2.9.0 (Android)** This version includes: * **Multi-lingual support for the app via B2TRANSLATE** The app now supports localization in **14 languages** via [B2TRANSLATE](https://docs.b2translate.b2broker.com/). The key benefits include: * Offering the same language options on the app as in the B2CORE UI. * Customizing translations for each of the supported languages via B2TRANSLATE. * Maintain translations for both the app and the B2CORE UI using a single tool: B2TRANSLATE. * Improving scalability and client satisfaction by removing language barriers. The integration is already in place, but translations for the supported languages need to be added to B2TRANSLATE. Full localization will become available once this process is completed. * **Streamlined Total balance calculation** The total balance shown on the app **Dashboard** now reflects the combined balances of all wallets and trading accounts and fully matches the total displayed in the B2CORE Web. * **Rejection reasons in transaction details** For transactions rejected by admins, the rejection reason is now clearly displayed in the transaction details. Rejection reason * **Support for copy trading, PAMM, and MAM** Copy trading, PAMM, and MAM functionality from **B2COPY** is now supported in the app via a web view. This enables clients to access these services directly from the app, through the **Services** section. * **Static payment details for deposits via B2BINPAY V3 and Coinsbuy V3** The app now supports **static payment details** for deposits via **B2BINPAY** and **Coinsbuy** when connected through **API V3**. With static payment details, clients can generate one or more blockchain-specific deposit addresses directly in the app. These addresses are saved for future use and can be reused for subsequent deposits. In addition, the crypto deposit flow via **B2BINPAY V3** and **Coinsbuy V3** has been improved with clear **fee breakdowns** and **indicative amount** displays, providing better transparency and a smoother deposit experience. * **Full B2TRANSLATE integration for payment forms** Payment forms in the app are now fully integrated with [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly Weblate). Labels for all components of dynamic forms for PSS-connected deposit and withdrawal methods, as well as validation error messages, can now be customized and translated into multiple languages via B2TRANSLATE. * Bug fixes and improvements to ensure a more seamless and efficient user experience. *** ### September, 2025 [#september-2025-1] **v2.8.0 (Android)** This version includes: * **Google Play app deployment** It’s now possible to deploy and publish your app on **Google Play**, making it easy for clients to download, install, and receive future updates directly from the store. * **PSS deposit & withdrawal methods now in the app** Withdrawal methods configured via the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) in the Back Office are now available in the app. This completes support for both **deposit methods**, which were previously integrated, and **withdrawal methods** connected through PSS.
Ar Ch
* **Full Profile information** The **Profile** > **Profile** info section in the app now fully aligns with the B2CORE UI, with added fields for **Name**, **Email**, **Date of Birth**, **Country**, **Phone**, **Client ID**, and **Nickname**. Sensitive data is masked by default with reveal-on-click, while **Nickname** can be updated directly in the app. Profile Info * **Device management for enhanced security** In **Profile** > **Security**, a new **Device management** section has been added. It displays log data about devices, IP addresses, and locations used to sign in to their profiles, and allows clients to terminate their current active session directly from the app. This gives clients better control over sessions and helps protect against unauthorized access.
Device management Device details Terminate session
* **Streamlined 2FA setup with Google Authenticator** The process of enabling 2FA via the **Google Authenticator** app has been simplified, with fewer steps and a more intuitive flow. 2FA setup * Fixes and improvements to ensure stable performance and reliability. *** ### August, 2025 [#august-2025] **v2.7.0 (Android)** This version includes: * **Feedback form** Users can now share their experience directly in the app. The feedback form automatically appears after several app launches or whenever a financial operation is performed, allowing a quick positive or negative rating with an optional comment. Feedback can also be submitted anytime from the **Profile** menu.
Feedback form Feedback after a withdrawal
* **UI improvements** The app’s appearance has been enhanced for a visually cleaner and more polished experience, with refreshed sections and improved widget layouts: * More rounded design of UI elements * Refreshed **Total Balance** and **IB** sections * Improved layouts for **Last Transactions** and **Wallets** widgets. Dashboard * Improved performance and stability for a faster, more reliable experience. *** ### June, 2025 [#june-2025-1] **v2.6.0 (Android)** This version includes: * **Deposits methods configured via PSS now supported in the app** Deposit methods configured in the Back Office through the [Payment System Service (PSS)](../integrations/payment-systems#payment-system-service-pss) are now accessible to users directly within the app. Please note, withdrawal methods via PSS aren’t yet supported in the app. * **Bonuses now available in the app** Users can now view and subscribe to bonus programs on **MT4/5** and **cTrader** directly in the app. If a user doesn’t have a suitable trading account, the required account can be created during the subscription process. Once the program requirements are met, the bonus amount is credited to the user’s balance and becomes available for withdrawal.
Bonus programs Active bonus programs Subscribe to a bonus program
* **Services: All key features in one place** A new **Services** section has been added to the app, providing users with centralized access to all available services and features. Each service is represented as a tile that redirects to its respective menu. Tiles can be easily rearranged using drag and drop. Services * **Support for custom tiles in Services** Custom tiles can be added to the **Services** section to link users to third-party services or external resources that support your business. Configuration must be done in the **Back Office**, where the tile name and redirect URL must be specified. Once configured, custom tiles will appear in the app under **Services**. In the Back Office, the option to configure custom menu links will become available with the [June 2025 release](release-notes#june-2025). * **In-app verification via SumSub** The full verification process via **SumSub** is now supported directly within the app, no external redirections are required. This streamlined experience makes the KYC journey faster, and more intuitive during onboarding. * **Blockchain explorer link for withdrawal tracking** Users can now easily track **withdrawal transactions** on the blockchain directly from the app. Crypto wallets include a link to `https://www.blockchain.com/explorer`, available only for withdrawals in Bitcoin, Ethereum, and Bitcoin Cash. This simplifies transaction monitoring and enhances transparency. Blockchain explorer link * Optimized overall app performance to provide a faster, more stable, and responsive user experience. *** ### May, 2025 [#may-2025] **v2.5.0 (Android)** This version includes: Performance improvements and bug fixes to enhance the overall user experience. *** ### April, 2025 [#april-2025] **v2.4.0 (Android)** This version includes: **Revamped sign-up and onboarding process** * **App preview**: before going to the **Sign Up** or **Sign In** forms, clients are now presented with a brief walkthrough highlighting the app’s main features across several screens. It enhances the user journey from the start, encouraging quicker sign-ups.
Make flexible deposits All wallets in one place All account operations Track every wallet easily
* **Improved design**: the **Sign Up** and **Sign In** forms have been redesigned to offer a smoother and more intuitive user experience.
Sign In Sign Up
* **Enhanced security**: for quicker and more secure access to the app, clients are now prompted to enable biometric authentication using their fingerprint during onboarding. If a client hasn’t previously set up fingerprint authentication, this step will be included during sign-in. Once enabled, fingerprints can also be used to confirm payments within the app. Clients can manage this feature anytime in **Profile** > **Settings**.
Enable fingerprint authentication Use fingerprint to confirm payments
* **Verification**: an additional **verification step** is now included in the onboarding process, encouraging clients to complete KYC immediately after sign-up. This enhancement streamlines the process, enabling clients to access full functionality, make their first deposit, and start trading faster. Complete verification * The app has been optimized to deliver a faster, more stable, and responsive experience. *** ### March, 2025 [#march-2025-1] **v2.3.0 (Android)** This version includes: * **Internal transfers** The app now supports internal transfers, enabling clients to transfer funds to other clients within the same brokerage by specifying the **Client ID** and **Account ID** of the recipient. The funds are transferred instantly and without commission. Internal transfers in the app * **Enhanced security with withdrawal address whitelisting** Secure your withdrawals by enabling the **Withdraw Whitelist** option in the **Security** section and adding trusted withdrawal addresses. Once enabled, funds can only be withdrawn to the specified addresses, preventing unauthorized transactions. Withdrawal whitelists in the app * **One-click access to trading** Clients can now access the MT4, MT5, and cTrader trading terminals by tapping **Trade** from their accounts in the app, making trading more convenient. To enable this feature, specify the **Web Terminal URL** in the platform details upon navigating to **Products** > **Platforms** in the B2CORE Back Office (for details, refer to [How to enable one-click trading access from the B2CORE UI and mobile app](../how-to-articles/manage-platforms/how-to-enable-one-click-access-to-web-trading-terminals)). Trade button on account cards *** ### December, 2024 [#december-2024-1] **v2.2.0 (Android)** This version includes: * **Introducing Brokers (IB)** The IB functionality is now supported in the app, making it easier to manage your referral activities. With this update, you can: * **Explore and join IB programs**: view all available IB programs and join new ones using the **IB Program** widget on the **Home** screen. * **IB clients**: view a list of your referred clients, organized across different levels. * **Track IB rewards**: monitor your earned rewards and view payment details. Additionally, you can track your IB wallet balance and make withdrawals directly from the app. * **Customize IB referral links**: configure referral link parameters for each program in the **Advanced Link** section to optimize your referral strategy. * **Enhancements to trading accounts** More options for MT4/5 and cTrader accounts are now available in the app, including: * **Essential account parameters**: view such parameters as Balance, Equity, Free Funds, Credit, and Leverage directly in the account details. * **Equity chart**: analyze account performance with the Equity chart, now available for daily, weekly, and monthly periods. * **Expanded trading data**: access more detailed trading data with the **Pending orders**, **Open positions**, and **Trading history** tabs. * The ability to archive trading accounts. * The ability to rename accounts for better organization. * Bug fixes and interface improvements to deliver a more seamless and user-friendly experience. *** ### November, 2024 [#november-2024] **v2.1.0 (Android)** This version includes: * **Support for exchanges** Exchanges are now accessible in the **Finance** section, enabling you to convert between different currencies, including fiat to crypto, and vice versa. When making exchanges, you can view real-time rates and refresh them as needed to stay up-to-date with the latest rates for your transactions. * **Integration with Zendesk** With the integration of Zendesk customer support, you can now easily create, submit, and track your support tickets directly from the **Profile menu** in the app. To use Zendesk in the app, the Zendesk configuration must be set up in the Back Office. This includes establishing an external connection to Zendesk and following the steps to [switch from SupportPal](../how-to-articles/manage-system-settings/how-to-switch-from-supportpal-to-zendesk) if it was previously used. * **Favourite wallets** You can now add wallets to your favorites in the app, making it easier to organize and access them quickly. * **More options for trading accounts** The options to rename your trading accounts and archive them are now available in the account details, giving you more flexibility in managing your accounts. * Bug fixes and performance enhancements have been implemented to deliver a smoother and more responsive user experience. *** ### October, 2024 [#october-2024] **v2.0.0 (Android)** This version includes: * **Support for MT4/5 and cTrader accounts** You can now open demo and live MT4/5 and cTrader accounts in the app, deposit and withdraw funds to/from your accounts, and monitor account trading parameters, such as balance, equity, credit, and free margin in real time. * **Transaction History section added** View your full deposit, withdrawal, and transfer history, along with detailed information for each transaction, in the new Transaction History section. * **Password change for profile security** Providing a convenient way to keep your profile secure, the Security section now includes an option to change your profile password. * **Sign in to the B2CORE UI with QR codes** You can now use the app where you’re already signed in to scan QR codes on the B2CORE UI **Sign In** page, allowing access without the need to enter your credentials. *** ### September, 2024 [#september-2024] **v1.0.0 (Android)** We're excited to announce the release of the B2CORE app for Android, which you can launch as your own branded app. This allows you to offer your clients an additional platform to access the B2CORE functionality. **App download** Currently, Android apps are available for download and installation via APK files. To make the APK available for download from your B2CORE UI, refer to [How to configure settings for mobile app downloads](../how-to-articles/manage-system-settings/how-to-configure-settings-for-mobile-app-downloads). This version includes: * **Registration** Registration through the app is available by clicking the Sign Up option on the Start screen. * **Dashboard** The Dashboard appears after signing in to the app, displaying the Total Balance, Last Transactions, and Wallets widgets, with banners at the top. * **Profile menu** Accessible by tapping the top left corner of the screen, the Profile menu enables you to: * upload profile photos * view your current verification levels and complete KYC verification to reach higher levels * access security settings, such as 2FA via Google Authenticator or SMS, anti-phishing codes, and more * displays the app version and a list of custom links to additional resources. * **Wallets** Displays a list of your wallets, grouped into crypto and fiat categories. At the top, the estimated total across all wallets, converted to USD, is shown. From this section, you can deposit, withdraw, and transfer funds. By tapping a wallet, you can view detailed information, including the available balance, amount on hold, and transaction history. * **Finance** This section is intended for deposits, withdrawals, and transfers. Recent transactions are displayed under each transaction type, allowing you to quickly initiate new ones with pre-filled fields based on previous transactions. * **Trading** This section supports the B2TRADER Spot Brokerage Platform, providing access to its extensive trading features and functionalities.
## June 30, 2026 [#june-30-2026] ### New features [#new-features] #### Per-blockchain crypto deposit and withdrawal commissions [#per-blockchain-crypto-deposit-and-withdrawal-commissions] For **B2BINPAY** and **Coinsbuy**, brokers can now configure limits and commissions separately for each blockchain network (for example, ERC-20 vs. TRC-20 for USDT) instead of one flat rate per currency. Clients choose their network and see the exact fee and the expected credited or payout amount before confirming, giving brokers accurate pricing of network costs and clients full fee transparency up front. #### CPA programs for Introducing Brokers [#cpa-programs-for-introducing-brokers] B2CORE now supports **CPA (Cost-Per-Acquisition)** programs and payment plans for Introducing Brokers, letting brokers set up flexible, rules-based partner compensation instead of a one-size-fits-all model. A CPA program is now bound directly to a partner program, so partners are rewarded automatically the moment they join a program with CPA attached – removing manual per-referral-link setup and reducing configuration errors. New API endpoints power the CPA widget and reports for partners. #### B2TRADER web terminal access [#b2trader-web-terminal-access] Brokers can now configure a **web terminal URL** for the B2TRADER platform, just as they already can for other platforms, giving clients one-click access to the trading terminal directly from the client portal. #### IB Trades reconcile process [#ib-trades-reconcile-process] A lighter-weight **reconcile** option has been added to the trade-sync process. It re-sends only the trades that failed to deliver instead of resyncing everything, giving brokers a faster, safer way to close data gaps after an outage without the impact of a full resync. ### B2CORE UI updates [#b2core-ui-updates] * During sign-up, the **country** field is now pre-filled automatically based on the visitor's detected location, reducing manual entry for new clients. * The client portal now detects the interface **language from the browser**, so new visitors see the portal in a familiar language from the start. * The simplified registration form is now split into **multiple pages**, making longer sign-up flows easier to complete. * A **"Coming soon"** screen can now be shown for features that are not yet available in a broker's setup. ### Payment system updates [#payment-system-updates] * **Volet** is now available to all brokers by default. * For **B2BINPAY** and **Coinsbuy**, deposit address destinations are now supported and a custom **blockchain label** can be shown in the payment details, making crypto deposits clearer for clients. * For **Flutterwave**, brokers can now choose whether the settled amount or the charged amount is used for a transaction via a new configuration option. * A **test connection** action has been added for the CoinsBuy V3 rate provider, so brokers can verify the integration directly from the Back Office. ### Improvements [#improvements] * **IB restrictions** are now applied to deposit and payout methods, so partners and their clients only see the payment options available to them. * The **Back Office dashboard** now supports filtering, including by client type, jurisdiction, and country, making it easier to focus on a specific segment. * Navigation between methods and operations grids in the payment configuration has been improved for faster back-office work. * Payment system configuration now shows a **fingerprint and masked preview** of secret fields, so operators can confirm which credential is stored without exposing it. * A client's **jurisdiction** set manually is now locked from automatic country-based mapping, with a clear indicator and an easy way to release it. * The precision of **FIAT currencies** can no longer be edited, preventing accidental misconfiguration. * Changing a client's **email** now propagates the update to B2TRADER, keeping platform records in sync. * For **cTrader**, product currencies are now filtered by the cBroker's deposit assets, so only relevant currencies are offered. * New Back Office API endpoints let integrators write client **marketing data**, and a new `/api/v2/countries` endpoint returns the country list. * Performance has been improved across data exports, the deposits and payouts lists, the clients API, IB payment tables, and large CSV imports, making these operations faster and more reliable at scale. ### Deprecated functionality [#deprecated-functionality] * The legacy **Volet** and **BFT365** payment provider integrations have been removed. They are superseded by the new PSS-based connections. ### Resolved issues [#resolved-issues] * Saving a corporate client's profile no longer overwrites a manually set jurisdiction via automatic country mapping, preventing clients from being placed under the wrong regulatory entity. * Decimal commission values are now accepted on the transaction update endpoint. * For Introducing Brokers, B2TRADER transactions now fall back to the account currency when needed, and per-account trading volume and rewards are correctly scoped to the viewing partner. * IB report and account filters now accept alphanumeric IDs. * The IB payment export preview table is now horizontally scrollable, so wide exports are easier to review. ## May 31, 2026 [#may-31-2026] ### New features [#new-features-1] #### Built-in brand-new identity provider [#built-in-brand-new-identity-provider] B2CORE now ships with its own built-in identity provider. Brokers can let clients sign up and log in with **Apple**, **Google**, or any other **OIDC-compliant** provider, offering a faster, more familiar sign-in experience. **Passkeys** are now supported as well, giving clients a secure, passwordless way to sign in. B2CORE can also act as a trusted identity provider itself, so third-party and in-house apps can offer a "Log in with B2CORE" option and authenticate clients via OIDC without managing separate credentials. The migration to the new identity provider has already started and will be completed for all brokers by the end of June 2026. #### B2CONNECT integration [#b2connect-integration] B2CORE now integrates with **B2CONNECT**, B2Broker's multi-asset liquidity and trading connectivity hub. Brokers can connect B2CORE directly to B2CONNECT as a trading platform, letting their clients access B2CONNECT-powered instruments and liquidity from within B2CORE. ### B2CORE UI updates [#b2core-ui-updates-1] * Embedded custom pages (iframe menu entries) now follow the client's selected interface language, so third-party tools open in the same language as the rest of the portal. * The trading platform password is now shown to the client once after an account is created, making it easier to save credentials for platforms that require them. Available for MT4/MT5. * A new immediate verification flow can be enabled to prompt clients to complete KYC right after a call to action, helping move new sign-ups through verification faster. ### Payment system updates [#payment-system-updates-1] * A **system precheck** has been added to the payout approval flow. Withdrawals are now validated against the PSS payment layer before they are processed, reducing the risk of approving payouts that would later be rejected downstream in PSP. * For **B2BINPAY** and **Coinsbuy**, the reverse exchange rate is now calculated for conversions, and the redundant **Label** field has been removed from the withdrawal form. * For **PayRetailers**, deposit and withdrawal status changes are now received via webhook notifications, keeping transaction states up to date automatically. * For **BridgerPay** card withdrawals, the email field is now always mandatory and the first and last name are pre-filled, reducing failed payout attempts. * For **Volet** bank-card withdrawals, additional form validation and the cardholder address have been added. ### Improvements [#improvements-1] * **Idempotency keys** are now supported on the `makeDeposit` and `makeWithdrawal` API endpoints as well as the Back Office manual deposit and withdrawal forms. Retried requests safely return the original transaction instead of creating a duplicate, giving integrators reliable retry behavior. * Account **auto-creation rules** have been reworked into a dedicated section with explicit per-trigger options, giving brokers clearer, more granular control over when trading accounts are opened automatically for clients. * For crypto payouts via **PSS**, the destination wallet address is now verified through SumSub and validated against the client's whitelist, adding protection against withdrawals to unauthorized addresses. * On the create-exchange form, operators with the appropriate permission can now enter the exchange rate manually, giving full control over admin-initiated conversions. * For **TradeLocker**, hedging is now enabled for all products and currencies. * The **Transactions** table now includes source and destination account number columns, and account numbers are now shown in the transfer account selectors, making it easier to identify the accounts involved. * Manual deposit creation now supports **invoice** and **transaction ID** fields for better reconciliation. * Contact synchronization with **ActiveCampaign** and **SendGrid** is now scheduled automatically, keeping marketing audiences up to date. * For KYC via **iDenfy**, a verification started on desktop and continued on mobile is now finalized automatically via webhook, smoothing the mobile hand-off. * Phone numbers received from **SumSub** are now marked as confirmed, so clients don't have to re-verify a number that has already been validated during KYC. * The **Back Office** now shows a clear "Access denied" message when a user without the required permission tries to change a client's verification level or rights. * Via the API, platform credentials can now be supplied when creating an account, and `api/v2/accounts` now returns and can be sorted by `updateTime`. * The registration date-of-birth field now restricts entries to a reasonable date range, reducing invalid sign-up data. ### Deprecated functionality [#deprecated-functionality-1] * The **Clients** > **Services** feature has been removed from the Back Office. * The **System** > **Localizations** section has been removed, along with the legacy language management it relied on. Languages are now managed entirely through B2TRANSLATE. ### Resolved issues [#resolved-issues-1] * Admin-initiated exchanges are no longer silently saved at a rate of 1.0 when the rate provider is unavailable; the operation now uses the correct rate. * For **cTrader**, a local copy of the country list is now used, avoiding errors when the external list is unavailable. * The **Centroid** free-funds calculation has been corrected. * The audit journal widget now shows all changed fields for an action. * Deleted clients are now excluded from the phone-number uniqueness check, so a new client can reuse a number freed up by a removed account. * Several incorrect language and locale codes and names have been fixed. * The granularity of the equity graph across time periods has been corrected. ## April 30, 2026 [#april-30-2026] ### New features [#new-features-2] #### New PS integrations [#new-ps-integrations] Support for the following new payment systems has been added: * **Columis** – with support for deposits * **Volet** – with support for deposits and withdrawals #### Intercom helpdesk integration [#intercom-helpdesk-integration] B2CORE now integrates with **Intercom**, allowing brokers to offer in-app live chat and support to their clients across the web, iOS, and Android apps. The Intercom authentication is handled securely on the server side, so credentials are never exposed to the client. #### New email template system [#new-email-template-system] A redesigned email template system has been introduced. Brokers can now customize the default transactional emails – such as welcome messages and notifications – directly from the Back Office, making it faster to match emails to their brand without developer involvement. All the email templates will be migrated there soon. #### Embeddable custom pages in the client portal [#embeddable-custom-pages-in-the-client-portal] Brokers can now embed their own or third-party pages directly in the B2CORE client portal as custom menu entries, choosing whether each entry opens in the same tab, a new tab, or an embedded iframe. A new authentication endpoint lets those embedded services securely identify the signed-in client without requiring a separate login. For details, refer to [How to integrate your app as iframe in B2CORE](../how-to-articles/manage-system-settings/how-to-integrate-your-app-as-iframe-in-b2core). ### B2CORE UI updates [#b2core-ui-updates-2] * B2TRADER Trading accounts now expose a dedicated, human-readable **display number**, shown consistently across the client portal, the Back Office, and data exports. * A **login button** has been added to the sign-up page, making it easier for returning clients to switch to the login screen. ### Payment system updates [#payment-system-updates-2] * For **B2BINPAY** and **Coinsbuy**, the EUROC stablecoin is now recognized under its updated **EURC** ticker, ensuring the currency is displayed and processed correctly. * For **BridgerPay**, the last four digits of the card are now stored and shown in the withdrawal payment snapshot, making it easier to identify the card used for a payout. ### Improvements [#improvements-2] * **Hint support** has been added to form fields and payment system configuration fields, so brokers can show inline guidance to clients on deposit and withdrawal forms and reduce support requests. * A **jurisdiction** filter has been added to the **Finance** section, helping brokers that operate across multiple legal entities narrow down financial records by jurisdiction. * For KYC via **SumSub**, the questionnaire answers submitted by a client are now visible in the Back Office. * The permission to update a client's **verification level and rights** is now separate from the general client-info read permission, so brokers can grant or restrict this capability to back-office users independently. * **Active Campaign** connections can now be tested directly in the Back Office with a check-connection action. * An **Apple touch icon** can now be configured under visual customization, so the B2CORE UI shows a branded icon when clients add it to their home screen. ### Deprecated functionality [#deprecated-functionality-2] * Several legacy payment provider integrations that are no longer supported have been removed, having been superseded by PSS-based connections. These include **SticPay**, **Sqala**, **Help2Pay**, and **KoraPay**. ### Resolved issues [#resolved-issues-2] * For **MT4/MT5**, the client's country is now mapped using each platform's own country dictionary, ensuring the correct country is sent to the trading platform. * Login push notifications now display human-readable text instead of raw codes. * Newly created accounts now appear in the account list immediately after creation. * Currency icon spacing has been fixed in right-to-left (RTL) layouts. * Withdrawal amount validation has been corrected. * The **Transfers** export now correctly populates the internal client type and includes client tags. * In **Savings**, the "hide unavailable programs" filter now also hides programs the client doesn't have enough balance to join. ## March 31, 2026 [#march-31-2026] ### New features [#new-features-3] #### Simplified registration flow [#simplified-registration-flow] A new, streamlined registration flow is now available, designed to reduce friction during onboarding and help new clients sign up faster. Brokers can enable and configure the simplified flow through the corresponding settings in the Back Office. ### B2CORE UI updates [#b2core-ui-updates-3] #### Calculator for crypto deposits [#calculator-for-crypto-deposits] A calculator has been added to the static deposits flow in the B2CORE UI. Before completing a deposit, clients can now estimate the amount and review conversion details, making deposits via static payment methods clearer and more predictable. ### Payment system updates [#payment-system-updates-3] * For crypto deposits via **B2BINPAY** and **Coinsbuy**, the network protocol is now displayed alongside the blockchain name (for example, Ethereum (ERC-20), BSC (BEP-20), or TRON (TRC-20)). This helps clients select the correct network and reduces deposit errors. * For **KoraPay** bank account withdrawals, the destination country can now be configured, so the correct list of banks is shown per country. This enables local bank withdrawals across additional African markets such as Nigeria and South Africa. * For **BridgerPay**, a deposit method can now be configured to open the checkout directly to a single payment option – such as credit card, wire transfer, or crypto – giving brokers tighter control over the deposit experience. * For **Sqala**, a human-readable **Code to pay via PIX** field has been added to PIX deposits, making it easier for clients in Brazil to identify and copy the correct payment code. In addition, the platform-side minimum and maximum amount limits for BRL transactions via Sqala have been removed. ### Improvements [#improvements-3] * A new **color scheme generator** has been added to visual customization, making it easier to produce a consistent, branded set of theme colors for the B2CORE UI. * A new option has been added to external connections to control whether an integration's key is shared with the B2CORE UI for client-generated events. For analytics connections such as **RudderStack**, disabling it keeps the key out of the public system-info endpoint, preventing misuse. * The client **jurisdiction** is now included in key financial reports (such as the Client Finance, Transaction, and Balances reports) as well as in the **Deposits**, **Payouts**, **Transfers**, and **Exchanges** export files, helping brokers that operate across multiple legal entities identify each client and transaction at a glance. * In **Bonuses** > **Bonus distribution**, the bonus name filter has been replaced with a text search, allowing operators to quickly find specific bonus programs by name. * The temporary bonuses list can now be filtered to show only unclaimed programs, so clients always see the offers still available to them. * The **Transactions** export now includes all records rather than only the currently visible page, bringing it in line with the other **Finance** sections. * The KYC upload form now validates the minimum required number of files before submission, showing clients an immediate, localized message if they haven't uploaded enough documents. * Clients can no longer submit more than one account deletion request at a time; if a request is already pending, a new one can't be created. ### Deprecated functionality [#deprecated-functionality-3] * The **Mailing** > **Marketing** feature has been removed from the Back Office, following the deprecation notice introduced in the previous release. ### Resolved issues [#resolved-issues-3] * The default cryptocurrencies list now uses the correct precision values. * In **Savings**, the preset name is now validated when a preset is updated. * The language dropdown in the B2CORE UI now preserves the order defined on the server instead of re-sorting the languages alphabetically. ## February 28, 2026 [#february-28-2026] ### New features [#new-features-4] #### New PS integrations [#new-ps-integrations-1] Support for the following new payment system has been added via **PSS**: * **We Payment** – with support for deposits and withdrawals #### Acuity Trading integration [#acuity-trading-integration] B2CORE now integrates with **Acuity Trading**, a provider of market analysis tools and trading signals. Once configured, brokers can offer their clients access to Acuity Trading research and analytics directly within B2CORE, enriching the trading experience and expanding the product offering. #### Adjust analytics integration [#adjust-analytics-integration] B2CORE now supports integration with **Adjust**, a mobile measurement and marketing analytics platform. When configured, B2CORE sends attribution and event data from the B2CORE UI, iOS, and Android apps to Adjust, helping brokers track user acquisition and measure the performance of their marketing campaigns. #### Journal log in the Back Office [#journal-log-in-the-back-office] A new **Journal log** is now available in the Back Office, starting with the client details. It provides a full audit trail showing who created, updated, or deleted a record and what exactly was changed, along with the actor and timestamp for each event. The journal is available to Back Office users assigned the corresponding permission. #### Redesigned Restrictions management [#redesigned-restrictions-management] The interface for managing restrictions has been reworked. A dedicated **Restrictions** tab is now available on the product editing page in the Back Office, listing all active restrictions – such as allowed countries and required verification levels – so admins can quickly see who is eligible for a product without leaving the page. #### Access restrictions for savings presets [#access-restrictions-for-savings-presets] Savings presets can now be configured with access restrictions by **client type**, **jurisdiction**, **country**, and **verification level**, similar to the restrictions already available for products and bonuses. Clients who don't meet the criteria won't see the preset, helping brokers comply with regulatory requirements across different jurisdictions. ### B2CORE UI updates [#b2core-ui-updates-4] * The deposit and withdrawal flows in the B2CORE UI have been further streamlined for a smoother and more intuitive experience. * Clients can now select a **preferred currency** for demo accounts. * The display density of tables has been improved for better readability, and the adaptive layout of the **Profile info** section has been refined for smaller screens. ### Payment system updates [#payment-system-updates-4] * The blockchain **transaction ID (hash)** is now saved and displayed in the deposit and withdrawal details in the Back Office, and is also available via the Back-Office API. This makes it easy to look up crypto transactions directly on the blockchain. * New Back-Office API v2 endpoints allow payment assistance applications – for deposits, withdrawals, and static deposits – to be moved between the **In Progress**, **Success**, and **Failed** statuses programmatically, enabling more automated payment operations. ### Improvements [#improvements-4] * Back Office users with the appropriate permission can now **delete incorrectly uploaded client documents** directly from the **Clients** > **Documents** table, removing the need to contact the support team for document cleanup. * The **Documents** table now includes **Uploaded by** and **Uploaded at** columns, with sorting and filtering, so admins can easily see who submitted each document and when. * For KYC via **SumSub**, clients who receive a final rejection now retain the ability to attempt verification again. A new option, **Allow new verification tries on reject**, controls this behavior in the SumSub connection settings. * The **Mobile description** field for verification levels now accepts **HTML** content, allowing brokers to craft richer descriptions shown to clients in the mobile apps. * Client tags linked to a jurisdiction are now automatically assigned or updated when a client's country changes, when they complete KYC, or when an admin applies jurisdiction changes to all clients. Tags set manually and unrelated to jurisdictions are preserved. * Data exports have been made more reliable with improved error handling and logging, and large high-precision numbers are now correctly handled in deposit and payout exports. * The Back-Office API endpoint for clients (`/api/v2/clients`) now supports sorting by **update time** in addition to creation time, enabling better synchronization workflows. * Overall platform performance has been improved: backend applications have been moved to a new, modern application server for faster API responses, and rate caching for the account total-balance endpoint has been optimized. ### Deprecated functionality [#deprecated-functionality-4] * A number of legacy payment provider integrations that are no longer supported have been removed. These have been superseded by PSS-based connections and include: AlgoGateway, ExLink, ChipPay (payout), PayRetailers, BitWallet, Payelata, NicePay, ISmartPay, EeziePay, NinePay, Chillpay, Epay, POLiPay, PayTrust88, SolidPayments, RpnPay, Axcess, LionPay, and Ozow. * As part of the ongoing move away from SMS-based authentication, the phone confirmation step has been removed from the registration wizards. New clients are no longer asked to confirm their phone number via SMS during registration. * A deprecation notice has been added to the **Mailing** > **Marketing** section in the Back Office. ### Resolved issues [#resolved-issues-4] * Quiz and test details are now returned with the correct translations in all enabled languages. * The translations of SumSub KYC field names in the Back Office have been improved. * On the **Transfers** page, the swap option is now disabled for clients who don't have the corresponding permission. * Savings plans without a matching preset are now handled correctly. * Validation on the PSS withdrawal form has been fixed for cases involving different currencies. * For **PayRetailers**, the deposit status is now recognized correctly (CANCELED is treated as CANCELLED). ## January 31, 2026 [#january-31-2026] ### New features [#new-features-5] #### Rate providers management via the Back-Office API [#rate-providers-management-via-the-back-office-api] New Back-Office API v2 endpoints have been added to list rate providers and update custom rate values. This enables brokers to programmatically manage and override the exchange rates used in B2CORE, simplifying integration with external rate sources and automated workflows. #### Backend analytics events for RudderStack [#backend-analytics-events-for-rudderstack] When **RudderStack** is configured as an external connection, B2CORE now automatically sends key backend events – such as deposits, withdrawals, sign-ups, and verification decisions – to the platform. This complements the existing front-end analytics and provides a more complete view of client behavior for brokers relying on RudderStack. ### B2CORE UI updates [#b2core-ui-updates-5] #### Cookie consent [#cookie-consent] A cookie consent modal window has been added to the B2CORE UI, allowing clients to review and accept the use of cookies in line with privacy requirements. ### Payment system updates [#payment-system-updates-5] * Payment forms for PSS methods now automatically pre-fill known client data, such as name, email, and address, from the client profile. Clients no longer need to re-enter information they have already provided when making deposits or withdrawals. * For **KoraPay**, withdrawals to bank accounts have been improved for more reliable processing. * **PaymentAsia** now supports the **MXN** (Mexican peso) currency code. ### Improvements [#improvements-5] * Backend images, including logos for the **Sign In** page and the menu header, are now managed from the **System** > **Visual customization** menu in the Back Office instead of a separate section. Logos for the login background and the platform logo can now also be uploaded in **SVG** format. * Login security notifications have been improved to reduce spam. Clients are now alerted only when a sign-in occurs from a **new device** or **new IP address**, rather than on every login, making security alerts more meaningful. * Disabling a client's TOTP (authenticator app) two-factor authentication from the Back Office is now correctly synchronized, ensuring the change is reliably applied and the client is no longer prompted for 2FA. * When using **Zendesk** with the B2CORE mobile apps, support requests are now routed through the correct messaging channel, ensuring mobile clients reach the right support queue. * It's now possible to add comments to external connection form groups in **System** > **External connections**, making configurations easier to document and maintain. * The performance of filtering transactions by **client** and **type** on the **Finance** pages has been optimized, and retrieving ignored symbol groups for bonuses now works faster. * A clear error message is now displayed when an operation can't be completed because the account lacks deposit or withdrawal rights. ### Resolved issues [#resolved-issues-5] * Custom menu items for the B2CORE UI can now be edited correctly, and creating a child menu item no longer fails in **Promotion** > **Menu**. * Multi-select controls in **System** > **External connections** now work as expected. * Exporting data from the **Bonuses** section now completes successfully. * The position of banners in the B2CORE UI has been corrected. * Default values for the text and button text are now set when creating announcements. ## December 18, 2025 [#december-18-2025] ### New features [#new-features-6] #### New PS integrations [#new-ps-integrations-2] With this release, support for the following new payment systems has been added via **PSS**: * **LuqaPay** – with support for withdrawals only * **Visionpay (HILZI)** – with support for deposits and withdrawals * **Ozow** – with support for deposits only * **B2BINPAY** (via API v3) – with support for static deposits and withdrawals * **Coinsbuy** (via API v3) – with support for static deposits and withdrawals #### Salesforce integration [#salesforce-integration] B2CORE now supports **Salesforce** integration, enabling seamless syncing of client data from the B2CORE Back Office to Salesforce. This allows you to centralize client information and leverage Salesforce tools for your business processes. For details, refer to [How to integrate Salesforce](../how-to-articles/manage-system-settings/how-to-integarte-salesforce). #### Twilio SendGrid integration [#twilio-sendgrid-integration] B2CORE now integrates with **Twilio SendGrid**, enabling automatic syncing of client data from the B2CORE Back Office to SendGrid contacts. This integration allows you to manage email delivery, marketing campaigns, contact segmentation, and related communication tasks directly through SendGrid. For details, refer to [How to integrate Twilio SendGrid](../how-to-articles/manage-communication-platforms/how-to-integarte-sendgrid). #### Address updates via the Profile in the B2CORE UI [#address-updates-via-the-profile-in-the-b2core-ui] Address updating can now be enabled for `individual` clients in the **Profile** menu of the B2CORE UI. To allow clients to change their country and residential address, configure the new **Address updating** option in **System** > **Settings** in the Back Office. This option enables you to choose how address changes are processed: * **Admin approval required**: an admin must approve the change via a client request in the Back Office. This option applies only when your KYC procedure *doesn’t include* address verification. * **Repeated verification required**: the client’s verification level is reset, and they must complete KYC again with the new address. This option applies only when your KYC procedure *includes* address verification. For more details, refer to the [Client profile](../back-office-guide/system/settings#client-profile) section in the **System** > **Settings** documentation. #### New notifications in the bell icon in the B2CORE UI [#new-notifications-in-the-bell-icon-in-the-b2core-ui] The **bell** icon in the top bar of the B2CORE UI and mobile app now displays a counter of new notifications and opens the **Notifications** panel when clicked. With this release, the panel shows alerts about **new login attempts**, **new login devices**, and **changes to passwords** or **2FA methods**, all grouped under the **Security** category. From the panel, clients can open the **Notifications** page, where they can review all notifications, see full details, and quickly navigate to the **Security** section of their profiles. More notification types will be supported in future updates. Notifications in the bell icon ### B2CORE UI updates [#b2core-ui-updates-6] #### New All tab in Transaction History [#new-all-tab-in-transaction-history] In **Transaction History**, a new **All** tab has been added, allowing clients to view transactions of all types in one place and filter them by status. Transaction History #### Support for the Zendesk chatbot [#support-for-the-zendesk-chatbot] When using **Zendesk** as your HelpDesk system with B2CORE, you can now enable the Zendesk chatbot in the B2CORE UI. This enhancement offers a more streamlined HelpDesk experience, allowing clients to ask questions, quickly find the information that they need, and seamlessly switch to a live operator, all without requiring additional authorization. For details, refer to [How to add Zendesk chatbot](../how-to-articles/manage-system-settings/how-to-configure-a-connection-to-zendesk#how-to-configure-the-zendesk-chatbot). #### Enhanced static Dashboard [#enhanced-static-dashboard] The static **Dashboard** with fixed widgets introduced in the previous release has been further enhanced to improve usability and clarity. **Last Transactions** * The widget is now displayed on the **Dashboard** only if the related **Transaction History** menu is enabled. If the menu is hidden, the widget won’t appear on the **Dashboard**. * Fiat currencies in the widget always use a precision of two decimals. All other currencies follow the decimal settings configured for each currency in the Back Office. * If a client has no transaction history, the **All** button is hidden from the widget. It becomes visible once transactions appear, allowing clients to view their full history directly from the widget. Dashboard with Transaction History **Portfolio** The tabs displayed in the widget now depend on whether the related **Wallets** and **Platforms** menus are enabled: * If both menus are enabled, the widget shows the **Wallets**, **Trading Platforms**, and **All** tabs, allowing clients to view their total portfolio value across all wallets and trading accounts. * If either menu is disabled, the corresponding tab is hidden from the widget. **Trading Accounts** The widget is displayed on the **Dashboard** only if the related **Platforms** menu is enabled. If the menu is hidden, the widget won’t appear on the **Dashboard**. Dashboard with Wallets and Trading accounts * **Automatic submission of verification code forms** In forms where verification codes are required to confirm actions, for example, signing in, changing a password, or others, the form is now automatically submitted once the code is entered, removing the need for clients to click the **Continue** button and making the process more seamless. ### Payment system updates [#payment-system-updates-6] #### Payment input snapshots [#payment-input-snapshots] In the B2CORE Back Office, it’s now possible to view the information that clients enter on the deposit and withdrawal forms when using **PSS** methods. This data helps admins to make informed decisions when approving or rejecting withdrawal requests and speeds up the investigation of potential payment-related issues. The information is available in the new **Payment input snapshot** section, which is added to: * Deposit details in **Finance** > **Deposits**. * Withdrawal details in **Finance > Payouts**. * Client requests in **Clients** > **Requests**, including: **Payout** requests, **PS Deposit Assistance** requests, and **PS Withdrawal Assistance** requests. #### Streamlined handling of PS Deposit Assistance requests [#streamlined-handling-of-ps-deposit-assistance-requests] When a **PS Deposit Assistance** request is triggered due to reaching a sync deadline with the respective payment system, a separate request is no longer created in **Clients** > **Requests**. Instead, such cases now must be handled directly in the deposit details, reducing the number of unnecessary assistance requests. #### Full B2TRANSLATE integration for payment forms [#full-b2translate-integration-for-payment-forms] Payment forms in the B2CORE UI and mobile apps are now fully integrated with [B2TRANSLATE](https://docs.b2translate.b2broker.com/) (formerly WEBLATE). Labels for all components of dynamic forms for PSS-connected deposit and withdrawal methods, as well as validation error messages, can now be customized and translated into multiple languages via B2TRANSLATE. This ensures consistent localization across all financial workflows. ### Improvements [#improvements-6] * The balance of source accounts is now checked when approving client requests for **transfers** and **internal transfers** to ensure sufficient funds are available. If the balance is insufficient for a transfer, the request can’t be approved, and the error message is displayed: `Application approve failed. Insufficient funds on source account`. * In **Bonuses** > **Bonus distribution**, a new **Created by** column has been added, displaying the emails and IDs of the Back Office users who added bonuses to clients. Clicking an ID opens the profile of the respective Back Office user. * The loading speed of the **Finance** > **Exchange** page in the Back Office has been significantly improved, especially for large data volumes. Exporting exchange data from the same page has also been accelerated. * Visibility of items in the main menu of the B2CORE UI can now be restricted based on a client’s **jurisdiction** and **country**, allowing more granular control over which features clients can access. ## October 1, 2025 [#october-1-2025] ### New features [#new-features-7] #### New PS integrations [#new-ps-integrations-3] Support for the following new payment systems has been added via **PSS**: * **Payrock** – with support for deposits and withdrawals * **Proxpay** – with support for deposits and withdrawals * **KoraPay** – the option for withdrawals to bank accounts has been added. #### Introducing static payment details for deposits [#introducing-static-payment-details-for-deposits] Starting with this release, deposit methods via integrated payment systems will gradually support **static payment details**. Previously issued payment information, such as crypto addresses or bank details, is saved for clients, allowing them to reuse it for deposits of different amounts at any time. In this release, **B2BINPAY** and **Coinsbuy** methods feature static deposit details. Clients can generate deposit addresses in the B2CORE UI, which are saved for future use, or create new blockchain-specific addresses, all stored for subsequent deposits. #### The Dashboard with key financial metrics [#the-dashboard-with-key-financial-metrics] The **Dashboard** now opens after signing in to the Back Office for users who are assigned the permission `Access to Finance Dashboard` under the **Statistics** category. The **Dashboard** displays key financial metrics, including **total deposits**, **total withdrawals**, and **net deposits**, helping users quickly review financial results and activity over the selected period (refer to [Dashboard](../back-office-guide/dashboard)). ### B2CORE UI updates [#b2core-ui-updates-7] #### Redesigned static Dashboard [#redesigned-static-dashboard] The B2CORE UI **Dashboard** has been redesigned to provide a clear, intuitive overview of a client’s portfolio and financial state. The **Dashboard** is now a fixed, non-customizable page with the following widgets: * **Portfolio**: shows the total balance with the ability to view allocation across wallets and trading accounts. The prominent **Deposit** button allows clients to add funds quickly. In addition, access to other financial transactions such as **Transfers**, **Exchanges**, and **Withdrawals** is available from the widget. * **Last Transactions**: shows a list of recent financial transactions along with their statuses for quick review and provides access to the full **Transaction History**. * **Trading Accounts**: displays active accounts, marked as favorites or accounts with non-zero balances, for easy access, and provides options to create a new account or go to trading with a single click. #### Clear display of verification request statuses [#clear-display-of-verification-request-statuses] For clients, it’s now easier to track the status of their verification requests. A new banner on the **Dashboard** and **Verification** page displays the pending status after a request is submitted and provides a direct link to the **Document verification** section, where clients can monitor their document statuses. #### More accurate indicative amounts for deposits and withdrawals [#more-accurate-indicative-amounts-for-deposits-and-withdrawals] The calculation of indicative amounts displayed to clients when initiating deposits and withdrawals in the B2CORE UI has been reworked. These amounts now more accurately reflect the final results that clients will receive after execution, taking into account commissions and exchange rates. ### Improvements [#improvements-7] * For **DXtrade**, it's become possible to add the **Account number prefix** when configuring a product in the Back Office. The prefix is added to the beginning of DXtrade account numbers to help distinguish, for example, live and demo accounts or accounts belonging to different brands within a single DXtrade infrastructure (refer to [How to integrate DXtrade](../how-to-articles/manage-platforms/how-to-integrate-dxtrade)). * For **ShuftiPro**, the document type `any` is now supported for address verification. It allows clients to submit any document containing their name and address, rather than a specific document type, making the KYC process more flexible and convenient (refer to [How to use ShuftiPro](../how-to-articles/manage-verification-options/how-to-use-shuftipro)). * Jurisdictions are now assigned to clients based on the combination of their **country** and **client type** as defined in the jurisdiction settings (refer to [Jurisdictions](../back-office-guide/clients/jurisdictions)). * PSS payment methods, including both deposits and withdrawals, are now supported in the mobile apps starting from version 1.30.0 (iOS) and 2.8.0 (Android). * Table loading in the Back Office has been optimized. In particular, the **Clients** > **Accounts** list now loads much faster, even when handling a large number of accounts. * For **Twilio** calls to clients from the B2CORE Back Office, you can now choose which phone number to use if you have several active Twilio numbers in your account. This enables you to select the most suitable local number, increasing the chances of successful contact and enhancing client trust. Outgoing calls made from the B2CORE Back Office via Twilio can now be recorded, with the recordings saved in your Twilio account for later playback. * The **Export** option has been enhanced to provide more reliable data export from the pages where this option is available in the Back Office. * In **Bonuses** > **Bonus distribution**, the **Ignored symbol groups** field is now optional and can be left empty when manually crediting bonuses to clients. If left empty, all symbols from available groups traded by a client are counted toward their traded volume for meeting bonus requirements. * Banner targeting in the B2CORE UI and mobile apps has been improved. In addition to **country** and **verification level**, restrictions can now be applied by **client type** and **jurisdiction** for more precise control over visibility. * In saved withdrawal presets in the B2CORE UI, the payment method now matches the selected withdrawal method, and the currency is clearly displayed. Previously, the technical method name used in the Back Office appeared, causing inconsistencies. ## July 2, 2025 [#july-2-2025] ### New features [#new-features-8] #### New PS integrations [#new-ps-integrations-4] Support for the following new payment systems has been added via **PSS**, with both deposits and withdrawals available: * **FundPay** * **Jetapay** * **PayRetailers** * **TopChange Pay** In addition, withdrawals are now supported for **AlfredPay**. #### Integration with SumSub Fraud Prevention [#integration-with-sumsub-fraud-prevention] Transaction monitoring via **SumSub Fraud Prevention** is now supported for fiat and crypto **deposits** and **withdrawals**. When such transactions are initiated, they're automatically checked by **SumSub**, with results returned to B2CORE. The results are displayed in the **Transaction monitoring** section of deposit and withdrawal details, as well as in the respective client requests before they can be approved or rejected. Additionally, a new **KYT status** column in **Finance** > **Deposits/Payouts** displays the transaction monitoring results. This also improves **auto-withdrawals** in B2CORE, allowing faster processing without compromising compliance. To use this feature, you must have **SumSub Fraud Prevention** enabled and properly configured in your SumSub account and the enabled **SumSub** external connection in the B2CORE Back Office (refer to [How to configure a connection to SumSub](../how-to-articles/manage-verification-options/how-to-use-sumsubstance#how-to-configure-a-connection-to-sumsub)). #### Integration with ActiveCampaign [#integration-with-activecampaign] It’s now possible to run targeted email campaigns using client data from B2CORE, seamlessly synced with the **ActiveCampaign** platform. This integration enables more efficient, data-driven email marketing and notifications by: * Configuring an external connection to **ActiveCampaign** in the B2CORE Back Office. * Automatically syncing client data from B2CORE to **ActiveCampaign**. * Creating email lists to improve client retention and provide more personalized interactions via **ActiveCampaign**. For details, refer to [How to integrate ActiveCampaign](../how-to-articles/manage-communication-platforms/how-to-integrate-activecampaign). #### Support for custom menu items in the B2CORE web and mobile apps [#support-for-custom-menu-items-in-the-b2core-web-and-mobile-apps] It’s now possible to add custom items to the menu displayed in both the B2CORE UI and mobile apps. In mobile apps, this functionality is supported starting from **iOS** v1.29 and **Android** v2.6.0. Custom items can be configured in **Promotion** > **Menu** by specifying their names, URLs to which clients will be redirected, and icons. When clicked, clients are redirected to third-party external resources or web pages that support your business (refer to [How to add custom menu items](../how-to-articles/manage-advertising-options/how-to-add-custom-menu-items)). ### B2CORE UI updates [#b2core-ui-updates-8] #### Improved Total Balance widget [#improved-total-balance-widget] The widget has been improved to show balances from both wallets and trading accounts, as well as the overall portfolio value for a comprehensive financial overview. #### Enhancements related to B2TRADER accounts [#enhancements-related-to-b2trader-accounts] The following improvements to B2TRADER accounts handling have been introduced: * **New B2TRADER Accounts widget**: accounts created on the B2TRADER platform can now be conveniently viewed and accessed via a dedicated widget on the **Dashboard** in the B2CORE UI. With a single click, traders can sign in to the trading interface and start trading instantly. * **Support for Netting accounts**: in addition to **Hedging**, B2TRADER accounts with the **Netting** execution type are now supported. This allows traders to choose the appropriate type to plan and adjust their trading strategies. To enable Netting accounts, a separate product must be configured in the B2CORE Back Office under the **Products** menu. * **Support for demo accounts**: demo B2TRADER accounts with a predefined balance can now be created via the B2CORE UI, allowing traders to safely practice using the trading interface.To enable demo accounts, a separate product must be configured in the B2CORE Back Office under the **Products** menu. #### Revised Sign Up and Sign In pages [#revised-sign-up-and-sign-in-pages] The **Sign Up** and **Sign In** forms have been redesigned for a cleaner layout, improved visual appearance, and a better overall user experience, including: * Displaying the client’s email or phone during confirmation to clarify where a verification code was sent. * The **Back** button now returns clients to the previous step without resetting the form. ### Improvements [#improvements-8] * PSS payment methods are now partially supported in the mobile apps. *Deposit* methods are available in the **iOS** app starting from v1.29 and **Android** starting from v2.6.0. *Withdrawal* methods via PSS aren't yet supported. * The use of bonus presets and temporary bonuses can now be restricted for clients based on a client's **country**, **client type**, **verification level**, **jurisdiction**, or **introducing broker (IB)**. These restrictions can be applied individually or in combination, allowing for more granular access control. If the restrictions are applied to the bonus preset used for crediting automatic deposit bonuses, these bonuses will only be credited to clients who meet the specified criteria (refer to [Bonus presets](../back-office-guide/bonuses/bonus-presets#details) and [Temporary bonuses](../back-office-guide/bonuses/temporary-bonuses#details)). * On the **Bonus** > **Bonus distribution** page, a new **Expired at** column has been added to display the date and time when a credited bonus is scheduled to expire or has already expired. This improvement makes it easier to monitor bonus timelines on client accounts and encourage clients to meet the bonus requirements before expiration. * Jurisdiction handling has been enhanced. You can now manually assign or change a client's jurisdiction in the client details in the Back Office. The list of countries for a jurisdiction can be edited, with the option to apply changes to existing clients or only to those who register after the update (refer to [Jurisdictions](../back-office-guide/clients/jurisdictions)). * For KYC via **ShuftiPro**, the **Show OCR form** – where clients can review, confirm, or if necessary, edit the information extracted from their submitted documents – can now be enabled or disabled in the ShuftiPro connection settings in **System** > **External connections**. * Confirmed phone numbers can now be removed from the **Contacts** tab in client profiles in the Back Office. To do this, a Back Office user must be assigned the `Update clients` permission. Once removed, the phone number becomes available for registering a new client profile. * The **Clients** > **Requests** page has been improved to include a **Country** column with filter options, making it easier to identify requests by client location. Additionally, the **Processing date** column now shows when a request was approved or rejected, helping you assess its processing time. * In **System** > **Visual customization**, images uploaded as logos can now only be in `SVG` format. ### Resolved issues [#resolved-issues-6] * Resolved an internal server error that occurred when uploading supporting documents for deposits via the **WireDocument** provider. Deposit requests now proceed without errors. ## April 18, 2025 [#april-18-2025] ### New features [#new-features-9] #### New PS integrations [#new-ps-integrations-5] With this release, we’ve integrated a new payment system, **AlfredPay**. It supports deposits and is fully integrated via PSS connections. #### Ongoing migration of payment systems to PSS [#ongoing-migration-of-payment-systems-to-pss] More systems have been successfully migrated to the **Payment System Service (PSS)**. You can view the complete list of PSS-supported payment systems in [Integrations > Payment systems](../integrations/payment-systems). They are marked with Yes in the **PSS-supported** column. Payment methods previously configured via non-PSS connections remain available and fully functional — except for **PayPal**, which is now only supported through PSS. Payment methods connected through PSS aren’t yet supported on the **iOS** and **Android** apps, meaning they are currently available to clients only via the B2CORE UI. #### Visual customization for the B2CORE UI [#visual-customization-for-the-b2core-ui] You can now personalize the appearance and style of your B2CORE UI to better reflect your brand using the new **System** > **Visual customization** menu in the Back Office. The available options enable you to: * Upload custom logos for the light and dark themes of your B2CORE UI. * Adjust light and dark theme colors. * Set and update background images for the **Sign In** and **Sign Up** pages of the B2CORE UI. * Add custom scripts, for example, for chatbot integration or analytics tracking. For more details, refer to [Visual customization](../back-office-guide/system/visual-customization). ### B2CORE UI updates [#b2core-ui-updates-9] #### Enhanced deposits and withdrawals [#enhanced-deposits-and-withdrawals] The deposit and withdrawal workflows in the B2CORE UI have been streamlined, making the processes faster and more intuitive for clients. The key enhancements include: * **Easier payment method selection**: based on the selected wallet currency and the currency used for deposit or withdrawal, only the available payment methods are displayed to a client, helping to quickly select the most suitable option without confusion. * **Clear commissions**: once a payment method is selected and a deposit or withdrawal amount is entered, the commission formula applied to the method is displayed, and the fee is automatically calculated. This helps clients make informed decisions when choosing their preferred method. * **Real-time rate updates**: when deposits or withdrawals involve currency conversion, clients can now manually refresh the rates to view the most current value. The rate refresh is optional and is intended for clarity. The rate applied at the moment of transaction is always up to date, ensuring accurate conversions even without manual refresh. * **Transaction summary**: after selecting a payment method and entering a deposit or withdrawal amount, clients can now view a detailed transaction summary before proceeding. The summary includes the amount to be deposited or withdrawn, the amount to be received, the current conversion rate, and any applicable commissions. * **Transaction statuses and notifications**: clients now receive real-time updates on the status of their transactions, helping reduce uncertainty and minimize the need for support requests. * **Redesigned icons**: the refreshed icons for payment methods are now better aligned with the overall design. #### Simplified B2BINPAY deposit form [#simplified-b2binpay-deposit-form] In the B2CORE UI, the B2BINPAY deposit form no longer displays fields for the amount, indicative amount, or conversion rate, as the funds are deposited when the transaction is processed on the blockchain after submitting the request in the B2CORE UI and receiving the deposit address, making these fields unnecessary. #### Preview of key B2CORE UI features [#preview-of-key-b2core-ui-features] Clients can now see a brief preview of B2CORE UI features before they access the **Sign Up** and **Sign In** forms through a new gallery showcasing main UI pages. This enhancement is designed to boost registration conversions and engage potential clients by providing them with an informative preview of the UI. #### Automatic sign-in after registration [#automatic-sign-in-after-registration] After successfully completing registration, new clients are now instantly signed in to the B2CORE UI without needing to enter their credentials on the **Sign In** page. #### Verification in the onboarding process [#verification-in-the-onboarding-process] New clients are now prompted to complete identity verification immediately after registration, streamlining the onboarding process to encourage faster verification, first deposits, and a quicker start to trading. Clients can still choose to skip this step and complete it later. If skipped, a friendly banner encouraging to complete KYC will appear on the **Dashboard**. #### Interactive UI hints for new clients [#interactive-ui-hints-for-new-clients] New clients signing in to the B2CORE UI for the first time are now provided with guided hints on key elements across various pages, helping them quickly understand the basic functionality and get started with B2CORE efficiently. #### Personal info update [#personal-info-update] Clients can now update their personal information directly in the B2CORE UI via the **Profile Info** menu. Any changes to personal data will reset the client’s verification level, requiring them to complete the KYC process again. #### Streamlined fund management in the Savings menu [#streamlined-fund-management-in-the-savings-menu] Clients are now prompted to deposit funds into savings programs or top up their wallets directly from the **Savings** menu when subscribing to a program and lacking sufficient funds to join it. Additionally, if a client subscribes to a savings program without having the required wallet, they will be offered the option to create a new wallet in the required currency. #### Enhanced widget management in the Dashboard [#enhanced-widget-management-in-the-dashboard] The **Dashboard** has become even more intuitive with a set of new widget management options designed to improve layout clarity and usability: * When multiple widgets are added, they now automatically align for a cleaner and more organized view. * Widgets can no longer be resized below the minimum size, ensuring all content remains clear and readable. * Widgets now snap into place, making it easier to arrange and maintain a structured dashboard layout. #### Seamless authorization to Zendesk [#seamless-authorization-to-zendesk] When signing in to **Zendesk**, clients are redirected to the B2CORE UI **Sign In** page. After signing in, they are automatically taken back to the Zendesk page specified in the connection details under **System** > **External connections**, ensuring a faster and smoother support experience. ### Improvements [#improvements-9] * In **Bonuses** > **Bonus distribution**, you can now view the history of transactions related to crediting or deducting specific bonuses on client trading accounts. This information is available on the **Bonus transactions** tab in the bonus details. Additionally, Back Office users with the appropriate permission can retry failed bonus transactions (refer to [Bonus transactions](../back-office-guide/bonuses/bonus-distribution#bonus-transactions). * For savings programs, the **Cancellation penalty** can now be set as a percentage of the invested amount, offering greater flexibility in penalty calculations. The higher the amount invested by a client, the greater the penalty will be in the case of early withdrawal. The penalty percentage can be applied to programs of both the Fixed and Flexible strategies (refer to [How to create a savings program](../how