Developer Documentation

Programmatic access to Parity's outcome modeling engine.

Parity API

The Parity API provides programmatic access to Parity's outcome modeling engine. Use it to model collars, buffers, and covered calls for supported stocks and ETFs.

Base URL

https://outcomes.parityoutcomes.com

API Version

v1

Current Endpoints

POST /v1/outcomes - Model Collar, Buffer, and Covered Call outcomes for one security, one horizon, and one downside target

POST /v1/frontier - Explore the efficient protection/upside frontier for one security, strategy, and horizon

POST /v1/horizons - Model one strategy and downside objective across multiple time horizons for one security

POST /v1/screen - Model one strategy and downside objective across up to 10 securities

GET /v1/securities - Retrieve the current list of securities supported by Parity

GET /v1/usage - Retrieve API usage

GET /v1/health - Lightweight API health check

Quick Start

Make your first request to model approximately one-year outcomes for SPY using a 10% downside target:

curl -X POST "https://outcomes.parityoutcomes.com/v1/outcomes" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "symbol": "SPY",
    "days": 365,
    "downside_target_pct": 10
  }'

This request asks Parity to model approximately one-year outcomes for SPY using a 10% downside target.

Example Response (abbreviated)

{
  "api_version": "v1",
  "symbol": "SPY",
  "unit": { "shares": 100 },
  "request": { "days": 365, "downside_target_pct": 10 },
  "market": { "underlying_price": 521.34 },
  "expiration": { "date": "2027-08-19", "days_to_expiration": 365 },
  "expected_dividends": { "per_share": 4.12, "per_unit_dollars": 412.00 },
  "strategies": {
    "collar": {
      "status": "available",
      "strategy": "collar",
      "protection_type": "maximum_loss_floor",
      "summary": { "estimated_max_loss_pct": 10.0, "estimated_upside_cap_pct": 12.5 }
    },
    "buffer": { "status": "available", "strategy": "buffer", "..." : "..." },
    "covered_call": { "status": "available", "strategy": "covered_call", "..." : "..." }
  },
  "meta": { "generated_at": "2026-08-11T18:23:00Z" }
}

The full response contains detailed strategy structures, trade legs, and pricing. See the Response section for the complete contract.

Where to go next

  • Retrieve supported securities → GET /v1/securities
  • Explore protection levels → POST /v1/frontier
  • Compare time horizons → POST /v1/horizons
  • Compare securities → POST /v1/screen

Authentication

Every protected Parity API request requires an API key using Bearer authentication.

Authorization: Bearer par_live_...

API keys can be created from Dashboard - API Access (Settings - API Access).

Security callout

Treat API keys like passwords. Never expose a Parity API key in client-side JavaScript, mobile application bundles, public repositories, browser URLs, or logs.

Recommended Architecture

User's application
        |
        v
Customer's backend/server
        |
        v
Parity API

Not recommended:

User's browser
        |
        v
Parity API  (secret embedded in JavaScript)

Keys should generally be stored in environment variables or a secrets manager.

Choosing the Right Endpoint

Use GET /v1/securities to retrieve Parity's current supported-security universe before submitting symbols to a modeling endpoint. This endpoint returns availability metadata only. It does not model an outcome.

Parity exposes four modeling endpoints. Each answers a different question about protection outcomes. They are not redundant — choose the one that matches what you want to compare.

POST /v1/outcomes
One securityOne horizonOne target

Question: What outcomes are available for this investment?

POST /v1/frontier
One securityOne horizonMany protection levels

Question: How much upside changes as I change protection?

POST /v1/horizons
One securityOne protection targetMany horizons

Question: How does the outcome change as I change time?

POST /v1/screen
Many securitiesOne horizonOne target

Question: How does the same objective compare across the investments I care about?

All four endpoints return the same complete strategy contract — option legs, per-leg quotes, package pricing, and executable / midpoint modeled outcomes.

GET /v1/securities

Returns the current list of securities supported by Parity's options-data universe.

Parity refreshes this universe daily from current option contracts and serves the saved snapshot. Calling this endpoint does not open a new live market-data session.

