Create an RFQ
Creates a request for quote, soliciting pricing from makers for one or more legs.
/rfqsAuthorization
UDX-Access-KeyAPI key · headerrequiredOpaque API key ID.
UDX-Access-TimestampAPI key · headerrequiredUnix time in milliseconds, within 30 seconds of server time.
UDX-Access-SignatureAPI key · headerrequiredStandard-base64 RSA-PSS/SHA-256 signature with a 32-byte salt.
AuthorizationBearer token (JWT) · headerrequiredBearer token for an active signed-in UDX user.
Header parameters
UDX-VersionstringDated API version (YYYY-MM-DD).
UDX-Idempotency-KeystringOptional client-generated key that makes a mutation safe to retry.
application/jsonclient_rfq_idClientIdrequiredA client-supplied correlation identifier.
tickerstringPublished single-leg or multi-leg market to request a quote for, identified by its ticker.
legsRfqLegListThe component markets and opposing sides that define the RFQ strategy, in the order supplied.
Show propertiesHide properties
RfqLegtickerTickerrequiredA human-meaningful natural key naming a single-leg or multi-leg market.
opposing_sidebooleanWhether this leg takes the side opposite the RFQ or the same side.
quantitystringNumber of contracts to quote, as a whole number.
cash_quantitystringSize of the RFQ in dollars.
sidestringrequiredThe side the customer wants to execute.
buysellaccount_idstringAccount to create the RFQ under. Required for an unrestricted API key; an account-restricted key uses its bound account.
202The exchange accepted the RFQ for processing.
rfqRfqSubmissionrequiredAn accepted RFQ submission.
Show propertiesHide properties
client_rfq_idClientIdrequiredA client-supplied correlation identifier.
400The request was malformed or the exchange rejected the RFQ at submission.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
401No valid credential was provided.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
403The credential lacks the trade scope.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
409This idempotency key is still in use, or its request completed with a response too large to replay. The problem type tells the two apart.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
422This idempotency key belongs to a different request.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
429The member rate limit was exceeded.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
500Something went wrong on UDX's side.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
503Either request admission is temporarily unavailable, or the submission itself failed indeterminately: the exchange may or may not have received the RFQ.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
curl -X POST "https://api.underdogexchange.com/rfqs" \
-H "UDX-Access-Key: API_KEY_ID" \
-H "UDX-Access-Timestamp: UNIX_MILLISECONDS" \
-H "UDX-Access-Signature: BASE64_SIGNATURE" \
-H "Content-Type: application/json" \
-d '{
"client_rfq_id": "rfq-20260804-001",
"ticker": "UDX-EXAMPLE-MARKET",
"quantity": "100",
"side": "buy"
}'{
"rfq": {
"client_rfq_id": "rfq-20260804-001"
}
}{
"type": "urn:udx:problem:rfq-rejected",
"title": "Bad Request",
"status": 400,
"detail": "RFQ rejected; it was not created",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:invalid-authentication-credentials",
"title": "Unauthorized",
"status": 401,
"detail": "invalid authentication credentials",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:insufficient-permissions",
"title": "Forbidden",
"status": 403,
"detail": "insufficient permissions",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:request-with-header-in-progress",
"title": "Conflict",
"status": 409,
"detail": "a request with this UDX-Idempotency-Key is already in progress",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:response-too-large-to-replay",
"title": "Conflict",
"status": 409,
"detail": "this request already executed, but its response was too large to replay; do not resend it with a fresh UDX-Idempotency-Key, read the affected resource to confirm the result",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:header-used-for-different-request",
"title": "Unprocessable Entity",
"status": 422,
"detail": "UDX-Idempotency-Key was already used for a different request",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:member-rate-limit-exceeded",
"title": "Too Many Requests",
"status": 429,
"detail": "this member has temporarily exceeded its request rate",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:internal-error",
"title": "Internal Server Error",
"status": 500,
"detail": "internal error",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:rfq-outcome-unknown",
"title": "Service Unavailable",
"status": 503,
"detail": "the RFQ may or may not have been created",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:request-admission-unavailable",
"title": "Service Unavailable",
"status": 503,
"detail": "request admission is temporarily unavailable",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}