Leiðbeiningar

Kaupa eða selja rafmyntir

Biddu um verðtilboð og samþykktu það innan nokkurra sekúndna. Hér er farið yfir upphæðir, viðskipti í bið, villurnar sem búast má við, hvenær verðtilboði getur verið hafnað og hvernig á að reyna aftur án þess að eiga viðskiptin tvisvar.

Áður en þú byrjar

  • Lykill með heimildina trade. Bættu við account:read til að kanna innistæðuna fyrst. Við mælum með að takmarka lykilinn við leyfðar IP tölur.
  • USDC á aðganginum til að kaupa fyrir, eða rafmyntin sem á að selja. Viðskipti eru gerð upp í USDC.
  • Opið fyrir viðskipti í gegnum API-ið: GET/v1/status sýnir trading_enabled.

Ferlið

  1. Búðu til verðtilboð

    POST /v1/quotes með rafmynt, kaupum eða sölu og upphæð skilar bindandi verði sem gildir í nokkrar sekúndur (5 eins og er).

  2. Samþykktu það

    POST /v1/trades með auðkenni verðtilboðsins og Idempotency-Key, áður en expires_at rennur upp. Svarið eru viðskiptin.

  3. Fylgstu með viðskiptum í bið

    Yfirleitt er viðskiptunum lokið strax (filled, 201). Ef þau eru enn í bið (pending, 202) skaltu kanna GET /v1/trades/{id} þar til þau eru filled eða failed.

Upphæðir

Gefðu upp nákvæmlega annað af quote_amount (í USDC) og base_amount (í rafmyntinni):

Þú viltSendu
Kaupa BTC fyrir 100 USDCside: "buy", quote_amount: "100.00"
Fá 0,001 BTCside: "buy", base_amount: "0.001"
Selja 0,001 BTCside: "sell", base_amount: "0.001"
Selja BTC fyrir 100 USDCside: "sell", quote_amount: "100.00"

Verðtilboðið reiknar hina upphæðina á verði þóknunarþreps aðgangsins; þóknunin er innifalin í verðinu. Upphæðir eru tugatölur á strengjaformi, námundaðar að base_increment rafmyntarinnar. Minnstu og stærstu viðskipti hverrar rafmyntar, í USDC, eru í GET/v1/assets, og dagleg API velta þín er í GET/v1/limits. GET/v1/assets sýnir allar rafmyntir sem þú getur átt viðskipti með, og ný rafmynt birtist þar um leið og Myntkaup skráir hana.

Búðu til verðtilboð

# 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"])
Svar · 201
{
  "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
}
  • Verðtilboð gildir til expires_at, nokkrum sekúndum eftir created_at (5 eins og er), og það má samþykkja einu sinni.
  • Hver lykill getur haft mest 5 opin verðtilboð; það sjötta fær 422 limit_exceeded.
  • Verðtilboðið kannar strax stærðina, hvort viðskipti með rafmyntina séu opin og aðganginn þinn, svo flest vandamál koma fram hér frekar en við viðskiptin: amount_below_minimum, amount_above_maximum, asset_not_tradable, limit_exceeded, trading_halted, service_unavailable.
  • GET /v1/quotes/{id} sýnir status þess: open, accepted, expired, filled eða failed, og trade_id þegar það hefur verið samþykkt.

Samþykktu verðtilboðið

# Signed by sign-headers.sh: see Authentication
body='{"quote_id":"qt_01JB8X2Q4M7Z3V9K5T1N6R0P2W"}'
idempotency_key=$(uuidgen)   # reuse it to retry safely
curl https://public-api.myntkaup.is/v1/trades \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $idempotency_key" \
  $(./sign-headers.sh POST /v1/trades "$body" | sed 's/^/-H /') \
  --data "$body"
import { Myntkaup } from "@myntkaup/api";

const client = new Myntkaup(); // reads the key from the environment
// Sends a random Idempotency-Key unless you pass idempotencyKey.
const trade = await client.trades.create({ quoteId: "qt_01JB8X2Q4M7Z3V9K5T1N6R0P2W" });
console.log(trade.status, trade.base_amount);
from myntkaup import Myntkaup