Method
GET
HTTP method
Path
/v1/securities
Endpoint path
Content-Type
application/json
Response body format
Authentication
Required
Bearer token API key

Request

This endpoint does not accept a request body.

Example Request

curl "https://outcomes.parityoutcomes.com/v1/securities" \
  -H "Authorization: Bearer YOUR_API_KEY"

Example Response (abbreviated)

{
  "symbols": [
    "AAPL",
    "MSFT",
    "NVDA",
    "QQQ",
    "SPY",
    "TSLA"
  ],
  "count": 5932,
  "newly_supported": [],
  "newly_supported_count": 0,
  "market_date": "2026-08-21",
  "as_of": "2026-08-24T02:26:20.285348+00:00",
  "stale": false
}

The symbols array is abbreviated. The production response includes the complete current universe.

Response Fields

symbols
array of strings
Alphabetically ordered ticker symbols in the current supported-security snapshot
count
integer
Number of ticker symbols returned in symbols
newly_supported
array of strings
Current symbols recently detected as newly supported by Parity
newly_supported_count
integer
Number of ticker symbols returned in newly_supported
market_date
string
Completed market date used to build the snapshot, formatted as YYYY-MM-DD
as_of
string
Timestamp when the saved snapshot was refreshed
stale
boolean
True when the saved snapshot is more than 48 hours old; otherwise false

Availability Meaning

A symbol appearing in symbols means current option contracts were present when Parity built the saved market snapshot. It does not guarantee that every strategy, investment horizon, downside target, or pricing mode will produce an eligible modeled outcome.

Use the relevant modeling endpoint to determine whether an eligible collar, buffer, or covered call is available for a specific request.

When to Use This Endpoint

Use /v1/securities to populate a supported ticker selector, validate a ticker before submitting a modeling request, monitor changes to Parity's supported universe, or identify recently supported securities.

POST /v1/outcomes

Models Parity's supported outcome structures for one underlying security, investment horizon, and downside target.

Method
POST
HTTP method
Path
/v1/outcomes
Endpoint path
Content-Type
application/json
Request body format
Authentication
Required
Bearer token API key

Request Body

symbol
string (required)
Stock or ETF ticker symbol. Example: SPY
days
integer (required)
Target investment horizon in days. Parity selects an available option expiration around the requested horizon. Example: 365
downside_target_pct
number (required)
Requested downside target expressed as a percentage, not a decimal. Example: 10

Important: Use 10, not 0.10

Use 10 to represent 10%. Do not use 0.10 unless the backend contract changes.

How the downside target is interpreted

  • Collar: approximately the requested maximum-loss target.
  • Buffer: approximately the requested first-loss buffer target.
  • Covered call: approximately the requested downside cushion from option income and expected dividends.

Market availability and discrete option strikes mean actual modeled outcomes may differ from the exact requested target.

POST /v1/frontier

Explore the efficient outcome frontier for one security, strategy, and investment horizon.

The Frontier endpoint evaluates a range of target outcomes for a selected strategy and returns the distinct, non-dominated structures available across that range.

Supported strategies

  • collar
  • buffer
  • covered_call

Each returned frontier point includes the modeled outcome, option structure, complete trade ticket, bid/mid/ask quotes, midpoint and executable package pricing, and marginal tradeoff information.

Method
POST
HTTP method
Path
/v1/frontier
Endpoint path
Content-Type
application/json
Request body format
Authentication
Required
Bearer token API key

Request Body

symbol
string, required
Stock or ETF ticker symbol. Example: SPY
strategy
string, required
One of collar, buffer, or covered_call
days
integer
Target investment horizon in days. Default: 365. Allowed range: 30-750
min_target_pct
number
Lowest target percentage to evaluate. Default: 5. Minimum: 1
max_target_pct
number
Highest target percentage to evaluate. Default: 30. Maximum: 30
step_pct
number
Spacing between requested targets. Default: 5. Minimum: 1

Important: Use percentage points, not decimals

Percentage inputs use percentage points, not decimals. Use 10, not 0.10, to represent 10%.

How the target is interpreted

The meaning of the target depends on the selected strategy:

