Skip to main content
GET
/
metadata.json
Get OCID metadata
curl --request GET \
  --url https://kyc.provider.example/opencharge/metadata.json
{
  "opencharge": "0.1",
  "name": "TrustVerify KYC",
  "profile": "Global KYC verification provider",
  "icon": "https://kyc.provider.example/icon.png",
  "config": {
    "publicKey": "a34b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b",
    "endpoint": "https://kyc.provider.example/opencharge",
    "capabilities": [
      "kyc.grant",
      "kyc.validate",
      "kyc.data"
    ]
  },
  "kyc": [],
  "signature": "a1b2c3d4e5f6...7f1b",
  "contact": "support@kycprovider.example"
}
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));

Response

200 - application/json

OCID metadata document

opencharge
string
required
name
string
required
config
object
required
signature
string
required
profile
string
icon
string<uri>
kyc
integer[]

Supported auto KYC providers that service accepts

contact
string