client = Myntkaup()  # reads the key from the environment
# Sends a random Idempotency-Key unless you pass idempotency_key.
trade = client.trades.create(quote_id="qt_01JB8X2Q4M7Z3V9K5T1N6R0P2W")
print(trade["status"], trade["base_amount"])
Svar · 201
{
  "id": "tr_01JB8X2Q4M7Z3V9K5T1N6R0P2W",
  "quote_id": "qt_01JB8X2Q4M7Z3V9K5T1N6R0P2W",
  "asset": "BTC",
  "side": "buy",
  "quote_currency": "USDC",
  "base_amount": "0.00104210",
  "quote_amount": "100.00",
  "price": "95960.12",
  "status": "filled",
  "source": "public_api",
  "created_at": "2026-11-03T10:15:12Z",
  "filled_at": "2026-11-03T10:15:13Z",
  "failure_reason": null
}

201 Created þýðir að viðskiptunum er lokið: status er filled, eða failed með failure_reason. 202 Accepted þýðir að þau eru enn pending.

Það sem getur farið úrskeiðis:

KóðiHvað gerðistHvað á að gera
quote_expiredTími verðtilboðsins var liðinn.Búðu til nýtt verðtilboð og samþykktu það fyrr.
price_movedMarkaðsverðið hreyfðist of langt frá verðinu í tilboðinu.Búðu til nýtt verðtilboð.
quote_already_usedVerðtilboðið var þegar samþykkt, ef til vill í fyrri tilraun.GET /v1/quotes/{id} gefur trade_id þess.
insufficient_fundsLaus innistæða dugar ekki lengur.Athugaðu GET /v1/balances.
limit_exceededFarið yrði yfir API veltu eða fjölda viðskipta dagsins.Bíddu eftir næsta UTC degi.
trading_halted (503)Hlé er á viðskiptum, eða á þessari rafmynt í nokkrar sekúndur.Reyndu aftur eftir Retry-After sekúndur.
service_unavailable (503)Við höfðum ekkert nýlegt verð á rafmyntinni.Reyndu aftur eftir Retry-After sekúndur.
too_many_concurrent_requests (429)Önnur viðskipti aðgangsins eru enn í vinnslu.Bíddu eftir þeim, og reyndu svo aftur.

Þegar verðtilboði er hafnað

Verðtilboð heldur verði sínu aðeins í þær fáu sekúndur sem það gildir, og aðeins meðan markaðurinn helst nálægt því. Við athugum verðið aftur þegar þú samþykkir, og höfnum viðskiptunum ef markaðurinn hefur síðan hreyfst gegn verðtilboðinu meira en vikmörkin þín leyfa. Sömu reglur gilda um alla viðskiptavini:

  • Vikmörkin þín ráðast af þóknunarþrepinu: helmingur þess sem þóknunin skilur eftir þegar okkar eigin viðskiptakostnaður er dreginn frá, og aldrei meira en 0,5%. Lægstu þóknanirnar þola því minnstu hreyfingarnar.

    Þóknunin þínVikmörk eins og er
    1,2% eða meira0,50%
    1,00%0,41%
    0,50%0,16%
    0,25%0,035%

    Hreyfing þér í hag hafnar aldrei viðskiptum; þú færð verð verðtilboðsins hvort sem er.

  • Aðeins nýleg verð. Við gerum verðtilboð og framkvæmum viðskipti aðeins á verði sem er mest nokkurra sekúndna gamalt. Ef við höfum ekkert slíkt færðu 503 service_unavailable með Retry-After.

  • Hraður markaður. Eftir hraða hreyfingu á rafmynt (1% innan mínútu) er hlé á verðtilboðum og viðskiptum með hana í 30 sekúndur: 503 trading_halted með Retry-After. Appið heldur áfram.

  • Hvernig viðskiptin reynast. Við fylgjumst með hvernig viðskipti hvers lykils standa miðað við markaðinn á eftir. Lykill sem samþykkir að mestu eftir að markaðurinn hefur hreyfst gegn verðtilboðunum hans getur verið skoðaður og mörk hans lækkuð.

Viðskipti sem er hafnað kosta ekkert. Biddu um nýtt verðtilboð.

Viðskipti í bið

Viðskipti sem eru enn í vinnslu eftir 20 sekúndur, eða þar sem kanna þarf niðurstöðuna handvirkt, fá svarið 202 með status: "pending". Upphæðin er frátekin á meðan. Fylgstu með þeim með GET/v1/trades/{id}:

  • kannaðu eftir 1 sekúndu, og bíddu svo lengur á milli (2, 4, 8 sekúndur…);
  • hættu þegar status er filled eða failed;
  • ekki hefja önnur viðskipti með sömu fjármunum meðan þessi eru í bið.