collar
Target: Maximum-loss target
Frontier: Actual executable max loss
Upside: Executable upside cap
buffer
Target: First-loss buffer target
Frontier: Actual executable effective buffer
Upside: Executable upside cap
covered_call
Target: Downside-cushion target
Frontier: Actual executable downside cushion
Upside: Executable upside cap

Market availability and discrete option strikes mean the actual modeled frontier metric may differ from the exact requested target.

Example Request

curl -X POST "https://outcomes.parityoutcomes.com/v1/frontier" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "symbol": "SPY",
    "strategy": "buffer",
    "days": 365,
    "min_target_pct": 5,
    "max_target_pct": 15,
    "step_pct": 1
  }'

This asks Parity to evaluate SPY buffer outcomes from a 5% through 15% target in 1% increments.

Frontier Behavior

Parity evaluates each requested target using the same underlying market-data snapshot.

The endpoint then:

  • removes duplicate option structures
  • sorts results using the strategy's actual midpoint frontier metric
  • removes dominated structures
  • returns only distinct efficient outcomes

Efficient-frontier construction and dominance comparisons use executable modeled economics as the primary basis. Every frontier point returns both outcomes.executable and outcomes.midpoint, plus both executable and midpoint package pricing.

Because listed option strikes are discrete, the number of returned frontier points may be lower than the number of targets evaluated.

For example, a request evaluating 26 target values may return only 11 distinct efficient structures.

Response

The top-level response includes:

api_version
string
Current API version
symbol
string
Normalized ticker symbol
strategy
string
Requested strategy
frontier_definition
object
Identifies the target, frontier, and upside metrics used for the selected strategy
unit
object
Current modeling unit, currently 100 shares
request
object
Echoes horizon, target range, step size, and targets evaluated
market
object
Underlying price and market-data timestamps
expiration
object
Selected option expiration and actual days to expiration
expected_dividends
object
Expected dividends included in modeled outcomes
frontier
array
Array of distinct efficient strategy points
meta
object
Strategy, pricing modes, point count, and generation timestamp

Example Response (abbreviated)

{
  "api_version": "v1",
  "symbol": "SPY",
  "strategy": "buffer",
  "frontier_definition": {
    "target_metric": "first_loss_buffer_pct",
    "frontier_metric": "effective_buffer_pct",
    "upside_metric": "upside_cap_pct"
  },
  "unit": {
    "shares": 100
  },
  "request": {
    "days": 365,
    "min_target_pct": 5,
    "max_target_pct": 15,
    "step_pct": 5,
    "targets_evaluated_pct": [
      5,
      10,
      15
    ]
  },
  "market": {
    "underlying_price": 772.51
  },
  "expiration": {
    "date": "2027-09-17"
  },
  "frontier": [
    {
      "status": "available",
      "strategy": "buffer",
      "target": {
        "downside_target_pct": 5
      },
      "summary": {
        "estimated_buffer_pct": 6.06,
        "estimated_upside_cap_pct": 20.62
      },
      "structure": {
        "long_put_strike": "...",
        "short_put_strike": "...",
        "short_call_strike": "..."
      },
      "trade": {
        "legs": [
          "... three option legs ..."
        ],
        "package_pricing": {
          "midpoint": {
            "effect": "DEBIT",
            "total_dollars": "..."
          },
          "executable": {
            "effect": "DEBIT",
            "total_dollars": "..."
          }
        }
      },
      "outcomes": {
        "executable": {
          "effective_buffer_pct": 6.06,
          "upside_cap_pct": 20.62
        }
      },
      "marginal_tradeoff": null
    }
  ],
  "meta": {
    "strategy": "buffer",
    "quote_visibility": "full",
    "pricing_modes": [
      "executable",
      "midpoint"
    ],
    "frontier_point_count": 3
  }
}

The example is abbreviated. Live responses include the full trade ticket, actual bid/mid/ask quotes, quote timestamps, package pricing, and complete modeled outcome fields.

Full Trade Tickets

Every frontier point uses the same detailed strategy contract already documented under /v1/outcomes.

Collar returns:

  • long put
  • short call
  • 2 option legs
  • per-leg bid / mid / ask
  • midpoint and executable package pricing
  • max loss and upside cap
  • annualized max loss and annualized upside cap (both pricing modes)

