{
  "schema": "aaes/capability-pack/1",
  "provider": "stripe",
  "version": "1.1.0",
  "description": "Stripe payments: read payment intents and customer records, create payment intents and refunds, and delete a customer record.",
  "notes": "Use a restricted API key with only the permissions these capabilities need; the pack does not create one. A PaymentIntent does not invariably move money at creation — creation can request confirmation, and whether money moves then depends on the confirmation, the capture method and the payment method — but a single call can result in a completed payment, so the capability stays conservatively at the pay action's R3 floor, and pay is one of the designated actions requiring human approval; a policy budget is the second control.\n\nStripe names the Charges API a legacy API and directs new integrations to PaymentIntents, with new features landing in the PaymentIntents API only, so this pack's money movement runs on PaymentIntents; the pack is version 1.1.0 because the money path moved on 2026-09-20, and a deployment that registered the 1.0.0 Charges capabilities keeps those registered versions until they are retired under change control — installing this pack does not retire them. The two PaymentIntents capabilities were introduced in pack version 1.1.0 and carry that version; the customer and refund capabilities are unchanged since 1.0.0 and keep it, because a capability's version is the pack version in which its registration last changed.",
  "credential": {
    "secret_ref_id": "secret-ref-stripe-restricted-key",
    "custody": "customer_vault",
    "inject": "header",
    "inject_name": "Authorization",
    "note": "A Stripe restricted API key held in the client's own secret manager. The stored material must be the complete Authorization header value (scheme included). Live and test keys are different credentials: point this reference at the live key only when the deployment is meant to move real money."
  },
  "capabilities": [
    {
      "capability_id": "stripe.payment_intents.read",
      "version": "1.1.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "financial",
      "egress_allowlist": [
        "api.stripe.com"
      ],
      "endpoint": "https://api.stripe.com/v1/payment_intents",
      "method": "GET",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-stripe-restricted-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "read"
      ],
      "resource_id": "stripe-account",
      "description": "Read payment intents.",
      "requires_review": true
    },
    {
      "capability_id": "stripe.customers.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "pii",
      "egress_allowlist": [
        "api.stripe.com"
      ],
      "endpoint": "https://api.stripe.com/v1/customers",
      "method": "GET",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-stripe-restricted-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "read"
      ],
      "resource_id": "stripe-account",
      "description": "Read customer records, which carry personal data.",
      "requires_review": true
    },
    {
      "capability_id": "stripe.payment_intents.create",
      "version": "1.1.0",
      "kind": "tool",
      "risk_tier": "R3",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "financial",
      "egress_allowlist": [
        "api.stripe.com"
      ],
      "endpoint": "https://api.stripe.com/v1/payment_intents",
      "method": "POST",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-stripe-restricted-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "pay"
      ],
      "resource_id": "stripe-account",
      "cost_ceiling_usd": 500,
      "description": "Create a PaymentIntent. Creation can request confirmation, so one call can result in a completed payment; the action is pay at the minimum R3 tier — a conservative minimum, since creation alone may only authorize — and pay is one of the designated actions requiring human approval.\n\nThe registered cost ceiling is a budget control on the declared amount: the gateway refuses a declared amount above it and commits the ceiling against the work budget; it does not bound the amount the provider request encodes — currency and minor units are the deployment's review.",
      "requires_review": true
    },
    {
      "capability_id": "stripe.refunds.create",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R3",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "financial",
      "egress_allowlist": [
        "api.stripe.com"
      ],
      "endpoint": "https://api.stripe.com/v1/refunds",
      "method": "POST",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-stripe-restricted-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "pay"
      ],
      "resource_id": "stripe-account",
      "cost_ceiling_usd": 500,
      "description": "Refund a payment: money moves back, so the action is pay at the minimum R3 tier; pay is one of the designated actions requiring human approval. A refund request may omit the amount and return the remaining refundable total, so the registered cost ceiling — a budget control on the declared amount — does not bound what the provider moves.",
      "requires_review": true
    },
    {
      "capability_id": "stripe.customer.delete",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R3",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "pii",
      "egress_allowlist": [
        "api.stripe.com"
      ],
      "endpoint": "https://api.stripe.com/v1/customers/CUSTOMER_ID",
      "method": "DELETE",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-stripe-restricted-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "delete"
      ],
      "resource_id": "stripe-account",
      "description": "Delete a customer record. CUSTOMER_ID is a placeholder to replace before enabling.",
      "requires_review": true
    }
  ],
  "resources": [
    {
      "resource_id": "stripe-account",
      "kind": "api",
      "locator": "https://api.stripe.com/v1",
      "data_class": "financial",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN"
    }
  ],
  "review": {
    "state": "library",
    "date": "2026-10-22",
    "sources": [
      "https://docs.stripe.com/api/payment_intents (retrieved 2026-09-20)",
      "https://stripe.com/docs/charges (retrieved 2026-09-20)",
      "https://docs.stripe.com/payments/payment-intents/migration/charges (retrieved 2026-09-20)",
      "https://docs.stripe.com/api/refunds/create (retrieved 2026-09-23)",
      "https://docs.stripe.com/api/customers/delete (retrieved 2026-09-23)",
      "https://docs.stripe.com/api/authentication (retrieved 2026-09-23)",
      "https://docs.stripe.com/api/customers/list (retrieved 2026-09-23)"
    ],
    "reviewer_id": "owner-delegated"
  }
}
