{
  "contractVersion": "aruntime.tool-contract.v1",
  "toolId": "customer.read.v3",
  "version": "3.2.0",
  "description": "Reads a bounded customer account projection without modifying the account.",
  "inputSchema": {
    "type": "object",
    "required": [
      "customerRef"
    ],
    "properties": {
      "customerRef": {
        "type": "string"
      }
    },
    "additionalProperties": false
  },
  "outputSchema": {
    "type": "object",
    "required": [
      "customerRef",
      "status"
    ],
    "properties": {
      "customerRef": {
        "type": "string"
      },
      "status": {
        "type": "string"
      }
    },
    "additionalProperties": true
  },
  "authenticationRef": "secretref://customer-api/runtime-reader",
  "permissionClass": "read",
  "sideEffectClass": "none",
  "dataClassification": "confidential",
  "egressPolicy": {
    "allowed": true,
    "destinations": [
      "customer-api.internal"
    ]
  },
  "timeoutMs": 3000,
  "retryPolicy": {
    "maxAttempts": 3,
    "backoff": "exponential-jitter",
    "retryableErrors": [
      "timeout",
      "upstream-unavailable"
    ]
  },
  "idempotency": {
    "supported": true,
    "keyLocation": "header:Idempotency-Key",
    "deduplicationWindowSeconds": 86400
  },
  "concurrency": {
    "mode": "parallel",
    "maxConcurrent": 100
  },
  "approvalTriggers": [],
  "compensation": {
    "supported": false,
    "toolRef": null,
    "deadlineSeconds": null
  },
  "errorTaxonomy": [
    {
      "code": "not-found",
      "retryable": false,
      "meaning": "The customer reference does not exist."
    },
    {
      "code": "upstream-unavailable",
      "retryable": true,
      "meaning": "The authoritative customer service is unavailable."
    }
  ],
  "rateLimits": {
    "requests": 100,
    "perSeconds": 60,
    "scope": "tenant"
  },
  "observability": {
    "requiredSpans": [
      "tool.validate",
      "tool.invoke"
    ],
    "requiredMetrics": [
      "tool.duration",
      "tool.errors"
    ],
    "logPayloads": false
  },
  "auditFields": [
    "requestId",
    "actorRef",
    "tenantRef",
    "toolVersion",
    "outcome"
  ],
  "deprecation": {
    "status": "active",
    "replacementRef": null,
    "sunsetUtc": null
  }
}