Buffer returns:

  • long put
  • short put
  • short call
  • 3 option legs
  • per-leg bid / mid / ask
  • midpoint and executable package pricing
  • effective buffer and upside cap

Covered Call returns:

  • short call
  • 1 option leg
  • per-leg bid / mid / ask
  • midpoint and executable package pricing
  • downside cushion and upside cap

Annualized metrics (collar)

For every collar frontier point, both outcomes.midpoint and outcomes.executable include:

  • annualized_downside_pct — the modeled maximum loss annualized to a one-year basis.
  • annualized_cap_pct — the modeled upside cap annualized to a one-year basis.

Annualizing lets you compare collar outcomes modeled across different horizons on an apples-to-apples basis. The non-annualized upside cap and frontier metric remain available on each point.

Marginal Tradeoff

Frontier points after the first may include:

{
  "marginal_tradeoff": {
    "additional_frontier_pct": 4.54,
    "upside_cap_change_pct": -4.52,
    "upside_cap_change_per_frontier_pct": -1.00
  }
}
  • additional_frontier_pct is the change in the selected strategy's actual frontier metric relative to the previous efficient point.
  • upside_cap_change_pct is the resulting change in upside cap.
  • upside_cap_change_per_frontier_pct measures the change in upside cap for each additional percentage point of the frontier metric.

Interpretation depends on strategy:

  • For a collar, a positive value generally means accepting more maximum loss provides additional upside.
  • For a buffer or covered call, a negative value generally means additional protection or cushion requires giving up upside.

This is a derived comparison between adjacent modeled outcomes, not a forecast of future investment performance.

POST /v1/horizons

Compare how the same protection objective changes across different investment horizons.

Parity fetches the market data for the selected security and models the requested strategy across multiple target horizons. Each available horizon returns the complete option structure and modeled outcome.

Supported strategies

  • collar
  • buffer
  • covered_call
Method
POST
HTTP method
Path
/v1/horizons
Endpoint path
Content-Type
application/json
Request body format
Authentication
Required
Bearer token API key

Request Body

symbol
string, required
Stock or ETF ticker symbol. Example: SPY
strategy
string, required
One of collar, buffer, or covered_call
downside_target_pct
number, required
Requested downside target in percentage points, not decimals. Use 10 to represent 10%.
days
array of integers, optional
Requested investment horizons in days.

Important: Use percentage points, not decimals

Use 10, not 0.10, to represent 10%.

Horizon constraints

  • Minimum value for each horizon: 30
  • Maximum value for each horizon: 750
  • Maximum number of horizons: 6
  • Duplicate horizons are not allowed.

If days is omitted, Parity currently evaluates:

  • 90
  • 180
  • 270
  • 365
  • 540
  • 730

Target horizons vs. actual expirations

These are target horizons. Listed option expirations occur on discrete dates, so the returned days_to_expiration may differ from requested_days. Not every requested horizon is guaranteed to be available.

Example Request

curl -X POST "https://outcomes.parityoutcomes.com/v1/horizons" \
  -H "Authorization: Bearer $PARITY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "symbol": "SPY",
    "strategy": "collar",
    "downside_target_pct": 10,
    "days": [90, 180, 365]
  }'

Response

Top-level fields include:

api_version
string
Current API version
symbol
string
Normalized ticker symbol
strategy
string
Requested strategy
unit
object
Current modeling unit, currently 100 shares
request
object
Echoes the requested downside target and horizons
market
object
Underlying price and market-data timestamps
horizons
array
Array of modeled outcomes, one per requested horizon
meta
object
Generation metadata

Each horizons[] item includes:

requested_days
integer
The horizon requested for this item
status
string
Availability of a structure for this horizon
expiration
object
Selected option expiration and actual days to expiration
expected_dividends
object
Expected dividends included in the modeled outcome
outcome
object
Complete public strategy contract for this horizon

For an available horizon, outcome uses the same complete public strategy contract used elsewhere in the Parity API, including:

  • status, strategy, protection_type, target, summary, structure, trade, outcomes

