{
    "passed": 19,
    "failed_or_blocked": 1,
    "results": [
        {
            "group": "Health",
            "name": "Laravel ready",
            "method": "GET",
            "url": "/api/health/ready",
            "status": 200,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Health",
            "name": "Signer ready",
            "method": "GET",
            "url": "/health",
            "status": 200,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Auth",
            "name": "Merchant login",
            "method": "POST",
            "url": "/api/v1/auth/login",
            "status": 200,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Auth",
            "name": "Admin login",
            "method": "POST",
            "url": "/api/v1/auth/login",
            "status": 200,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Auth",
            "name": "Create HMAC API key",
            "method": "POST",
            "url": "/api/v1/api-keys",
            "status": 201,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Signer",
            "name": "Generate valid TRON address",
            "method": "POST",
            "url": "/v1/addresses",
            "status": 201,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Payout wallets",
            "name": "Create payout wallet",
            "method": "POST",
            "url": "/api/v1/payout-wallets",
            "status": 201,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Payout wallets",
            "name": "List payout wallets",
            "method": "GET",
            "url": "/api/v1/payout-wallets",
            "status": 200,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "KYC",
            "name": "Upload KYC document",
            "method": "POST",
            "url": "/api/v1/kyc/documents",
            "status": 201,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "KYC",
            "name": "Operator approve KYC",
            "method": "POST",
            "url": "/api/v1/operator/kyc/documents/{id}/approve",
            "status": 200,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Webhooks",
            "name": "Create HTTPS webhook endpoint",
            "method": "POST",
            "url": "/api/v1/webhook-endpoints",
            "status": 201,
            "ok": true,
            "expect": [
                201,
                409,
                422
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Webhooks",
            "name": "Queue webhook test event",
            "method": "POST",
            "url": "/api/v1/webhooks/test",
            "status": 202,
            "ok": true,
            "expect": [
                202,
                200
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Webhooks",
            "name": "Deliver signed webhook to https://httpbin.org/post",
            "method": "JOB",
            "url": "DeliverMerchantWebhookJob",
            "status": 599,
            "ok": false,
            "expect": [
                200
            ],
            "error": "Unexpected status",
            "note": "Delivery attempted but not accepted/reachable"
        },
        {
            "group": "Deposits",
            "name": "Create invoice for deposit monitor",
            "method": "POST",
            "url": "/api/v1/invoices",
            "status": 201,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Deposits",
            "name": "Run TRON deposit monitor for invoice",
            "method": "JOB",
            "url": "PollOpenInvoiceAddressJob",
            "status": 200,
            "ok": true,
            "expect": [
                200
            ],
            "error": null,
            "note": "No transfer was sent, so status should remain waiting unless address already had TRC20 activity."
        },
        {
            "group": "Settlements",
            "name": "Create sandbox available balance",
            "method": "DB",
            "url": "LedgerService::post",
            "status": 200,
            "ok": true,
            "expect": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Settlements",
            "name": "Create settlement from merchant balance",
            "method": "POST",
            "url": "/api/v1/settlements",
            "status": 202,
            "ok": true,
            "expect": [
                202
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Settlements",
            "name": "Create payout from settlement job",
            "method": "JOB",
            "url": "CreateSettlementPayoutJob",
            "status": 200,
            "ok": true,
            "expect": [
                200
            ],
            "error": null,
            "note": "Payout is created but not broadcast."
        },
        {
            "group": "Payouts",
            "name": "Screen settlement payout to approval boundary",
            "method": "JOB",
            "url": "ScreenPayoutJob",
            "status": 200,
            "ok": true,
            "expect": [
                200
            ],
            "error": null,
            "note": "Not approved/broadcast to avoid moving funds."
        },
        {
            "group": "Payouts",
            "name": "Actual payout broadcast",
            "method": "POST",
            "url": "/api/v1/operator/payouts/{id}/approve",
            "status": 299,
            "ok": true,
            "expect": [
                299
            ],
            "error": null,
            "note": "Skipped: this can move real TRON/USDT. Provide testnet signer config/funds to execute safely."
        }
    ]
}