← API reference
Developer documentation

Quickstart

Create a key and make your first request in a few minutes.

1. Create an API key

  1. Create a free account with your email address and enter the code we send you.
  2. Choose Set up Free plan, then Create API key.
  3. Copy the key when it is shown. It is displayed once and cannot be recovered; if you lose it, revoke it and create another.

A new key can take a few minutes to be enabled; until then, requests with it are refused.

2. Make a request

The API is served at https://api.morphiqlabs.com over HTTPS only. Send the key in the Authorization header; keys are never accepted in the URL.

export FERRO_API_KEY='<your key>'

curl --fail-with-body https://api.morphiqlabs.com/v1/price \
  --header "Authorization: Bearer $FERRO_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{"exercise_style":"european","pricing_model":"auto","option_type":"call","spot":100,"strike":100,"time_to_expiry_years":1,"risk_free_rate":0.05,"dividend_yield":0,"volatility":0.2}'

Every response has a result (or results for a batch) and a metadata object with the request_id, the engine and model versions and the FCU charged for the request. Quote the request_id when you contact support.

3. Every operation

Each operation has a single form and an ordered :batch form that returns one outcome per contract, in order. European and American options are supported; pricing_model: "auto" picks the model for the exercise style. Field definitions are in the API reference; FCU weights per contract are on the usage page.

Price an option POST /v1/price

curl --fail-with-body https://api.morphiqlabs.com/v1/price \
  --header "Authorization: Bearer $FERRO_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{"exercise_style":"european","pricing_model":"auto","option_type":"call","spot":100,"strike":100,"time_to_expiry_years":1,"risk_free_rate":0.05,"dividend_yield":0,"volatility":0.2}'

Price a batch POST /v1/price:batch

curl --fail-with-body https://api.morphiqlabs.com/v1/price:batch \
  --header "Authorization: Bearer $FERRO_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{"requests":[{"exercise_style":"european","pricing_model":"auto","option_type":"call","spot":100,"strike":100,"time_to_expiry_years":1,"risk_free_rate":0.05,"dividend_yield":0,"volatility":0.2},{"exercise_style":"american","pricing_model":"auto","option_type":"put","spot":100,"strike":105,"time_to_expiry_years":0.5,"risk_free_rate":0.05,"dividend_yield":0.01,"volatility":0.25}]}'

Solve implied volatility POST /v1/implied-volatility

curl --fail-with-body https://api.morphiqlabs.com/v1/implied-volatility \
  --header "Authorization: Bearer $FERRO_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{"exercise_style":"european","pricing_model":"auto","option_type":"call","spot":100,"strike":100,"time_to_expiry_years":1,"risk_free_rate":0.05,"dividend_yield":0,"market_price":10.45}'

Solve implied volatility for a batch POST /v1/implied-volatility:batch

curl --fail-with-body https://api.morphiqlabs.com/v1/implied-volatility:batch \
  --header "Authorization: Bearer $FERRO_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{"requests":[{"exercise_style":"european","pricing_model":"auto","option_type":"call","spot":100,"strike":100,"time_to_expiry_years":1,"risk_free_rate":0.05,"dividend_yield":0,"market_price":10.45},{"exercise_style":"american","pricing_model":"auto","option_type":"put","spot":100,"strike":105,"time_to_expiry_years":0.5,"risk_free_rate":0.05,"dividend_yield":0.01,"market_price":9.5}]}'

Compute all ten Greeks POST /v1/greeks

curl --fail-with-body https://api.morphiqlabs.com/v1/greeks \
  --header "Authorization: Bearer $FERRO_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{"exercise_style":"european","pricing_model":"auto","option_type":"call","spot":100,"strike":100,"time_to_expiry_years":1,"risk_free_rate":0.05,"dividend_yield":0,"volatility":0.2}'

Compute Greeks for a batch POST /v1/greeks:batch

curl --fail-with-body https://api.morphiqlabs.com/v1/greeks:batch \
  --header "Authorization: Bearer $FERRO_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{"requests":[{"exercise_style":"european","pricing_model":"auto","option_type":"call","spot":100,"strike":100,"time_to_expiry_years":1,"risk_free_rate":0.05,"dividend_yield":0,"volatility":0.2},{"exercise_style":"american","pricing_model":"auto","option_type":"put","spot":100,"strike":105,"time_to_expiry_years":0.5,"risk_free_rate":0.05,"dividend_yield":0.01,"volatility":0.25}]}'

Price, Greeks and implied volatility in one call POST /v1/analytics

curl --fail-with-body https://api.morphiqlabs.com/v1/analytics \
  --header "Authorization: Bearer $FERRO_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{"exercise_style":"european","pricing_model":"auto","option_type":"call","spot":100,"strike":100,"time_to_expiry_years":1,"risk_free_rate":0.05,"dividend_yield":0,"volatility":0.2,"market_price":10.45}'

Fused analytics for a batch POST /v1/analytics:batch

curl --fail-with-body https://api.morphiqlabs.com/v1/analytics:batch \
  --header "Authorization: Bearer $FERRO_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{"requests":[{"exercise_style":"european","pricing_model":"auto","option_type":"call","spot":100,"strike":100,"time_to_expiry_years":1,"risk_free_rate":0.05,"dividend_yield":0,"volatility":0.2,"market_price":10.45},{"exercise_style":"american","pricing_model":"auto","option_type":"put","spot":100,"strike":105,"time_to_expiry_years":0.5,"risk_free_rate":0.05,"dividend_yield":0.01,"volatility":0.25}]}'

4. Free plan limits

Monthly allowance1,000,000 FCU per UTC calendar month, no rollover; requests stop at the allowance
CapacityBest effort: requests may be refused with 503 under load
Sustained rate5 requests per second (bursts up to 10)
Concurrent requests1
Contracts per batch100
Request size8 KiB single, 1 MiB batch
Active API keys1

Your account page shows your plan and limits.

5. Errors

Errors return a JSON body with a machine-readable error.code, a message and, where it applies, the field. Requests that fail before computation are not charged.

StatusMeaning
401The key is missing, revoked or not recognized. Check the Authorization header.
402The monthly FCU allowance is spent. It resets at the start of the next UTC month.
403Your plan does not include this operation.
413The request body or batch is larger than your plan allows.
422The inputs are invalid or cannot be priced; the error names the field.
429Rate or concurrency limit reached. Retry after a short, randomized delay.
503Capacity is temporarily unavailable. Retry with exponential backoff.

6. Keep your key safe

7. Support

Email support@morphiqlabs.com from your account email, with the request_id of any request in question. Use of the API is subject to the terms of service and the market-data policy.