trade includes expiration, legs, per-leg bid / mid / ask quotes, quote timestamp, package_pricing.executable, and package_pricing.midpoint.

outcomes includes executable and midpoint.

Example Response (abbreviated)

{
  "symbol": "SPY",
  "strategy": "collar",
  "request": {
    "downside_target_pct": 10,
    "days": [90, 180, 365]
  },
  "horizons": [
    {
      "requested_days": 90,
      "status": "available",
      "expiration": {
        "date": "2026-11-20",
        "days_to_expiration": 98
      },
      "outcome": {
        "summary": {
          "estimated_max_loss_pct": 9.4949,
          "estimated_upside_cap_pct": 8.4312
        },
        "trade": {
          "...": "complete trade ticket"
        },
        "outcomes": {
          "midpoint": {
            "...": "..."
          },
          "executable": {
            "...": "..."
          }
        }
      }
    }
  ]
}

The example is abbreviated and shows a single horizon. Live responses include the full trade ticket, actual bid/mid/ask quotes, and complete modeled outcome fields for every available horizon.

When to use this endpoint

/v1/horizons is useful when the security and protection objective are known, but you want to compare how extending or shortening the protection period changes the available outcome.

Example question: "How does a roughly 10% maximum-loss SPY collar change at 3 months, 6 months, and 1 year?"

POST /v1/screen

Model the same outcome objective across multiple securities in one request.

The endpoint accepts up to 10 ticker symbols, one strategy, one target horizon, and one downside target. Parity returns the complete implementable modeled outcome for every security where an eligible structure is available.

Supported strategies

  • collar
  • buffer
  • covered_call
Method
POST
HTTP method
Path
/v1/screen
Endpoint path
Content-Type
application/json
Request body format
Authentication
Required
Bearer token API key

Request Body

symbols
array of strings, required
Ticker symbols. Minimum: 1. Maximum: 10. Duplicates are not allowed. Symbols are normalized to uppercase.
strategy
string, required
One of collar, buffer, or covered_call
days
integer
Target investment horizon in days. Default: 365. Allowed range: 30-750.
downside_target_pct
number, required
Requested downside target in percentage points, not decimals. Use 10 to represent 10%.

Important: Use percentage points, not decimals

Use 10, not 0.10, to represent 10%.

Results preserve the submitted security order in v1.

Example Request

curl -X POST "https://outcomes.parityoutcomes.com/v1/screen" \
  -H "Authorization: Bearer $PARITY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "symbols": ["SPY", "QQQ", "NVDA"],
    "strategy": "collar",
    "days": 365,
    "downside_target_pct": 10
  }'

Response

api_version
string
Current API version
strategy
string
Requested strategy
unit
object
Current modeling unit, currently 100 shares
request
object
Echoes the submitted symbols, horizon, and downside target
results
array
Successful modeled outcomes, one per available security
unavailable
array
Securities where no eligible structure was available
meta
object
Counts of symbols requested, results available, and results unavailable

Each successful results[] item includes:

symbol
string
Normalized ticker symbol
status
string
Availability of a structure for this security
market
object
Underlying price and market-data timestamps
expiration
object
Selected option expiration and actual days to expiration
expected_dividends
object
Expected dividends included in the modeled outcome
outcome
object
Complete public strategy contract, the same contract used by /v1/outcomes

Not just a summary screener

/v1/screen is not a lightweight summary. Every successful security includes the information required to understand the modeled trade.

Each successful security includes:

  • exact option legs — action, quantity, option type, expiration, strike
  • per-leg bid, mid, ask, and quote timestamp
  • executable package pricing
  • midpoint package pricing
  • expected dividends
  • executable modeled outcome
  • midpoint modeled outcome

Example Response (abbreviated)

