IoMarkets API

IoMarkets API as documented publicly: 14 operations. Contract generated from the documentation by API Evangelist (2026-11-12); not the provider's own document.

GitHub OpenAPI

Operations 14

GET /v1/catalog List offers for a given type and optional country #
GET /v1/countries List every destination a product reaches #
GET /v1/fx Get indicative USDC↔local rate and estimate for a payout #
GET /v1/ledger Public ledger with aggregated order statistics #
POST /v1/links Add "ref": "" to POST https://iomarkets.app/v1/quote or POST https://iomarkets.app/v1/links. #
GET /v1/lookup Discover operator and top‑up offers for a phone number #
GET /v1/orders Poll an order until it reaches a terminal state #
POST /v1/orders Pay for a quote (x402 payment flow) #
GET /v1/pubkey Retrieve the server's ed25519 public key for receipt verification #
POST /v1/quote Add "ref": "" to POST https://iomarkets.app/v1/quote or POST https://iomarkets.app/v1/links. #
GET /v1/referrals Earn: referral share, paid on-chain #
POST /v1/verify Verify a receipt or whole order response signature #
POST /v1/vouchers/quote Group eSIMs: one payment, N claim links. #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/iomarkets-app:iomarkets-app-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

iomarkets-app-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: IoMarkets API
  version: '2026-11-12'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-12: 14 operation(s) read from 2 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; IoMarkets has published no machine-readable contract that the
    pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 0
    documentation: 14
    pages-with-code: 0
    pages-read: 2
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-12'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://iomarkets.app/v1/referrals
  - https://iomarkets.app/agent.md
paths:
  /v1/catalog:
    get:
      operationId: get_v1_catalog
      tags:
      - Catalog
      summary: List offers for a given type and optional country
      x-source: https://iomarkets.app/agent.md
      parameters:
      - name: type
        in: query
        required: true
        schema:
          type: string
        description: Offer type, e.g., topup or esim
      - name: country
        in: query
        required: false
        schema:
          type: string
        description: Country code to filter offers
      - name: limit
        in: query
        required: false
        schema:
          type: string
        description: Page size (0 for all)
      - name: offset
        in: query
        required: false
        schema:
          type: string
        description: Paging offset
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1CatalogResponse'
      x-evidence:
        kind: documentation
  /v1/countries:
    get:
      operationId: get_v1_countries
      tags:
      - Countries
      summary: List every destination a product reaches
      x-source: https://iomarkets.app/agent.md
      parameters:
      - name: type
        in: query
        required: true
        schema:
          type: string
        description: Product type, e.g., esim
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1CountriesResponse'
      x-evidence:
        kind: documentation
  /v1/fx:
    get:
      operationId: get_v1_fx
      tags:
      - Fx
      summary: Get indicative USDC↔local rate and estimate for a payout
      x-source: https://iomarkets.app/agent.md
      parameters:
      - name: to
        in: query
        required: true
        schema:
          type: string
        description: Target currency code
      - name: amount
        in: query
        required: true
        schema:
          type: string
        description: Amount in target currency
      - name: type
        in: query
        required: true
        schema:
          type: string
        description: Transaction type, e.g., payout
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1FxResponse'
      x-evidence:
        kind: documentation
  /v1/ledger:
    get:
      operationId: get_v1_ledger
      tags:
      - Ledger
      summary: Public ledger with aggregated order statistics
      x-source: https://iomarkets.app/agent.md
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1LedgerResponse'
      x-evidence:
        kind: documentation
  /v1/links:
    get:
      operationId: get_v1_links
      tags:
      - Links
      summary: Retrieve state of a specific pay link
      x-source: https://iomarkets.app/agent.md
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1LinksResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_v1_links
      tags:
      - Links
      summary: 'Add "ref": "<your Algorand address>" to POST https://iomarkets.app/v1/quote or POST https://iomarkets.app/v1/links.'
      x-source: https://iomarkets.app/v1/referrals
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1LinksRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/lookup:
    get:
      operationId: get_v1_lookup
      tags:
      - Lookup
      summary: Discover operator and top‑up offers for a phone number
      x-source: https://iomarkets.app/agent.md
      parameters:
      - name: phone
        in: query
        required: true
        schema:
          type: string
        description: Phone number in E.164 format
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1LookupResponse'
      x-evidence:
        kind: documentation
  /v1/orders:
    get:
      operationId: get_v1_orders
      tags:
      - Orders
      summary: Poll an order until it reaches a terminal state
      x-source: https://iomarkets.app/agent.md
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1OrdersResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_v1_orders
      tags:
      - Orders
      summary: Pay for a quote (x402 payment flow)
      x-source: https://iomarkets.app/agent.md
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1OrdersRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1OrdersResponse'
      x-evidence:
        kind: documentation
  /v1/pubkey:
    get:
      operationId: get_v1_pubkey
      tags:
      - Pubkey
      summary: Retrieve the server's ed25519 public key for receipt verification
      x-source: https://iomarkets.app/agent.md
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1PubkeyResponse'
      x-evidence:
        kind: documentation
  /v1/quote:
    post:
      operationId: post_v1_quote
      tags:
      - Quote
      summary: 'Add "ref": "<your Algorand address>" to POST https://iomarkets.app/v1/quote or POST https://iomarkets.app/v1/links.'
      x-source: https://iomarkets.app/v1/referrals
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1QuoteRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/referrals:
    get:
      operationId: get_v1_referrals
      tags:
      - Referrals
      summary: 'Earn: referral share, paid on-chain'
      description: GET https://iomarkets.app/v1/referrals · terms and leaderboard
      x-source: https://iomarkets.app/agent.md
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/verify:
    post:
      operationId: post_v1_verify
      tags:
      - Verify
      summary: Verify a receipt or whole order response signature
      x-source: https://iomarkets.app/agent.md
      parameters:
      - name: online
        in: query
        required: false
        schema:
          type: string
        description: Set to 0 to skip chain lookup
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1VerifyRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1VerifyResponse'
      x-evidence:
        kind: documentation
  /v1/vouchers/quote:
    post:
      operationId: post_v1_vouchers_quote
      tags:
      - Vouchers
      summary: 'Group eSIMs: one payment, N claim links.'
      description: 'POST https://iomarkets.app/v1/vouchers/quote  { "offerId": "<esim offerId>", "count": 10, "note": "Devcon 8 delegation" }
        → { "quoteId": "q_…", "price_usdc": "<count × one eSIM>", "vouchers": { "count", "unit_price_usdc", "claim_window_days" } }'
      x-source: https://iomarkets.app/agent.md
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1VouchersQuoteRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1VouchersQuoteResponse'
      x-evidence:
        kind: documentation
