API reference · Trading
Create a quote
POST/v1/quotes
A firm price for a buy or sell, valid for a few seconds (expires_at says when) and accepted at most once with POST /v1/trades. Give exactly one of base_amount and quote_amount. Refused with trading_halted for a short while after a fast price move.
Parameters
Idempotency-Keystringheaderoptional1 to 64 characters of [A-Za-z0-9_-]. Kept for 24 h; reuse it to retry safely.
Request body
application/json · CreateQuoteRequest. Unknown fields are rejected.
assetstringrequiredAn upper-case asset symbol.
sidestring (enum)requiredbase_amountstring (decimal)optionalAmount of the asset. Give this or quote_amount.
quote_amountstring (decimal)optionalAmount of USDC. Give this or base_amount.
Responses
201 Created
The quote. application/json · Quote
idstringassetstringAn upper-case asset symbol.
sidestring (enum)quote_currency"USDC"base_amountstring (decimal)quote_amountstring (decimal)pricestring (decimal)isk_estimatestring (decimal)nullableIndicative.
statusstring (enum)created_atstring (date-time)expires_atstring (date-time)trade_idstringnullable
Every response carries MK-Request-Id, plus RateLimit-Policy and RateLimit.
Errors
Errors use the error envelope. Match on code.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The request is malformed: bad JSON, an unknown or invalid field, or a missing header. |
| 401 | invalid_signature | The MK-* headers are missing or malformed, the key id is unknown, or the signature doesn't match. |
| 401 | key_expired | The key has passed its expiry date. |
| 401 | key_revoked | The key was revoked. |
| 401 | timestamp_out_of_range | MK-Timestamp is more than 30 seconds from the server clock. |
| 401 | nonce_reused | This key already used this MK-Nonce. |
| 403 | ip_not_allowed | The request came from an address outside the key's IP allowlist. |
| 403 | insufficient_scope | The key doesn't have the scope this endpoint needs. |
| 403 | account_restricted | The account can't use the API right now (for example locked, inactive, or onboarding not finished). |
| 403 | api_access_disabled | API access is switched off. |
| 409 | idempotency_conflict | This Idempotency-Key was used with a different request body. |
| 409 | idempotency_in_progress | A request with this Idempotency-Key is still being processed. |
| 413 | payload_too_large | The request body is larger than 8 KB. |
| 415 | unsupported_media_type | Request bodies must be application/json. |
| 422 | insufficient_funds | The available balance doesn't cover the trade, gift card or withdrawal. |
| 422 | amount_below_minimum | The amount is below the minimum. |
| 422 | amount_above_maximum | The amount is above the maximum. |
| 422 | asset_not_tradable | The asset can't be traded right now. |
| 422 | limit_exceeded | A daily or 30-day limit would be exceeded. |
| 429 | rate_limited | Too many requests. Wait for Retry-After seconds. |
| 429 | too_many_concurrent_requests | Too many requests in flight for this key or account. |
| 429 | key_suspended | The key is suspended, for example after sustained rate limiting. |
| 500 | internal_error | Something went wrong on our side. |
| 502 | bad_gateway | An upstream service answered unexpectedly. |
| 503 | overloaded | The service is overloaded. Retry after Retry-After seconds. |
| 503 | service_unavailable | The service is temporarily unavailable. |
| 503 | maintenance | The API is read-only for maintenance. |
| 503 | trading_halted | Trading is paused: switched off, or paused for this asset for a short while after a fast price move. |
| 504 | gateway_timeout | An upstream service didn't answer in time. A POST may still complete; retry with the same Idempotency-Key. |
Request
# Signed by sign-headers.sh: see Authentication
body='{"asset":"BTC","side":"buy","quote_amount":"100.00"}'
curl https://public-api.myntkaup.is/v1/quotes \
-H "Content-Type: application/json" \
$(./sign-headers.sh POST /v1/quotes "$body" | sed 's/^/-H /') \
--data "$body"import { Myntkaup } from "@myntkaup/api";
const client = new Myntkaup(); // reads the key from the environment
const quote = await client.quotes.create({ asset: "BTC", side: "buy", quoteAmount: "100.00" });
console.log(quote.id, quote.base_amount, quote.expires_at);from myntkaup import Myntkaup
client = Myntkaup() # reads the key from the environment
quote = client.quotes.create(asset="BTC", side="buy", quote_amount="100.00")
print(quote["id"], quote["base_amount"], quote["expires_at"])Response
{
"id": "qt_01JB8X2Q4M7Z3V9K5T1N6R0P2W",
"asset": "BTC",
"side": "buy",
"quote_currency": "USDC",
"base_amount": "0.00104210",
"quote_amount": "100.00",
"price": "95960.12",
"isk_estimate": "13421",
"status": "open",
"created_at": "2026-11-03T10:15:10Z",
"expires_at": "2026-11-03T10:15:20Z",
"trade_id": null
}Base URL https://public-api.myntkaup.is