{
  "api_version": "v1",
  "strategy": "collar",
  "request": {
    "symbols": ["SPY", "QQQ", "NVDA"],
    "days": 365,
    "downside_target_pct": 10
  },
  "results": [
    {
      "symbol": "SPY",
      "status": "available",
      "market": {
        "underlying_price": 777.69
      },
      "expiration": {
        "date": "2027-09-17",
        "days_to_expiration": 399
      },
      "outcome": {
        "summary": {
          "estimated_max_loss_pct": 9.8538,
          "estimated_upside_cap_pct": 13.8917
        },
        "structure": {
          "long_put_strike": 695,
          "short_call_strike": 880
        },
        "trade": {
          "...": "complete trade ticket"
        },
        "outcomes": {
          "midpoint": {
            "...": "..."
          },
          "executable": {
            "...": "..."
          }
        }
      }
    }
  ],
  "unavailable": [],
  "meta": {
    "symbols_requested": 3,
    "results_available": 3,
    "results_unavailable": 0
  }
}

The example is abbreviated and shows a single result. Live responses include the full trade ticket, actual bid/mid/ask quotes, and complete modeled outcome fields for every available security.

Partial Success

A failure or unavailable structure for one security does not invalidate successful results for other submitted securities. Unavailable securities are returned separately in the unavailable array.

When to use this endpoint

Example question: "Compare the available one-year collars for SPY, QQQ, NVDA, AAPL, and MSFT using approximately a 10% maximum-loss target."

/v1/screen models the securities you submit. It does not scan the full market and does not return recommendations.

Response

The POST /v1/outcomes response contains the following top-level fields:

api_version
string
Current API version (e.g. "v1")
symbol
string
Normalized underlying ticker
unit
object
Current modeling unit. The API currently returns { shares: 100 }. Option structures are represented for a 100-share unit.
request
object
Echoes the requested horizon/downside target
market
object
Current/reference underlying market information used for modeling. Known fields: underlying_price, underlying_timestamp, market_data_as_of
expiration
object
Includes date and days_to_expiration. Actual days may differ from requested days because listed options expire on discrete dates.
expected_dividends
object
Includes per_share and per_unit_dollars. Expected dividends incorporated into the modeled outcome calculations.
strategies
object
Contains the modeled strategy results: collar, buffer, covered_call
meta
object
Includes metadata such as quote_visibility and generated_at

Strategies

The strategies object contains three modeled strategy results. Each strategy includes status, strategy, protection_type, target, summary, structure, trade, and outcomes.

Collar

strategy: collar

protection_type: maximum_loss_floor

Summary fields: estimated_max_loss_pct, estimated_upside_cap_pct, expected_dividends_dollars

Structure fields: long_put_strike, short_call_strike

Trade: expiration, legs (each leg: leg_id, action, quantity, symbol, option_type, expiration, strike, quote with bid/mid/ask/timestamp), package_pricing with midpoint + executable (each: effect, per_share, total_dollars, signed_total_dollars)

Outcomes (executable): max_loss_pct, upside_cap_pct, investment_required_dollars

Outcomes (midpoint): max_loss_pct, max_loss_dollars, upside_cap_pct, max_gain_dollars, investment_required_dollars

Buffer

strategy: buffer

protection_type: first_loss_buffer

Summary fields: estimated_buffer_pct, estimated_upside_cap_pct, expected_dividends_dollars

Structure fields: long_put_strike, short_put_strike, short_call_strike, put_spread_width, protected_start_pct, protected_end_pct

Trade: three option legs - long put, short put, short call

Outcomes: effective_buffer_pct, effective_buffer_dollars, upside_cap_pct, protected_start_pct, protected_end_pct

protected_start_pct identifies approximately where the protected range begins relative to the current underlying price. protected_end_pct identifies approximately where that protected range ends.

Covered Call

strategy: covered_call

protection_type: income_cushion_no_floor

A covered call does not provide a defined floor against large losses.

Summary fields: estimated_downside_cushion_pct, estimated_upside_cap_pct, expected_dividends_dollars

Structure: short_call_strike

Trade: the short call

Outcomes: downside_cushion_pct, option_income_dollars, expected_dividends_dollars, total_income_dollars, upside_cap_pct, breakeven_pct

The downside cushion comes from modeled option income plus expected dividends and is not the same thing as guaranteed principal protection.

Executable vs. Midpoint

Executable is Parity's primary pricing basis. The complete response includes outcomes.executable and outcomes.midpoint. Use outcomes.executable for the conservative estimate that reflects buy-at-ask / sell-at-bid economics.