Svar · 202
{
  "id": "tr_01JB8X2Q4M7Z3V9K5T1N6R0P2W",
  "quote_id": "qt_01JB8X2Q4M7Z3V9K5T1N6R0P2W",
  "asset": "BTC",
  "side": "buy",
  "quote_currency": "USDC",
  "base_amount": "0.00104210",
  "quote_amount": "100.00",
  "price": "95960.12",
  "status": "pending",
  "source": "public_api",
  "created_at": "2026-11-03T10:15:12Z",
  "filled_at": null,
  "failure_reason": null
}

Tímamörk og endurtekningar

Ef POST /v1/trades rennur út á tíma, eða svarar 502, 503 eða 504, skaltu reyna aftur með sama Idempotency-Key og sama meginmáli. Ef fyrri tilraunin fór í gegn færðu viðskipti hennar til baka; ef ekki eru þau framkvæmd núna. Reyndu aldrei aftur með nýjum lykli nema þú hafir staðfest með GET /v1/quotes/{id} að verðtilboðið hafi ekki verið samþykkt. Sjá síðuna Örugg endurtekning.

buy() og sell() föllin

SDK-in sjá um allt ferlið: þau búa til verðtilboðið, samþykkja það og fylgjast með viðskiptum í bið í allt að 30 sekúndur, með vaxandi bið. Þau skila viðskiptunum.

import { Myntkaup } from "@myntkaup/api";

const client = new Myntkaup();

const bought = await client.buy({ asset: "BTC", quoteAmount: "100.00" }); // spend 100 USDC
console.log(bought.status, bought.base_amount, bought.price);

const sold = await client.sell({ asset: "BTC", baseAmount: "0.0005" }); // sell 0.0005 BTC
console.log(sold.status, sold.quote_amount);
from myntkaup import Myntkaup

client = Myntkaup()

bought = client.buy(asset="BTC", quote_amount="100.00")  # spend 100 USDC
print(bought["status"], bought["base_amount"], bought["price"])

sold = client.sell(asset="BTC", base_amount="0.0005")  # sell 0.0005 BTC
print(sold["status"], sold["quote_amount"])

Viðskipti geta enn verið pending eftir 30 sekúndur fallsins. Athugaðu status áður en þú lítur svo á að þeim sé lokið.

Dæmi: regluleg kaup

Kaupir BTC fyrir 25 USDC, og reynir einu sinni enn með nýju verðtilboði ef verðið hreyfðist. Keyrðu það úr tímaáætlun, til dæmis cron, einu sinni á dag.

import { ApiError, Myntkaup } from "@myntkaup/api";

const client = new Myntkaup();

async function buyOnce() {
  for (let attempt = 1; attempt <= 2; attempt++) {
    try {
      return await client.buy({ asset: "BTC", quoteAmount: "25.00" });
    } catch (error) {
      const retryable = error instanceof ApiError && ["price_moved", "quote_expired"].includes(error.code);
      if (!retryable || attempt === 2) throw error;
    }
  }
}

const trade = await buyOnce();
console.log(new Date().toISOString(), trade?.id, trade?.status, trade?.base_amount);
from datetime import datetime, timezone

import myntkaup
from myntkaup import Myntkaup

client = Myntkaup()


def buy_once():
    for attempt in (1, 2):
        try:
            return client.buy(asset="BTC", quote_amount="25.00")
        except myntkaup.ApiError as error:
            if error.code not in ("price_moved", "quote_expired") or attempt == 2:
                raise


trade = buy_once()
print(datetime.now(timezone.utc).isoformat(), trade["id"], trade["status"], trade["base_amount"])

Gátlisti

  • Lykillinn hefur trade, leyfðar IP tölur, og ekkert sem hann þarf ekki.
  • Upphæðir eru tugatölur á strengjaformi, aldrei fleytitölur.
  • Hver viðskipti hafa einn Idempotency-Key, sem er notaður aftur við hverja endurtekningu.
  • price_moved og quote_expired leiða til nýs verðtilboðs, ekki lykkju.
  • trading_halted og service_unavailable bíða í Retry-After sekúndur.
  • Fylgst er með viðskiptum í bið með vaxandi bið.
  • request_id er skráð fyrir hverja villu.