Ferro API reference
From your first request to every response field.
Explore the pricing and service endpoints defined in the current API contract.
The quickstart covers creating an API key, a runnable example for every operation, plan limits and errors. Examples send your key from $FERRO_API_KEY to https://api.morphiqlabs.com.
Numerical result
curl --fail-with-body --request POST '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
}'Request body required
FusedAnalyticsRequest encoded as JSON or morphiq.ferro_risk.v1.FusedAnalyticsRequest
application/json
application/protobuf
A request for price and Greeks, optionally at a volatility solved from an observed premium first. With `market_price`, volatility is solved and the Greeks are evaluated at the solved value — one admission, one solve, and the solved point passed inward as verified evidence rather than re-derived. Without it, the supplied `volatility` is used and the result is the all-ten-Greeks operation under another name.
Additional fields are not accepted.
dividend_schedulearray of DividendEventoptionaldividend_yieldnumber · doublerequiredexercise_styleExerciseStylerequiredmarket_pricenumber | null · doubleoptionalThe observed premium to invert before evaluating the Greeks.
model_versionstring | nulloptionaloption_typeOptionTyperequiredpricing_modelPricingModelrequiredrisk_free_ratenumber · doublerequiredspotnumber · doublerequiredstrikenumber · doublerequiredtime_to_expiry_yearsnumber · doublerequiredvolatilitynumber · doublerequiredUsed only when `market_price` is absent.
Responses
200 Numerical result
application/json
application/protobuf
Response headers
x-request-idstring- Unique service-generated request identifier
400 Malformed request
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
401 Credential missing or not verifiable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
402 The account's funding is spent until a top-up or the next budget period
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
403 The account is not permitted, or its plan does not include this operation
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
406 Response media type is not acceptable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
408 Request body deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
409 The reservation expired before execution began
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
413 Request too large
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
415 Unsupported media type
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
422 Invalid pricing request, or work that cannot be priced under the account's limits
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
429 Request rate or concurrent request allowance exhausted
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
500 Pricing failure
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
503 Capacity exhausted, funding, policy or admission temporarily unavailable, or service draining
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
504 Compute deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
Ordered batch results
curl --fail-with-body --request POST '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
}
]
}'Request body required
BatchFusedAnalyticsRequest encoded as JSON or morphiq.ferro_risk.v1.BatchFusedAnalyticsRequest
application/json
application/protobuf
Ordered request envelope; runtime applies the pinned plan limit.
Additional fields are not accepted.
requestsarray of FusedAnalyticsRequestrequired
Responses
200 Ordered batch results
application/json
application/protobuf
Response headers
x-request-idstring- Unique service-generated request identifier
400 Malformed request
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
401 Credential missing or not verifiable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
402 The account's funding is spent until a top-up or the next budget period
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
403 The account is not permitted, or its plan does not include this operation
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
406 Response media type is not acceptable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
408 Request body deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
409 The reservation expired before execution began
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
413 Request too large
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
415 Unsupported media type
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
422 Invalid batch request, or work that cannot be priced under the account's limits
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
429 Request rate or concurrent request allowance exhausted
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
500 Pricing failure
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
503 Ingress or weighted compute capacity exhausted, or funding, policy or admission temporarily unavailable
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
504 Compute deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
Numerical result
curl --fail-with-body --request POST '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
}'Request body required
GreeksAllTenRequest encoded as JSON or morphiq.ferro_risk.v1.GreeksAllTenRequest
application/json
application/protobuf
A request for the price and all ten Greeks at a supplied volatility. The same shape as `PriceRequest`: the Greeks are derivatives of the price, so they are a property of the same contract and the same coordinates.
Additional fields are not accepted.
dividend_schedulearray of DividendEventoptionalAccepted by the wire contract, refused by this operation until the engine exposes schedule-aware Greeks without a premium (#330). A schedule is served on `FusedAnalytics` with `market_price`.
maxItems: 16Array item schema
dividend_yieldnumber · doublerequiredexercise_styleExerciseStylerequiredmodel_versionstring | nulloptionaloption_typeOptionTyperequiredpricing_modelPricingModelrequiredrisk_free_ratenumber · doublerequiredspotnumber · doublerequiredstrikenumber · doublerequiredtime_to_expiry_yearsnumber · doublerequiredvolatilitynumber · doublerequired
Responses
200 Numerical result
application/json
application/protobuf
Response headers
x-request-idstring- Unique service-generated request identifier
400 Malformed request
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
401 Credential missing or not verifiable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
402 The account's funding is spent until a top-up or the next budget period
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
403 The account is not permitted, or its plan does not include this operation
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
406 Response media type is not acceptable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
408 Request body deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
409 The reservation expired before execution began
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
413 Request too large
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
415 Unsupported media type
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
422 Invalid pricing request, or work that cannot be priced under the account's limits
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
429 Request rate or concurrent request allowance exhausted
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
500 Pricing failure
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
503 Capacity exhausted, funding, policy or admission temporarily unavailable, or service draining
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
504 Compute deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
Ordered batch results
curl --fail-with-body --request POST '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
}
]
}'Request body required
BatchGreeksAllTenRequest encoded as JSON or morphiq.ferro_risk.v1.BatchGreeksAllTenRequest
application/json
application/protobuf
Ordered request envelope; runtime applies the pinned plan limit.
Additional fields are not accepted.
requestsarray of GreeksAllTenRequestrequired
Responses
200 Ordered batch results
application/json
application/protobuf
Response headers
x-request-idstring- Unique service-generated request identifier
400 Malformed request
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
401 Credential missing or not verifiable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
402 The account's funding is spent until a top-up or the next budget period
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
403 The account is not permitted, or its plan does not include this operation
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
406 Response media type is not acceptable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
408 Request body deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
409 The reservation expired before execution began
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
413 Request too large
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
415 Unsupported media type
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
422 Invalid batch request, or work that cannot be priced under the account's limits
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
429 Request rate or concurrent request allowance exhausted
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
500 Pricing failure
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
503 Ingress or weighted compute capacity exhausted, or funding, policy or admission temporarily unavailable
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
504 Compute deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
Numerical result
curl --fail-with-body --request POST '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
}'Request body required
ImpliedVolatilityRequest encoded as JSON or morphiq.ferro_risk.v1.ImpliedVolatilityRequest
application/json
application/protobuf
A request to invert an observed premium into a volatility. Carries `market_price` and no `volatility`: volatility is the unknown being solved for, so a request that supplied one would be asking the service to ignore it.
Additional fields are not accepted.
dividend_schedulearray of DividendEventoptional- maxItems: 16
Array item schema
dividend_yieldnumber · doublerequiredexercise_styleExerciseStylerequiredmarket_pricenumber · doublerequiredThe observed premium to invert.
model_versionstring | nulloptionaloption_typeOptionTyperequiredpricing_modelPricingModelrequiredrisk_free_ratenumber · doublerequiredspotnumber · doublerequiredstrikenumber · doublerequiredtime_to_expiry_yearsnumber · doublerequired
Responses
200 Numerical result
application/json
application/protobuf
Response headers
x-request-idstring- Unique service-generated request identifier
400 Malformed request
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
401 Credential missing or not verifiable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
402 The account's funding is spent until a top-up or the next budget period
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
403 The account is not permitted, or its plan does not include this operation
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
406 Response media type is not acceptable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
408 Request body deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
409 The reservation expired before execution began
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
413 Request too large
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
415 Unsupported media type
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
422 Invalid pricing request, or work that cannot be priced under the account's limits
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
429 Request rate or concurrent request allowance exhausted
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
500 Pricing failure
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
503 Capacity exhausted, funding, policy or admission temporarily unavailable, or service draining
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
504 Compute deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
Ordered batch results
curl --fail-with-body --request POST '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
}
]
}'Request body required
BatchImpliedVolatilityRequest encoded as JSON or morphiq.ferro_risk.v1.BatchImpliedVolatilityRequest
application/json
application/protobuf
Ordered request envelope; runtime applies the pinned plan limit.
Additional fields are not accepted.
requestsarray of ImpliedVolatilityRequestrequired
Responses
200 Ordered batch results
application/json
application/protobuf
Response headers
x-request-idstring- Unique service-generated request identifier
400 Malformed request
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
401 Credential missing or not verifiable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
402 The account's funding is spent until a top-up or the next budget period
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
403 The account is not permitted, or its plan does not include this operation
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
406 Response media type is not acceptable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
408 Request body deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
409 The reservation expired before execution began
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
413 Request too large
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
415 Unsupported media type
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
422 Invalid batch request, or work that cannot be priced under the account's limits
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
429 Request rate or concurrent request allowance exhausted
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
500 Pricing failure
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
503 Ingress or weighted compute capacity exhausted, or funding, policy or admission temporarily unavailable
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
504 Compute deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
Price calculated
curl --fail-with-body --request POST '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
}'Request body required
PriceRequest encoded as JSON or morphiq.ferro_risk.v1.PriceRequest
application/json
application/protobuf
A single option-pricing request. All numeric fields are required.
Additional fields are not accepted.
dividend_schedulearray of DividendEventoptionalDiscrete cash dividends within the option's life. American Bjerksund-Stensland 2002 only; omit for continuous `dividend_yield` alone.
maxItems: 16Array item schema
dividend_yieldnumber · doublerequiredexercise_styleExerciseStylerequiredmodel_versionstring | nulloptionalOptional algorithm-version pin. Omit to use the current version.
option_typeOptionTyperequiredpricing_modelPricingModelrequiredrisk_free_ratenumber · doublerequiredspotnumber · doublerequiredstrikenumber · doublerequiredtime_to_expiry_yearsnumber · doublerequiredvolatilitynumber · doublerequired
Responses
200 Price calculated
application/json
application/protobuf
Response headers
x-request-idstring- Unique service-generated request identifier
400 Malformed request
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
401 Credential missing or not verifiable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
402 The account's funding is spent until a top-up or the next budget period
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
403 The account is not permitted, or its plan does not include this operation
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
406 Response media type is not acceptable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
408 Request body deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
409 The reservation expired before execution began
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
413 Request too large
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
415 Unsupported media type
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
422 Invalid pricing request, or work that cannot be priced under the account's limits
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
429 Request rate or concurrent request allowance exhausted
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
500 Pricing failure
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
503 Capacity exhausted, funding, policy or admission temporarily unavailable, or service draining
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
504 Compute deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
Ordered batch results
curl --fail-with-body --request POST '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
}
]
}'Request body required
BatchPriceRequest encoded as JSON or morphiq.ferro_risk.v1.BatchPriceRequest
application/json
application/protobuf
An ordered batch of option-pricing requests.
Additional fields are not accepted.
requestsarray of PriceRequestrequired
Responses
200 Ordered batch results
application/json
application/protobuf
Response headers
x-request-idstring- Unique service-generated request identifier
400 Malformed request
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
401 Credential missing or not verifiable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
402 The account's funding is spent until a top-up or the next budget period
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
403 The account is not permitted, or its plan does not include this operation
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
406 Response media type is not acceptable
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
408 Request body deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
409 The reservation expired before execution began
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
413 Request too large
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
415 Unsupported media type
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
422 Invalid batch request, or work that cannot be priced under the account's limits
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
429 Request rate or concurrent request allowance exhausted
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
500 Pricing failure
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
503 Ingress or weighted compute capacity exhausted, or funding, policy or admission temporarily unavailable
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
504 Compute deadline exceeded
application/problem+json
Response headers
x-request-idstring- Unique service-generated request identifier
Compatibility readiness check
curl --fail-with-body --request GET 'https://api.morphiqlabs.com/health'Responses
200 Compatibility readiness check
application/json
Response headers
x-request-idstring- Unique service-generated request identifier
503 Service is draining or no valid policy is available
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
Process is alive
curl --fail-with-body --request GET 'https://api.morphiqlabs.com/live'Responses
200 Process is alive
application/json
Response headers
x-request-idstring- Unique service-generated request identifier
OpenAPI 3.1 service contract
curl --fail-with-body --request GET 'https://api.morphiqlabs.com/openapi.json'Responses
200 OpenAPI 3.1 service contract
application/json
any JSON value
Response headers
x-request-idstring- Unique service-generated request identifier
Service accepts protected work under a valid policy
curl --fail-with-body --request GET 'https://api.morphiqlabs.com/ready'Responses
200 Service accepts protected work under a valid policy
application/json
Response headers
x-request-idstring- Unique service-generated request identifier
503 Service is draining or no valid policy is available
application/problem+json
Response headers
Retry-Afterstring- Minimum retry delay in seconds
x-request-idstring- Unique service-generated request identifier
Data schemas
Field types, required values and constraints from the OpenAPI contract.
BatchFusedAnalyticsItemResult #
Ordered result with an explicit per-item failure alternative.
all of
Must satisfy every schema below:
Part 2
indexinteger · int32required- minimum: 0
BatchFusedAnalyticsOutcome #
one of
Must satisfy exactly one schema below:
Variant 1
resultFusedAnalyticsResultrequiredstatusstringrequiredAllowed values:
"success"
Variant 2
errorErrorBodyrequiredstatusstringrequiredAllowed values:
"error"
BatchFusedAnalyticsRequest #
Ordered request envelope; runtime applies the pinned plan limit.
Additional fields are not accepted.
requestsarray of FusedAnalyticsRequestrequired
BatchFusedAnalyticsResponse #
One metadata block for the entire admitted batch.
metadataResponseMetadatarequiredresultsarray of BatchFusedAnalyticsItemResultrequiredArray item schema
BatchGreeksAllTenItemResult #
Ordered result with an explicit per-item failure alternative.
all of
Must satisfy every schema below:
Part 1
Part 2
indexinteger · int32required- minimum: 0
BatchGreeksAllTenOutcome #
one of
Must satisfy exactly one schema below:
Variant 1
resultGreeksAllTenResultrequiredstatusstringrequiredAllowed values:
"success"
Variant 2
errorErrorBodyrequiredstatusstringrequiredAllowed values:
"error"
BatchGreeksAllTenRequest #
Ordered request envelope; runtime applies the pinned plan limit.
Additional fields are not accepted.
requestsarray of GreeksAllTenRequestrequired
BatchGreeksAllTenResponse #
One metadata block for the entire admitted batch.
metadataResponseMetadatarequiredresultsarray of BatchGreeksAllTenItemResultrequiredArray item schema
BatchImpliedVolatilityItemResult #
Ordered result with an explicit per-item failure alternative.
all of
Must satisfy every schema below:
Part 2
indexinteger · int32required- minimum: 0
BatchImpliedVolatilityOutcome #
one of
Must satisfy exactly one schema below:
Variant 1
resultImpliedVolatilityResultrequiredstatusstringrequiredAllowed values:
"success"
Variant 2
errorErrorBodyrequiredstatusstringrequiredAllowed values:
"error"
BatchImpliedVolatilityRequest #
Ordered request envelope; runtime applies the pinned plan limit.
Additional fields are not accepted.
requestsarray of ImpliedVolatilityRequestrequired
BatchImpliedVolatilityResponse #
One metadata block for the entire admitted batch.
metadataResponseMetadatarequiredresultsarray of BatchImpliedVolatilityItemResultrequiredArray item schema
BatchItemResult #
Ordered result for one batch element.
all of
BatchOutcome #
Per-item batch outcome. Structural request failures remain request-level errors.
one of
Must satisfy exactly one schema below:
Variant 1
resultPriceResultrequiredstatusstringrequiredAllowed values:
"success"
Variant 2
errorErrorBodyrequiredstatusstringrequiredAllowed values:
"error"
BatchPriceRequest #
An ordered batch of option-pricing requests.
Additional fields are not accepted.
requestsarray of PriceRequestrequired
BatchPriceResponse #
Successful response for a batch, including any per-item pricing failures.
metadataResponseMetadatarequiredresultsarray of BatchItemResultrequiredArray item schema
DividendEvent #
One discrete cash dividend. Time is a year fraction on the same basis as `time_to_expiry_years`, not a calendar date. The contract carries no calendar, day-count convention or timezone, and introducing one here to express a dividend date would add a basis the rest of the contract does not have and cannot validate. The engine's own `DividendEvent` is `ex_time_years` for the same reason.
Additional fields are not accepted.
cash_amountnumber · doublerequiredCash amount per share, in the same currency as spot and strike.
ex_time_yearsnumber · doublerequiredEx-dividend time as a year fraction from valuation.
ErrorBody #
Stable, machine-readable error details.
codestringrequiredfieldstring | nulloptionalmessagestringrequired
ErrorEnvelope #
Top-level HTTP error envelope.
errorErrorBodyrequiredmetadataResponseMetadatarequired
ExerciseStyle #
Contract exercise convention, independent of the pricing algorithm.
string
Allowed values: "european" "american"
FusedAnalyticsRequest #
A request for price and Greeks, optionally at a volatility solved from an observed premium first. With `market_price`, volatility is solved and the Greeks are evaluated at the solved value — one admission, one solve, and the solved point passed inward as verified evidence rather than re-derived. Without it, the supplied `volatility` is used and the result is the all-ten-Greeks operation under another name.
Additional fields are not accepted.
dividend_schedulearray of DividendEventoptionaldividend_yieldnumber · doublerequiredexercise_styleExerciseStylerequiredmarket_pricenumber | null · doubleoptionalThe observed premium to invert before evaluating the Greeks.
model_versionstring | nulloptionaloption_typeOptionTyperequiredpricing_modelPricingModelrequiredrisk_free_ratenumber · doublerequiredspotnumber · doublerequiredstrikenumber · doublerequiredtime_to_expiry_yearsnumber · doublerequiredvolatilitynumber · doublerequiredUsed only when `market_price` is absent.
FusedAnalyticsResponse #
Successful response for one fused-analytics operation.
metadataResponseMetadatarequiredresultFusedAnalyticsResultrequired
FusedAnalyticsResult #
Price, Greeks and — when a premium was supplied — the solve that produced the volatility they were evaluated at.
greeksGreeksAllTenrequiredimplied_volatilityone ofoptionalMust satisfy exactly one schema below:
Variant 1
null
Variant 2
Present only when the request supplied `market_price`.
model_versionstringrequiredpricenumber · doublerequiredpricing_modelResolvedPricingModelrequired
GreeksAllTen #
The ten Greeks, on the contract's stated bases. Time derivatives are **per year**. The engine reports them per calendar day, which embeds a 365-day calendar; the contract carries no calendar, so the service scales by the engine's own day count at this boundary and the caller applies whichever convention it holds. Vega is raw `dV/dσ` per unit volatility, not per point. Nothing else is rescaled.
charmnumber · doublerequired`d²V/(dS dt)`, **per year**.
colornumber · doublerequired`d³V/(dS² dt)`, **per year**.
deltanumber · doublerequired`dV/dS`.
gammanumber · doublerequired`d²V/dS²`.
rhonumber · doublerequired`dV/dr`, per unit rate.
thetanumber · doublerequired`dV/dt`, **per year**.
vannanumber · doublerequired`d²V/(dS dσ)`, per unit volatility.
veganumber · doublerequired`dV/dσ`, per unit volatility.
vetanumber · doublerequired`d²V/(dσ dt)`, **per year** per unit volatility.
volganumber · doublerequired`d²V/dσ²`, per unit volatility squared.
GreeksAllTenRequest #
A request for the price and all ten Greeks at a supplied volatility. The same shape as `PriceRequest`: the Greeks are derivatives of the price, so they are a property of the same contract and the same coordinates.
Additional fields are not accepted.
dividend_schedulearray of DividendEventoptionalAccepted by the wire contract, refused by this operation until the engine exposes schedule-aware Greeks without a premium (#330). A schedule is served on `FusedAnalytics` with `market_price`.
maxItems: 16Array item schema
dividend_yieldnumber · doublerequiredexercise_styleExerciseStylerequiredmodel_versionstring | nulloptionaloption_typeOptionTyperequiredpricing_modelPricingModelrequiredrisk_free_ratenumber · doublerequiredspotnumber · doublerequiredstrikenumber · doublerequiredtime_to_expiry_yearsnumber · doublerequiredvolatilitynumber · doublerequired
GreeksAllTenResponse #
Successful response for one all-ten-Greeks operation.
metadataResponseMetadatarequiredresultGreeksAllTenResultrequired
GreeksAllTenResult #
The price and Greeks of one contract at the volatility supplied.
greeksGreeksAllTenrequiredmodel_versionstringrequiredpricenumber · doublerequiredpricing_modelResolvedPricingModelrequired
ImpliedVolatilityRequest #
A request to invert an observed premium into a volatility. Carries `market_price` and no `volatility`: volatility is the unknown being solved for, so a request that supplied one would be asking the service to ignore it.
Additional fields are not accepted.
dividend_schedulearray of DividendEventoptional- maxItems: 16
Array item schema
dividend_yieldnumber · doublerequiredexercise_styleExerciseStylerequiredmarket_pricenumber · doublerequiredThe observed premium to invert.
model_versionstring | nulloptionaloption_typeOptionTyperequiredpricing_modelPricingModelrequiredrisk_free_ratenumber · doublerequiredspotnumber · doublerequiredstrikenumber · doublerequiredtime_to_expiry_yearsnumber · doublerequired
ImpliedVolatilityResponse #
Successful response for one implied-volatility operation.
metadataResponseMetadatarequiredresultImpliedVolatilityResultrequired
ImpliedVolatilityResult #
A solved implied volatility and the diagnostics that qualify it.
implied_volatilitynumber · doublerequiredDecimal fraction, on the same basis as `PriceRequest.volatility`.
iterationsinteger · int32required- minimum: 0
model_versionstringrequiredpricing_modelResolvedPricingModelrequiredresidualnumber · doublerequiredresidual_basisResidualBasisrequiredused_fallbackbooleanrequiredWhether the solve left its primary path. Not a quality signal on its own: an American solve inverts by bisection and reports `true` for every live solve, while a Bachelier solve reports `false` because bisection is its canonical solver rather than a degraded fallback.
OptionType #
Option payoff direction.
string
Allowed values: "call" "put"
PolicyResponseMetadata #
Pinned policy identity and contributing record versions nested in response metadata.
planstringrequiredVersioned plan reference, formatted as id@version.
recordsarray of stringrequiredContributing versioned records in resolution precedence order.
Array item schema
string
revisionstringrequiredFull opaque revision, encoded as 64 lowercase hexadecimal digits.
snapshot_idstringrequired
PriceRequest #
A single option-pricing request. All numeric fields are required.
Additional fields are not accepted.
dividend_schedulearray of DividendEventoptionalDiscrete cash dividends within the option's life. American Bjerksund-Stensland 2002 only; omit for continuous `dividend_yield` alone.
maxItems: 16Array item schema
dividend_yieldnumber · doublerequiredexercise_styleExerciseStylerequiredmodel_versionstring | nulloptionalOptional algorithm-version pin. Omit to use the current version.
option_typeOptionTyperequiredpricing_modelPricingModelrequiredrisk_free_ratenumber · doublerequiredspotnumber · doublerequiredstrikenumber · doublerequiredtime_to_expiry_yearsnumber · doublerequiredvolatilitynumber · doublerequired
PriceResponse #
Successful response for one pricing operation.
metadataResponseMetadatarequiredresultPriceResultrequired
PriceResult #
The transport-neutral result of one pricing operation.
exercise_styleExerciseStylerequiredmodel_versionstringrequiredStable revision of the selected pricing algorithm.
option_typeOptionTyperequiredpricenumber · doublerequiredpricing_modelResolvedPricingModelrequired
PricingModel #
Pricing algorithm selection. `Auto` resolves from the exercise style.
string
Allowed values: "auto" "black_scholes_merton" "bjerksund_stensland_2002" "bjerksund_stensland_1993"
ProtobufBody #
string · binary
ResidualBasis #
The basis a solved residual is expressed in. The residual is not one quantity. European and Black paths report a forward-normalised price residual comparable against the engine's convergence threshold; Bachelier and American Bjerksund-Stensland report a raw option-price residual. Publishing the number without its basis would invite exactly the cross-model comparison it does not support, so the basis travels with it and a client that ignores this field cannot silently get it wrong.
string
Allowed values: "forward_normalised_price" "option_price"
ResolvedPricingModel #
Pricing algorithm selected after resolving an input request. Unlike [`PricingModel`], this output-only type cannot represent `auto`.
string
ResponseMetadata #
Metadata shared by every successful response and API error.
api_versionstringrequiredbudget_periodstring | nulloptionalbudget_reset_atstring | nulloptionalUTC end of the budget period from the pinned account snapshot, when known.
compute_schedule_versionstringrequiredengine_versionstringrequiredVersion of the FerroRisk service and linked pricing engine.
fcu_chargedinteger | null · int64optionalCommitted commercial charge, including on post-commit failures. Absent in open development mode; zero for protected pre-commit refusals.
minimum: 0fcu_quotedinteger | null · int64optionalCommercial quote; absent until reservation succeeds.
minimum: 0fcu_schedule_idstring | nulloptionalfcu_schedule_versionstring | nulloptionalpolicyone ofoptionalremaining_fcu_instance_estimateinteger | null · int64optionalInstance estimate, never an authoritative account balance or authorization input.
minimum: 0request_idstringrequiredunits_chargedinteger · int64required- minimum: 0
StatusResponse #
Liveness/readiness representation.
servicestringrequiredstatusstringrequiredversionstringrequired