Executable is the primary basis

primary_pricing_mode is "executable". Midpoint is provided as a secondary comparison only.

Executable reflects Parity's conservative buy-at-ask / sell-at-bid estimate and does not imply a guaranteed fill. Midpoint reflects pricing based around option bid/ask midpoints and may not be achievable.

This applies consistently to /v1/outcomes, /v1/frontier, /v1/horizons, and /v1/screen.

Usage & Limits

New API keys currently include 1,000 requests per calendar month. The account/key's returned limit is authoritative.

GET /v1/usage

curl "https://outcomes.parityoutcomes.com/v1/usage" \
  -H "Authorization: Bearer YOUR_API_KEY"

Example Response

{
  "hourly_used": 1,
  "hourly_limit": null,
  "hourly_remaining": null,
  "monthly_used": 24,
  "monthly_limit": 1000,
  "monthly_remaining": 976
}

A null hourly_limit means no hourly cap is currently configured for that key. Do not translate null into 0.

When a configured limit is reached, the API returns HTTP 429.

Requests to GET /v1/securities count toward the same API-key usage limits as the modeling endpoints.

Errors

401Unauthorized
Missing API key. Invalid authorization format. Invalid API key. Invalid or revoked API key.
403Forbidden
Public API access requires an API Access plan.
429Too Many Requests
Hourly API request limit exceeded. Monthly API request limit exceeded.
400Bad Request
Used when request inputs or modeling parameters are invalid.
500Internal Server Error
Unable to generate Parity outcomes or frontier. Clients should not treat a 500 as a successful model result.
503Service Unavailable
The supported-security snapshot is temporarily unavailable.

Security

  • Never commit API keys to Git.
  • Never include them in frontend source code.
  • Never put them in URLs.
  • Never expose them in screenshots or support tickets unnecessarily.
  • Use environment variables or secret storage.
  • Revoke a key immediately if exposure is suspected.
  • Create separate keys for separate integrations/environments when appropriate.
  • Name keys descriptively (e.g. Production Backend, Staging, Internal Analytics).

Do not share one secret across every system.

Code Examples

Do not put API keys into browser-side fetch examples. JavaScript examples are explicitly Node/server-side.

curl -X POST "https://outcomes.parityoutcomes.com/v1/outcomes" \
  -H "Authorization: Bearer $PARITY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "symbol": "SPY",
    "days": 365,
    "downside_target_pct": 10
  }'

Explore an Outcome Frontier with Python

Use /v1/frontier to explore the tradeoff frontier for collars, buffers, and covered calls across a range of protection or income targets.

import os
import requests

API_KEY = os.environ["PARITY_API_KEY"]

response = requests.post(
    "https://outcomes.parityoutcomes.com/v1/frontier",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "symbol": "SPY",
        "strategy": "collar",
        "days": 365,
        "min_target_pct": 5,
        "max_target_pct": 20,
        "step_pct": 1,
    },
    timeout=60,
)

response.raise_for_status()

data = response.json()

for point in data["frontier"]:
    executable = point["outcomes"]["executable"]

    print(
        executable["max_loss_pct"],
        executable["upside_cap_pct"],
    )

Because Frontier returns complete trade tickets for every efficient point, the same response can be used to build charts, screen outcome tradeoffs, compare midpoint and executable pricing, inspect option quotes, or generate downstream trade instructions.

Retrieve Supported Securities with Python

import os
import requests

API_KEY = os.environ["PARITY_API_KEY"]

response = requests.get(
    "https://outcomes.parityoutcomes.com/v1/securities",
    headers={
        "Authorization": f"Bearer {API_KEY}",
    },
    timeout=60,
)

response.raise_for_status()

data = response.json()

print("Supported securities:", data["count"])
print("Recently supported:", data["newly_supported"])
print("Market date:", data["market_date"])
print("Snapshot stale:", data["stale"])

Parity API responses are modeled estimates based on available market data and assumptions at the time of generation. Quotes, option availability, dividends, and modeled outcomes may change. Parity API modeling endpoints model outcomes only. They do not execute trades.