{
  "kind": "semantic-negative",
  "name": "missing-payment-identifier",
  "scenario": "missing-payment-identifier",
  "description": "A paid retry must fail when the server marks payment-identifier as required and the client omits it.",
  "expectedError": "missing_kaspa_payment_identifier",
  "paymentRequired": {
    "x402Version": 2,
    "resource": {
      "url": "https://api.example.com/download.bin",
      "description": "Download",
      "mimeType": "application/octet-stream"
    },
    "accepts": [
      {
        "scheme": "exact",
        "network": "kaspa:testnet-10",
        "amount": "1000000",
        "asset": "KAS",
        "payTo": "kaspatest:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",
        "maxTimeoutSeconds": 60,
        "extra": {
          "binding": "kaspa-exact-v1",
          "finality": "accepted",
          "templateId": "kaspa-x402-kip10-additive-v1",
          "transactionEncoding": "kaspa-sdk-safe-json-v2.0.0",
          "borrowOutpoint": {
            "txid": "5555555555555555555555555555555555555555555555555555555555555555",
            "index": 2
          },
          "borrowAmount": "1000",
          "borrowScriptPublicKey": "0000abababababababababababababababababababababababababababababababababab",
          "borrowRedeemScript": "51",
          "additiveThresholdSompi": "10000000",
          "paymentOutputIndex": 0,
          "reservationId": "8888888888888888888888888888888888888888888888888888888888888888"
        }
      }
    ],
    "extensions": {
      "payment-identifier": {
        "info": {
          "required": true
        },
        "schema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "required": {
              "type": "boolean"
            },
            "id": {
              "type": "string",
              "minLength": 16,
              "maxLength": 128
            }
          },
          "required": [
            "required"
          ]
        }
      }
    }
  },
  "paymentPayload": {
    "x402Version": 2,
    "accepted": {
      "scheme": "exact",
      "network": "kaspa:testnet-10",
      "amount": "1000000",
      "asset": "KAS",
      "payTo": "kaspatest:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",
      "maxTimeoutSeconds": 60,
      "extra": {
        "binding": "kaspa-exact-v1",
        "finality": "accepted",
        "templateId": "kaspa-x402-kip10-additive-v1",
        "transactionEncoding": "kaspa-sdk-safe-json-v2.0.0",
        "borrowOutpoint": {
          "txid": "5555555555555555555555555555555555555555555555555555555555555555",
          "index": 2
        },
        "borrowAmount": "1000",
        "borrowScriptPublicKey": "0000abababababababababababababababababababababababababababababababababab",
        "borrowRedeemScript": "51",
        "additiveThresholdSompi": "10000000",
        "paymentOutputIndex": 0,
        "reservationId": "8888888888888888888888888888888888888888888888888888888888888888"
      }
    },
    "payload": {
      "type": "exact-transaction",
      "transaction": "{\"transaction\":\"signed-kip10-exact\"}",
      "transactionEncoding": "kaspa-sdk-safe-json-v2.0.0",
      "paymentOutputIndex": 0
    }
  }
}
