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. Other services fetch this to discover your capabilities and verify your signatures.

Implementation

Host this endpoint at the URL you register in the Router Registry. The response tells other services:
  • Your public key - Used to verify your signed KYC data
  • Your endpoint URL - Where to send API requests
  • Your capabilities - Which KYC endpoints you support

Example Response

{
  "opencharge": "0.1",
  "name": "TrustVerify KYC",
  "profile": "Global KYC verification provider",
  "icon": "https://kyc.provider.example/icon.png",
  "config": {
    "publicKey": "a34b5c6d7e8f9a0b...",
    "endpoint": "https://kyc.provider.example/opencharge",
    "capabilities": [
      "kyc.grant",
      "kyc.validate",
      "kyc.data"
    ]
  },
  "kyc": [],
  "signature": "a1b2c3d4e5f6...7f1b",
  "contact": "support@kycprovider.example"
}

Key Fields

FieldPurpose
profileDescription of your KYC service
config.publicKeyYour secp256k1 public key (128 hex chars)
config.endpointBase URL for your Opencharge API
config.capabilitiesList of supported KYC operations
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://kyc.provider.example/opencharge",
  capabilities: [
    "kyc.grant",
    "kyc.validate",
    "kyc.data"
  ]
};

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