{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://finance.entelekron.org/schemas/tvkusd-redemption-request.schema.json",
  "title": "TVKUSD Institutional Redemption Request Envelope",
  "description": "Future institution-only request envelope. Publishing this schema does not create redemption rights, liquidity or an endpoint.",
  "type": "object",
  "additionalProperties": false,
  "required": ["schemaVersion", "requestId", "canonicalAssetId", "environment", "amount", "redeemingParty", "beneficiary", "legalEntity", "jurisdictionEntitlement", "identityAndEligibilityDecision", "tokenControlFinalityReference", "payoutAccountVerification", "ledgerOrderId", "policyVersion", "networkId", "canonicalContract", "nonce", "expiresAt"],
  "properties": {
    "schemaVersion": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" },
    "requestId": { "type": "string", "minLength": 24, "maxLength": 128 },
    "canonicalAssetId": { "const": "tvk-group:tvkusd" },
    "environment": { "enum": ["sandbox", "production"] },
    "amount": { "type": "string", "pattern": "^[1-9][0-9]*(?:\\.[0-9]{1,6})?$" },
    "redeemingParty": { "type": "string", "minLength": 1, "maxLength": 256 },
    "beneficiary": { "type": "string", "minLength": 1, "maxLength": 256 },
    "legalEntity": { "type": "string", "minLength": 1, "maxLength": 256 },
    "jurisdictionEntitlement": { "type": "string", "minLength": 1, "maxLength": 256 },
    "identityAndEligibilityDecision": { "type": "string", "minLength": 1, "maxLength": 256 },
    "tokenControlFinalityReference": { "type": "string", "minLength": 1, "maxLength": 256 },
    "payoutAccountVerification": { "type": "string", "minLength": 1, "maxLength": 256 },
    "ledgerOrderId": { "type": "string", "minLength": 1, "maxLength": 128 },
    "policyVersion": { "type": "string", "minLength": 1, "maxLength": 64 },
    "networkId": { "type": "string", "minLength": 1, "maxLength": 64 },
    "canonicalContract": { "type": "string", "minLength": 1, "maxLength": 256 },
    "nonce": { "type": "string", "minLength": 24, "maxLength": 256 },
    "expiresAt": { "type": "string", "format": "date-time" }
  }
}
