Skip to main content
Builder Oracle lets Builders bring their own Index Price sources into Perp Anything. Use it when a market needs pricing beyond Orderly’s standard CEX feeds and platform oracle sources. This guide covers two Builder-controlled modes: Both modes can be combined with CEX feeds and platform oracle sources. Each selected source receives a weight in the market’s Index Price configuration.

Source types and selection

When configuring a Perp Anything market, Builders can select from multiple Index Price source types: Selected sources are submitted with weights. The weights must be positive integers and sum to 100.

Builder-pushed feeds

A Builder-pushed feed is the push-based Builder Oracle mode. The Builder owns the price calculation and publishes the resulting Index Price to Orderly. Use a Builder-pushed feed for:
  • an internal index service;
  • an exchange aggregation service;
  • a pricing model for a long-tail asset;
  • an RWA data-provider integration.
The feed is identified as ORACLE_<broker_id>. New feeds are active and private by default so the Builder can test them before making them available to other Builders.

Visibility

  • Private feeds are visible only to the Builder that owns the feed.
  • Public feeds can be selected by other Builders.
If another Builder selects a public feed, that Builder is responsible for understanding the source’s availability and quality risk.

Operating responsibilities

The Builder operating the feed must:
  • keep the WebSocket connection active during the relevant market session;
  • publish valid prices at the required frequency;
  • monitor stale data, skipped prices, and feed availability;
  • use multiple sources where possible to reduce single-source risk.
If a Builder-pushed feed becomes unhealthy, affected markets can be restricted or placed into reduce-only mode according to Perp Anything risk controls.

Bring Your Own Key (BYOK) Oracle

BYOK connects a supported oracle-provider account to Orderly. The Builder does not need to operate a WebSocket publisher, but remains responsible for the provider relationship. Initial BYOK provider support includes Pyth and Stork. Chainlink support is planned for a future rollout.

How BYOK works

  1. Select a supported provider, such as Pyth or Stork.
  2. Submit the provider credentials through Orderly’s private API.
  3. Orderly validates the credentials and creates a provider-specific source, such as PYTH_<broker_id> or STORK_<broker_id>.
  4. Register feeds under the BYOK provider.
  5. Orderly retrieves prices from the provider and makes the feed available for source selection.
BYOK feeds have their own status and health model. The Builder controls whether a feed is active or inactive, while Orderly reports provider-side conditions such as missing symbols, retrieval failures, invalid keys, and quota issues. The Builder must:
  • keep provider credentials valid;
  • monitor key status and provider health;
  • manage which BYOK feeds are active;
  • understand provider quota, coverage, and availability constraints.

Integration flow

The listing endpoints in this section are not currently included in this documentation site’s bundled OpenAPI reference. Confirm production availability with your Orderly integration contact before implementation.
XYZZZ is a fictional token used only as a placeholder. Replace it and the example source identifiers below with values available for your supported asset.
1

Create or update a Builder Oracle feed

Use POST /v1/broker/listing/oracle/feed to register the feed that your listing will use.For a Builder Oracle feed, omit oracle. For a BYOK feed, set oracle to the provider, such as pyth or stork.
A new feed is active and private by default. Keep the feed private while testing. Change visibility to public only if you want other Builders to be able to select it.
2

Publish Builder Oracle prices

Builder Oracle feeds publish Index Price updates to the dedicated oracle WebSocket endpoint.
The feed uses data.base_ccy to match the registered feed. Builders should publish at least once per second while the market session is open.See Full example for a complete client pattern with signing, application-level ping/pong handling, and price publishing.
3

Fetch available price sources

Call GET /v1/broker/listing/index_sources to retrieve the available source list. The response can include CEX, platform oracle, Builder Oracle, and BYOK Oracle sources.To fetch runtime price and health details for Builder Oracle and BYOK sources, call:
This returns active public feeds, plus the Builder’s own private feeds. Other Builders cannot see or select your private feeds.
4

Complete RWA setup if needed

If the market is an RWA market, complete the symbol-context and market-session steps in RWA Markets before submitting the listing.
5

Submit the listing

Submit the market with selected sources and weights through POST /v1/broker/listing/submit.
This non-RWA example omits market_session. For an RWA symbol, follow the requirements in RWA Markets.
6

Monitor the listed market

After submission, monitor source health, feed visibility, Insurance Fund balance, liquidity, and market status. If all configured Index Price sources become unavailable, the market can be placed into reduce-only mode.

Full example

The following example separates the reusable WebSocket client from your provider logic. The SDK file signs the connection, keeps the WebSocket alive, handles reconnects, and publishes indexpricefeed messages. The provider file only decides which price to publish.
Never hardcode production keys or secrets in source code. Load ORDERLY_ACCOUNT_ID, ORDERLY_KEY, and ORDERLY_SECRET from a secure secret manager or environment variables.
ORDERLY_KEY is your Orderly public key and may include the ed25519: prefix. ORDERLY_SECRET should be the base58-encoded raw Ed25519 private key without the ed25519: prefix. This sample reconnects after connection or runtime errors. If authentication fails repeatedly, verify the account ID, key, secret, timestamp, and WebSocket endpoint.