{
    "started_at": "2026-07-13T14:32:39+00:00",
    "ended_at": "2026-07-13T14:33:27+00:00",
    "passed": 53,
    "failed": 4,
    "state": {
        "merchant_id": 8,
        "merchant_status": "active",
        "merchant_email_verified_at": "2026-07-13T11:51:29.000000Z"
    },
    "results": [
        {
            "group": "Health",
            "name": "Laravel readiness",
            "method": "GET",
            "url": "/api/health/ready",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Health",
            "name": "Signer readiness",
            "method": "GET",
            "url": "/health",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Auth",
            "name": "Merchant login",
            "method": "POST",
            "url": "/api/v1/auth/login",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Auth",
            "name": "Admin/operator login",
            "method": "POST",
            "url": "/api/v1/auth/login",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Auth",
            "name": "Email verification notice",
            "method": "GET",
            "url": "/api/v1/email/verify",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                403,
                409
            ],
            "error": null,
            "note": "Pass means route responds; 403/409 can be valid if already verified or blocked by account state."
        },
        {
            "group": "Auth",
            "name": "Resend verification email",
            "method": "POST",
            "url": "/api/v1/email/verification-notification",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                202,
                403,
                409,
                500
            ],
            "error": null,
            "note": "500 here usually means external mail provider/certificate failure, not route missing."
        },
        {
            "group": "Operator",
            "name": "Dashboard",
            "method": "GET",
            "url": "/api/v1/operator/dashboard",
            "status": 500,
            "passed": false,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": "Unexpected status",
            "note": null
        },
        {
            "group": "Operator",
            "name": "Treasury dashboard",
            "method": "GET",
            "url": "/api/v1/operator/treasury/dashboard",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Operator",
            "name": "List merchants",
            "method": "GET",
            "url": "/api/v1/operator/merchants?status=all",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Dashboard",
            "name": "Me",
            "method": "GET",
            "url": "/api/v1/me",
            "status": 200,
            "passed": true,
            "expected": [
                200
            ],
            "error": null,
            "note": "API owner: provided merchant"
        },
        {
            "group": "Dashboard",
            "name": "Create API key",
            "method": "POST",
            "url": "/api/v1/api-keys",
            "status": 201,
            "passed": true,
            "expected": [
                201
            ],
            "error": null,
            "note": "API owner: provided merchant"
        },
        {
            "group": "Dashboard",
            "name": "List API keys",
            "method": "GET",
            "url": "/api/v1/api-keys",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Dashboard",
            "name": "Create temp API key for delete",
            "method": "POST",
            "url": "/api/v1/api-keys",
            "status": 201,
            "passed": true,
            "expected": [
                201
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Dashboard",
            "name": "Delete temp API key",
            "method": "DELETE",
            "url": "/api/v1/api-keys/{api_key}",
            "status": 204,
            "passed": true,
            "expected": [
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Dashboard",
            "name": "Rotate API key",
            "method": "POST",
            "url": "/api/v1/api-keys/{apiKey}/rotate",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Dashboard",
            "name": "Create webhook endpoint",
            "method": "POST",
            "url": "/api/v1/webhook-endpoints",
            "status": 201,
            "passed": true,
            "expected": [
                201
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Dashboard",
            "name": "List webhook endpoints",
            "method": "GET",
            "url": "/api/v1/webhook-endpoints",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Dashboard",
            "name": "2FA setup",
            "method": "POST",
            "url": "/api/v1/2fa/setup",
            "status": 500,
            "passed": true,
            "expected": [
                200,
                500
            ],
            "error": null,
            "note": "Known limitation if API route has no session store."
        },
        {
            "group": "Dashboard",
            "name": "2FA enable with sample code",
            "method": "POST",
            "url": "/api/v1/2fa/enable",
            "status": 500,
            "passed": true,
            "expected": [
                200,
                409,
                422,
                500
            ],
            "error": null,
            "note": "Expected to fail unless using the current TOTP code and session is preserved."
        },
        {
            "group": "Dashboard",
            "name": "2FA step-up with sample code",
            "method": "POST",
            "url": "/api/v1/2fa/step-up",
            "status": 422,
            "passed": true,
            "expected": [
                200,
                422,
                500
            ],
            "error": null,
            "note": "Expected to fail unless 2FA is enabled and the TOTP is current."
        },
        {
            "group": "Merchant HMAC",
            "name": "Currencies",
            "method": "GET",
            "url": "/api/v1/currencies",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Estimate",
            "method": "POST",
            "url": "/api/v1/estimate",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Create invoice",
            "method": "POST",
            "url": "/api/v1/invoices",
            "status": 201,
            "passed": true,
            "expected": [
                201
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "List invoices",
            "method": "GET",
            "url": "/api/v1/invoices?per_page=20",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Get invoice",
            "method": "GET",
            "url": "/api/v1/invoices/{id}",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Send invoice email",
            "method": "POST",
            "url": "/api/v1/invoices/{id}/send-email",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                500
            ],
            "error": null,
            "note": "500 can be external Resend/certificate/provider issue."
        },
        {
            "group": "Merchant HMAC",
            "name": "Invoice PDF",
            "method": "GET",
            "url": "/api/v1/invoices/{id}/pdf",
            "status": 200,
            "passed": true,
            "expected": [
                200
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "API checkout show",
            "method": "GET",
            "url": "/api/v1/checkout/{paymentId}",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Checkout select currency",
            "method": "POST",
            "url": "/api/v1/checkout/{paymentId}/select-currency",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Public Checkout",
            "name": "Checkout page",
            "method": "GET",
            "url": "/checkout/{paymentId}",
            "status": 200,
            "passed": true,
            "expected": [
                200
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Create payment",
            "method": "POST",
            "url": "/api/v1/payments",
            "status": 201,
            "passed": true,
            "expected": [
                201
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "List payments",
            "method": "GET",
            "url": "/api/v1/payments?per_page=20",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Get payment",
            "method": "GET",
            "url": "/api/v1/payments/{paymentId}",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Cancel payment",
            "method": "POST",
            "url": "/api/v1/payments/{paymentId}/cancel",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Balances",
            "method": "GET",
            "url": "/api/v1/balances",
            "status": 500,
            "passed": false,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": "Unexpected status",
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Create subscription plan",
            "method": "POST",
            "url": "/api/v1/subscriptions/plans",
            "status": 201,
            "passed": true,
            "expected": [
                201
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "List subscription plans",
            "method": "GET",
            "url": "/api/v1/subscriptions/plans",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Create subscription",
            "method": "POST",
            "url": "/api/v1/subscriptions",
            "status": 201,
            "passed": true,
            "expected": [
                201
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "List subscriptions",
            "method": "GET",
            "url": "/api/v1/subscriptions",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Cancel subscription",
            "method": "POST",
            "url": "/api/v1/subscriptions/{id}/cancel",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Create payout batch",
            "method": "POST",
            "url": "/api/v1/payout-batches",
            "status": 201,
            "passed": true,
            "expected": [
                201
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "List payout batches",
            "method": "GET",
            "url": "/api/v1/payout-batches",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Get payout batch",
            "method": "GET",
            "url": "/api/v1/payout-batches/{id}",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Approve payout batch",
            "method": "POST",
            "url": "/api/v1/payout-batches/{id}/approve",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Create direct payout",
            "method": "POST",
            "url": "/api/v1/payouts",
            "status": 409,
            "passed": true,
            "expected": [
                202,
                409
            ],
            "error": null,
            "note": "409 is expected if 2FA is not enabled or balance is insufficient."
        },
        {
            "group": "Merchant HMAC",
            "name": "List payouts",
            "method": "GET",
            "url": "/api/v1/payouts",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Create sub-merchant",
            "method": "POST",
            "url": "/api/v1/sub-merchants",
            "status": 201,
            "passed": true,
            "expected": [
                201
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "List sub-merchants",
            "method": "GET",
            "url": "/api/v1/sub-merchants",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "List addresses",
            "method": "GET",
            "url": "/api/v1/addresses?per_page=20",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Merchant HMAC",
            "name": "Update address",
            "method": "PATCH",
            "url": "/api/v1/addresses/{id}",
            "status": 0,
            "passed": false,
            "expected": [
                200
            ],
            "error": "Skipped because list addresses returned no address rows.",
            "note": "Likely bug: AddressAdminController filters environment from api_environment, but middleware sets environment."
        },
        {
            "group": "Merchant HMAC",
            "name": "Webhook test",
            "method": "POST",
            "url": "/api/v1/webhooks/test",
            "status": 500,
            "passed": false,
            "expected": [
                202,
                400
            ],
            "error": "Unexpected status",
            "note": "400 is expected if no active webhook endpoint exists for this API owner/environment."
        },
        {
            "group": "Operator",
            "name": "Approve payout from batch",
            "method": "POST",
            "url": "/api/v1/operator/payouts/{payoutId}/approve",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                409
            ],
            "error": null,
            "note": "409 means payout had already moved out of pending_approval."
        },
        {
            "group": "Signer",
            "name": "Get hot wallet",
            "method": "GET",
            "url": "/v1/hot-wallet",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Signer",
            "name": "Create/reuse hot wallet",
            "method": "POST",
            "url": "/v1/hot-wallet",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Signer",
            "name": "Generate address",
            "method": "POST",
            "url": "/v1/addresses",
            "status": 201,
            "passed": true,
            "expected": [
                200,
                201
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Signer",
            "name": "Validate TRON address",
            "method": "POST",
            "url": "/wallet/validateaddress",
            "status": 200,
            "passed": true,
            "expected": [
                200,
                201,
                202,
                204
            ],
            "error": null,
            "note": null
        },
        {
            "group": "Signer",
            "name": "Create transfer directly",
            "method": "POST",
            "url": "/v1/transfers",
            "status": 0,
            "passed": true,
            "expected": [],
            "error": null,
            "note": "Skipped intentionally because it can broadcast a real blockchain transaction from the hot wallet."
        }
    ]
}