Skip to content
Orvyn

USD / JPY, spot

by Orvyn · 1 source · a report every 2 min

Signed by Orvyn from the provider’s API

Per call
$0.005
sold in packs
Smallest payment
$0.20
what Orvyn settles on chain
A report every
2 min
from 1 source
Uptime, 30 days
Measuring · 1 of 7 days
measured by Orvyn
Calls, last 30 days
0

Endpoint

GET /v1/feeds/orvyn/usd-jpy-spot/latest

Bought a pack on this feed? Your code spends it with one header. Make an API key, then use the first example below.

One call
$0.005, sold in packs only
Pack of 100
$0.50, valid 30 days
Pack of 1,000
$5.00, valid 30 days
History page
5 calls
Pays
0xe240cF24…EfDe4C92

API key

terminal
# For a pack you already bought. Make a key in the dashboard, under API keys.
curl https://orvyn.me/gw/v1/feeds/orvyn/usd-jpy-spot/latest \
  -H "Authorization: Bearer <your API key>"

# The calls left in your packs.
curl https://orvyn.me/gw/v1/packs \
  -H "Authorization: Bearer <your API key>"

HTTP

terminal
# 1. Ask. The answer is 402 with the price, in the PAYMENT-REQUIRED header.
curl -i https://orvyn.me/gw/v1/feeds/orvyn/usd-jpy-spot/latest

# 2. Sign the USDG authorization it describes, then ask again.
curl https://orvyn.me/gw/v1/feeds/orvyn/usd-jpy-spot/latest \
  -H "PAYMENT-SIGNATURE: <base64 payment payload>"

TypeScript

buy.ts
import {Orvyn} from '@orvyn/sdk'

const orvyn = new Orvyn({gatewayUrl: 'https://orvyn.me/gw', account, maxSpendUsdg: 5_000_000n})

const report = await orvyn.read('orvyn/usd-jpy-spot') // pays, or spends a pack, by itself
report.value      // 3 decimals, a bigint
report.checks     // already verified: signer, kind, decimals, payload, age

TypeScript, with an API key

read.ts
import {Orvyn} from '@orvyn/sdk'

// No wallet on the server: the key spends calls you bought ahead and cannot buy more.
const orvyn = new Orvyn({gatewayUrl: 'https://orvyn.me/gw', apiKey: process.env.ORVYN_API_KEY})

const report = await orvyn.read('orvyn/usd-jpy-spot') // one call from your pack, nothing signed
report.value      // 3 decimals, a bigint
report.callsLeft  // what the pack still holds

Solidity

Example.sol
import {OrvynConsumer} from "@orvyn/contracts/src/OrvynConsumer.sol";

contract Example is OrvynConsumer {
    bytes32 constant USD_JPY_SPOT = 0x2a85d479ad7d32cb7dcab98e0d08d3613439d3b737a49792bf3155067219036c;

    function settle(bytes calldata report, bytes calldata sig) external {
        int256 value = _readOnce(USD_JPY_SPOT, report, sig, Policy({
            maxAgeSec: 240,
            allowedKinds: KIND_MANAGED,
            minValue: 0,
            maxValue: type(int256).max
        }));
        // use value, scaled by 3 decimals
    }
}

Agents (MCP)

mcp.json
{
  "mcpServers": {
    "orvyn": {
      "command": "npx",
      "args": ["-y", "@orvyn/mcp"],
      "env": {"ORVYN_GATEWAY_URL": "https://orvyn.me/gw", "ORVYN_PRIVATE_KEY": "<a wallet made for this agent>", "ORVYN_MAX_SPEND_USDG": "1000000"}
    }
  }
}

Agents (MCP), with an API key

mcp.json
{
  "mcpServers": {
    "orvyn": {
      "command": "npx",
      "args": ["-y", "@orvyn/mcp"],
      "env": {"ORVYN_GATEWAY_URL": "https://orvyn.me/gw", "ORVYN_API_KEY": "<your API key>"}
    }
  }
}

Response schema

schema.json
{
  "type": "object",
  "title": "USD / JPY, spot",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "value",
    "observedAtMs"
  ],
  "properties": {
    "value": {
      "type": "string"
    },
    "observedAtMs": {
      "type": "string"
    }
  }
}