Skip to main content
This endpoint is public and does not require authentication. Merchants and other services fetch this to discover your gateway’s capabilities and verify your signatures.

Implementation

Host this endpoint at the URL you register in the Router Registry. The response tells merchants:
  • Your public key - Used to verify your signed proofs
  • Your endpoint URL - Where to send API requests
  • Your capabilities - Which endpoints you support
  • Settlement preferences - Which currencies and providers you accept
  • KYC providers - Supported auto KYC providers that service accepts

Example Response

{
  "opencharge": "0.1",
  "name": "QuickPay Wallet",
  "profile": "Mobile wallet for fast payments",
  "icon": "https://wallet.example/icon.png",
  "config": {
    "publicKey": "a34b5c6d7e8f9a0b...",
    "endpoint": "https://api.wallet.example/opencharge",
    "capabilities": [
      "checkout.create",
      "orders.create.session",
      "transfer.create",
      "transfer.webhook"
    ],
    "settlement": {
      "currencies": ["USD", "EUR"],
      "accepts": [100, 101, 102]
    }
  },
  "kyc": [540, 737, 2836],
  "signature": "a1b2c3d4e5f6...7f1b",
  "contact": "dev@wallet.example"
}

Key Fields

FieldPurpose
profileDescription of your gateway service
config.publicKeyYour secp256k1 public key (128 hex chars)
config.endpointBase URL for your Opencharge API
config.capabilitiesList of supported operations
config.settlement.currenciesISO 4217 currency codes you support
config.settlement.acceptsOCIDs you accept for settlement proofs
kycSupported auto KYC providers that service accepts
signatureYour signature of the canonicalized config

Signing Your Config

Sign the config object to prove you control the private key:
const config = {
  publicKey: YOUR_PUBLIC_KEY,
  endpoint: "https://api.wallet.example/opencharge",
  capabilities: [
    "checkout.create",
    "orders.create.session",
    "transfer.create",
    "transfer.webhook"
  ],
  settlement: {
    currencies: ["USD", "EUR"],
    accepts: [100, 101, 102]
  }
};

const canonical = JSON.stringify(config, Object.keys(config).sort());
const signature = secp256k1_sign(YOUR_PRIVATE_KEY, SHA256(canonical));