components:
  schemas:
    GetV1CatalogResponse:
      type: object
      properties:
        total:
          type: string
          description: Total number of offers
        next_offset:
          type: string
          description: Offset for next page if more results exist
        offers:
          type: string
          description: Array of offer objects
    GetV1CountriesResponse:
      type: object
      properties:
        countries:
          type: string
          description: Array of country codes
        enumerable:
          type: string
          description: Whether the supplier will list them
    GetV1FxResponse:
      type: object
      properties:
        rate:
          type: string
          description: Indicative exchange rate
        estimate:
          type: string
          description: Estimated USDC amount
    GetV1LedgerResponse:
      type: object
      properties:
        orders:
          type: string
          description: Total number of orders
        delivered_percent:
          type: string
          description: Percentage of delivered orders
        refunded_percent:
          type: string
          description: Percentage of refunded orders
        volume:
          type: string
          description: Total USDC volume
        by_country:
          type: string
          description: Breakdown of volume and orders per country
    GetV1LinksResponse:
      type: object
      properties:
        state:
          type: string
          description: '"open" | "paid" | "expired"'
    PostV1LinksRequest:
      type: object
      properties:
        ref:
          type: string
          description: Your Algorand address
      required:
      - ref
    GetV1LookupResponse:
      type: object
      properties:
        operator:
          type: string
          description: Operator name
        offers:
          type: string
          description: Available top‑up offers for the number
    GetV1OrdersResponse:
      type: object
      properties:
        orderId:
          type: string
          description: Order identifier
        status:
          type: string
          description: Current status (e.g., paid, delivered, refunded)
        terminal:
          type: string
          description: Boolean indicating if the order is in a terminal state
        receipt:
          type: string
          description: Signed receipt for delivered orders
    PostV1OrdersRequest:
      type: object
      properties:
        quoteId:
          type: string
          description: Quote identifier returned from /v1/quote
      required:
      - quoteId
    PostV1OrdersResponse:
      type: object
      properties:
        orderId:
          type: string
          description: Order identifier, e.g., "ord_…"
        status:
          type: string
          description: '"paid" after successful payment'
        status_url:
          type: string
          description: URL to poll for order status
    GetV1PubkeyResponse:
      type: object
      properties:
        public_key:
          type: string
          description: Hex‑encoded ed25519 public key
    PostV1QuoteRequest:
      type: object
      properties:
        ref:
          type: string
          description: Your Algorand address
      required:
      - ref
    PostV1VerifyRequest:
      type: object
      properties:
        receipt:
          type: string
          description: Receipt object or full order response to verify
      required:
      - receipt
    PostV1VerifyResponse:
      type: object
      properties:
        valid:
          type: string
          description: Boolean indicating if the signature is valid
        signer:
          type: string
          description: Identifier of the signer (should match server key)
        txids:
          type: string
          description: Confirmed transaction IDs if online lookup performed
    PostV1VouchersQuoteRequest:
      type: object
      properties:
        offerId:
          type: string
          description: eSIM offer identifier
        count:
          type: integer
          description: Number of eSIMs to purchase
        note:
          type: string
          description: Optional note for the batch
      required:
      - offerId
      - count
    PostV1VouchersQuoteResponse:
      type: object
      properties:
        quoteId:
          type: string
          description: Quote identifier
        price_usdc:
          type: string
          description: Total price in USDC (count × one eSIM)
        vouchers:
          type: object
          description: Details of the voucher batch
        vouchers.count:
          type: integer
          description: Number of vouchers
        vouchers.unit_price_usdc:
          type: string
          description: Price per single eSIM in USDC
        vouchers.claim_window_days:
          type: integer
          description: Days the claim link remains valid
tags:
- name: Catalog
- name: Countries
- name: Fx
- name: Ledger
- name: Links
- name: Lookup
- name: Orders
- name: Pubkey
- name: Quote
- name: Referrals
- name: Verify
- name: Vouchers