OpenAPI Schema Explorer
Search endpoints, fields, and examples across the public API specs.
Last updated: 2026-06-17 01:39:55 UTC
Operations (137)
This explorer is part of the public project trust stack. It lets partners verify the live public API contract against the same status and transparency surfaces that describe system behavior.
| Operation | Summary | Fields | Example |
|---|---|---|---|
| GET /api/partner/analytics/usage | Per-key usage analytics and webhook delivery health | hours | {"success":true,"partner":"Acme","key_id":"k_test","window":{"hours":24,"start_utc":"2026-03-09T00:00:00Z","end_utc":"2026-03-10T00:00:00Z"},"request_metrics":{"total_requests":12,"success_requests":10,"error_requests":2,"rate_limited_requests":1,"endpoint_breakdown":[{"path":"/api/partner/users","requests":7,"errors":1,"error_rate_pct":14.29}]},"latency_metrics_ms":{"available":true,"overall":{"samples":3,"p50_ms":240,"p95_ms":320,"p99_ms":320},"endpoint_breakdown":[{"path":"/api/partner/users" |
| GET /api/partner/capabilities | Partner API capability discovery | include_meta, If-Modified-Since | {"success":true,"partner":"Acme Partner","key_id":"acme_key","key_mode":"sandbox","sandbox":{"enabled_for_key":true,"verify_endpoint":"/api/partner/sandbox/verify","promotion_report_endpoint":"/api/partner/sandbox/promotion-report","supports_deterministic_fixtures":true,"fixture_endpoints":["/api/partner/sandbox/verify","/api/partner/sandbox/token-status","/api/partner/sandbox/promotion-report","/api/partner/sandbox/webhook-simulator/scenarios","/api/partner/sandbox/webhook-simulator/run"],"stat |
| POST /api/partner/donation-claim | Issue a donation claim (if enabled) | n/a | {"success":true,"status":"success","claim_status":"issued","claim_code":"abc123","partner_key_id":"k_live","docs_links":{"developers_api_guide":"/developers/api-guide.md","openapi":"/api/openapi.yaml","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_donation_claim":"/api/partner/donation-claim","partner_wallet_info":"/api/partner/wallet-info/7e2vExampleWallet11111111111111111111111111111111","partner_wallet_verification":"/api/partner/wallet-verification/7e2vExampleWallet1111111 |
| GET /api/partner/errors.json | Machine-readable partner error taxonomy and retry guidance | include_meta | {"success":true,"partner":"Acme Partner","key_id":"acme_key","key_mode":"live","count":3,"entries":[{"error_code":"rate_limited","title":"Rate Limit Reached","category":"throttling","http_status":429,"retry_class":"retry_after","retry_behavior":"Respect Retry-After and back off with jitter before retrying.","retry_after_seconds":60,"available_in_modes":["live","sandbox"],"endpoint_groups":["all_partner"],"recovery_links":{"partner_errors":"/api/partner/errors.json","partner_usage_analytics":"/ap |
| POST /api/partner/sandbox/donation-claim | Deterministic sandbox donation-claim rehearsal for sandbox keys | Idempotency-Key, include_meta | {"success":true,"mode":"sandbox","partner":"Acme Partner","key_id":"acme_sandbox_key","partner_key_id":"acme_sandbox_key","fixture_profile":"deterministic_partner_sandbox_donation_claim_v1","source":"deterministic_fixture","status":"success","claim_code":"sandbox-5f9d1be7f6b4d4975c4f7f7d","claim_url":"/faucet?key=sandbox-5f9d1be7f6b4d4975c4f7f7d","email_sent":false,"claim_status":"sandbox_preview","claim_campaign_id":"12","requested_claim":{"campaign_id":"spring_drive","amount":50.0,"email":"don |
| GET /api/partner/sandbox/promotion-report | Sandbox promotion-readiness report for sandbox keys | user_id, limit, include_meta | {"success":true,"mode":"sandbox","partner":"Acme Partner","key_id":"acme_sandbox_key","fixture_profile":"deterministic_partner_sandbox_promotion_v1","source":"sandbox_state","promotion_policy":"sandbox_to_live_manual_approval","docs_links":{"developers_api_guide":"/developers/api-guide.md","developers_api_errors":"/developers/api-errors","developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","openapi":"/api/openapi.yaml","ope |
| GET /api/partner/sandbox/salutes/balance | Sandbox salutes practice balance for sandbox keys | user_id, include_meta | {"success":true,"mode":"sandbox","partner":"Acme Partner","key_id":"acme_sandbox_key","fixture_profile":"deterministic_partner_sandbox_salutes_v1","user_id":"partner-user-7","balance":1000,"currency":"salutes","source":"sandbox_state","docs_links":{"developers_api_guide":"/developers/api-guide.md","developers_api_errors":"/developers/api-errors","developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","openapi":"/api/openapi.ya |
| POST /api/partner/sandbox/salutes/credit | Credit sandbox salutes practice balance without touching live state | Idempotency-Key, include_meta | {"success":true,"mode":"sandbox","partner":"Acme Partner","key_id":"acme_sandbox_key","fixture_profile":"deterministic_partner_sandbox_salutes_v1","user_id":"partner-user-7","balance":1075,"delta":75,"idempotency_key":"idem-credit-1","ledger_entry_id":1,"source":"sandbox_state","docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_status":"/api/p |
| POST /api/partner/sandbox/salutes/debit | Debit sandbox salutes practice balance without touching live state | Idempotency-Key, include_meta | {"success":true,"mode":"sandbox","partner":"Acme Partner","key_id":"acme_sandbox_key","fixture_profile":"deterministic_partner_sandbox_salutes_v1","user_id":"partner-user-7","balance":1035,"delta":-40,"idempotency_key":"idem-debit-1","ledger_entry_id":2,"source":"sandbox_state","docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_status":"/api/p |
| GET /api/partner/sandbox/salutes/ledger | Sandbox salutes practice ledger for sandbox keys | user_id, limit, offset, order, reason, source, include_meta | {"success":true,"mode":"sandbox","partner":"Acme Partner","key_id":"acme_sandbox_key","fixture_profile":"deterministic_partner_sandbox_salutes_v1","user_id":"partner-user-7","balance":1035,"source":"sandbox_state","docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"ledger":[{"id":1,"user_id":"partner-user-7","delta":75,"balance_after":1075,"reason":"bonus","sou |
| GET /api/partner/sandbox/token-status | Deterministic sandbox token diagnostics fixture for sandbox keys | include_meta | {"success":true,"mode":"sandbox","partner":"Acme Partner","key_id":"acme_sandbox_key","fixture_profile":"deterministic_partner_onboarding_v1","mint":"9d6tEX6d834TRHuirEbfUgEFJfqpgTnpWQxvUrBUqMhC","decimals":6,"rpc_url":"sandbox://deterministic-fixture","chain":{"total_supply":1000000000.0,"treasury_balance":125000000.0,"reserve_balance":250000000.0,"tracked_treasury_balance":375000000.0,"circulating_supply":625000000.0,"holders":42,"holders_source":"deterministic_fixture"},"docs_links":{"develop |
| GET /api/partner/sandbox/users | List sandbox partner users for no-loss rehearsal | status, q, include_wallets, limit, offset, cursor, include_meta | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_sandbox_users_v1","source":"sandbox_state","docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"count":1,"users":[{"id":1,"external_id":"partner-2048","username":"partner_acme_partner_2048","display_name":"Captain Sandbox","status":"active","is_verified":false,"wallet_address":"11111111111 |
| POST /api/partner/sandbox/users | Create a sandbox partner user without touching live state | n/a | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_sandbox_users_v1","source":"sandbox_state","live_side_effects_performed":false,"docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"external_id":"partner-2048","user":{"id":1,"username":"partner_acme_partner_2048","display_name":"Captain Sandbox","status":"active","is_verified":false,"wall |
| GET /api/partner/sandbox/users/{user_id} | Get one sandbox partner user | user_id, external_id, include_wallets | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_sandbox_users_v1","source":"sandbox_state","live_side_effects_performed":false,"docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"user":{"id":1,"username":"partner_acme_partner_2048","display_name":"Captain Sandbox","status":"active","is_verified":false,"wallet_address":"1111111111111111 |
| PATCH /api/partner/sandbox/users/{user_id} | Update a sandbox partner user without touching live state | user_id | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_sandbox_users_v1","source":"sandbox_state","live_side_effects_performed":false,"docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"user":{"id":1,"username":"partner_acme_partner_2048","display_name":"Captain Updated","status":"suspended","is_verified":false,"wallet_address":"1111111111111 |
| POST /api/partner/sandbox/users/{user_id}/wallets | Link a wallet to a sandbox partner user | user_id | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_sandbox_users_v1","source":"sandbox_state","live_side_effects_performed":false,"docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"wallets":[{"blockchain":"solana","wallet_address":"11111111111111111111111111111111","label":"Primary","is_primary":1,"verified":0},{"blockchain":"solana","wa |
| GET /api/partner/sandbox/verify | Deterministic sandbox onboarding verification surface for sandbox keys | include_meta | {"success":true,"mode":"sandbox","partner":"Acme Partner","key_id":"acme_sandbox_key","fixture_profile":"deterministic_partner_onboarding_v1","verification":{"signature_verified":true,"nonce_policy":"global_optional_unless_required","idempotency_policy":"required_by_default_for_mutations","safe_for_replay_testing":true},"fixtures":{"salutes_balance":{"user_id":"sandbox-user-001","balance":1000,"currency":"salutes","source":"deterministic_fixture"},"wallet_verification":{"external_id":"sandbox-us |
| GET /api/partner/sandbox/webhook-events | List replay-safe sandbox webhook events derived from fake-state salutes activity | user_id, limit, offset, order, event_type, include_meta | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_sandbox_webhook_replay_v1","user_id":"partner-user-7","count":2,"source":"sandbox_state","docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"events":[{"event_id":"sandbox-salutes-1","event_type":"salutes.credit","user_id":"partner-user-7","amount":75,"delta":75,"balance_after":1075,"reaso |
| POST /api/partner/sandbox/webhook-events/replay | Build replay-safe sandbox webhook deliveries from fake-state event rows | include_meta | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_sandbox_webhook_replay_v1","count":2,"replayed_count":2,"failed_count":0,"source":"sandbox_state","docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"results":[{"event_id":"sandbox-salutes-1","replayed":true,"event_type":"salutes.credit","simulation":{"headers":{"X-Webhook-Event":"salutes |
| GET /api/partner/sandbox/webhook-simulator/run | Sandbox webhook simulator metadata for sandbox keys | include_meta | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_webhook_simulator_v1","method":"POST","required_fields":["scenario_id"],"optional_fields":["secret","key_id"],"safe_for_replay_testing":true,"docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_status":"/api/partner/status","scenarios":"/api/partner/sandbox/webhook-simulat |
| POST /api/partner/sandbox/webhook-simulator/run | Build a deterministic sandbox webhook simulation payload | include_meta | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_webhook_simulator_v1","selected_scenario_id":"claim_created","safe_for_replay_testing":true,"docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"simulation":{"headers":{"X-Webhook-Timestamp":"1700000000","X-Webhook-Signature":"abc123","X-Partner-Key":"acme_sandbox_key"}},"links":{"partner_ |
| GET /api/partner/sandbox/webhook-simulator/scenarios | Deterministic sandbox webhook simulator scenarios for sandbox keys | include_meta | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_webhook_simulator_v1","scenarios_count":3,"docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"scenarios":[{"id":"claim_created","title":"Donation Claim Created","event_type":"donation.claim"}],"links":{"partner_status":"/api/partner/status","sandbox_webhook_simulator_run":"/api/partner/sa |
| GET /api/partner/sandbox/webhooks | List sandbox webhook registry rows for sandbox keys | event_type, is_active, limit, offset, cursor, include_meta | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_sandbox_webhooks_v1","source":"sandbox_state","docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"count":1,"webhooks":[{"id":1,"event_type":"users.updated","target_url":"https://example.test/hook","secret":"sandbox-secret","is_active":true,"created_at":"2026-06-19T16:55:00Z","updated_at": |
| POST /api/partner/sandbox/webhooks | Create sandbox webhook registry row for no-loss rehearsal | n/a | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_sandbox_webhooks_v1","source":"sandbox_state","live_side_effects_performed":false,"docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"webhook":{"id":1,"event_type":"users.updated","target_url":"https://example.test/hook","secret":"sandbox-secret","is_active":true},"links":{"partner_status |
| DELETE /api/partner/sandbox/webhooks/{webhook_id} | Disable sandbox webhook registry row | webhook_id | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_sandbox_webhooks_v1","source":"sandbox_state","live_side_effects_performed":false,"docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"deleted":true,"webhook_id":1,"links":{"partner_status":"/api/partner/status","partner_errors":"/api/partner/errors.json","sandbox_webhooks":"/api/partner/s |
| POST /api/partner/sandbox/webhooks/{webhook_id}/test | Build sandbox webhook test-delivery simulation from a sandbox registry row | webhook_id | {"success":true,"mode":"sandbox","fixture_profile":"deterministic_partner_sandbox_webhooks_v1","source":"sandbox_state","live_side_effects_performed":false,"docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"queued":true,"event_id":"sandbox-webhook-test-1","webhook_id":1,"event_type":"users.updated","simulation":{"headers":{"X-Webhook-Event":"users.updated","X- |
| GET /api/partner/status | Partner integration status page payload | n/a | {"success":true,"partner":"Acme","key_id":"k_sandbox","key_mode":"sandbox","overall_status":"ok","endpoint_percentiles_available":true,"endpoint_percentiles_ms":{"p50_ms":90,"p95_ms":180,"p99_ms":220},"request_metrics":{"total_requests":8,"error_requests":0},"webhook_delivery_health":{"dead_letter_events":0,"failed_events":0,"pending_events":0,"delivered_events":4},"delivery_slo_controls":{"max_attempts":6,"timeout_seconds":20,"retry_base_seconds":30,"retry_max_seconds":1800,"retry_jitter_second |
| GET /api/partner/token-status | Partner-facing VETS token runtime status and snapshot summary | include_meta | {"success":true,"mint":"9d6tEX6d834TRHuirEbfUgEFJfqpgTnpWQxvUrBUqMhC","decimals":6,"rpc_url":"https://mainnet.helius-rpc.com/","docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"chain":{"total_supply":1000000000,"treasury_balance":250000000,"reserve_balance":50000000,"tracked_treasury_balance":300000000,"circulating_supply":700000000,"holders":43,"holders_sour |
| GET /api/partner/user-lookup | Lookup partner-linked users by email/username/wallet | q, email, username, wallet, include_wallets, status, limit, offset, cursor, include_meta | {"success":true,"count":1,"users":[{"id":42,"username":"vet_user","status":"active"}],"docs_links":{"developers_api_guide":"/developers/api-guide.md","openapi":"/api/openapi.yaml","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_user_lookup":"/api/partner/user-lookup","partner_users":"/api/partner/users","partner_user_template":"/api/partner/users/USER_ID","partner_wallet_info_template":"/api/partner/wallet-info/WALLET_ADDRESS","partner_wallet_verification_template":"/api/partne |
| GET /api/partner/users | List users linked to the partner key | status, q, include_wallets, limit, offset, cursor, include_meta | {"success":true,"count":1,"users":[{"id":2048,"external_id":"partner-2048","username":"new_user","status":"active"}],"docs_links":{"developers_api_guide":"/developers/api-guide.md","developers_api_errors_json":"/developers/api-errors.json","openapi":"/api/openapi.yaml"},"links":{"partner_user_lookup":"/api/partner/user-lookup","partner_users":"/api/partner/users","partner_user_template":"/api/partner/users/USER_ID","partner_wallet_link_template":"/api/partner/users/USER_ID/wallets","partner_wall |
| POST /api/partner/users | Create a user | n/a | {"success":true,"external_id":"partner-2048","user":{"id":2048,"username":"new_user","status":"active"},"docs_links":{"developers_api_guide":"/developers/api-guide.md","openapi":"/api/openapi.yaml","sdk_python_starter":"/developers/sdk/python-starter.zip"},"links":{"partner_user":"/api/partner/users/2048","partner_wallet_link":"/api/partner/users/2048/wallets","partner_wallet_info_template":"/api/partner/wallet-info/WALLET_ADDRESS","partner_wallet_verification_template":"/api/partner/wallet-veri |
| GET /api/partner/users/{user_id} | Get a user | user_id | {"success":true,"user":{"id":2048,"username":"new_user","status":"active"},"docs_links":{"developers_api_guide":"/developers/api-guide.md","openapi":"/api/openapi.yaml"},"links":{"partner_user":"/api/partner/users/2048","partner_wallet_info":"/api/partner/wallet-info/7e2vExampleWallet11111111111111111111111111111111","partner_wallet_verification":"/api/partner/wallet-verification/7e2vExampleWallet11111111111111111111111111111111","partner_wallet_link":"/api/partner/users/2048/wallets","partner_s |
| PATCH /api/partner/users/{user_id} | Update a user (partial) | user_id | {"success":true,"user":{"id":2048,"username":"new_user","display_name":"Captain","status":"active"},"docs_links":{"developers_api_guide":"/developers/api-guide.md","developers_api_errors_json":"/developers/api-errors.json","openapi":"/api/openapi.yaml"},"links":{"partner_user":"/api/partner/users/2048","partner_wallet_link_template":"/api/partner/users/USER_ID/wallets","partner_wallet_info_template":"/api/partner/wallet-info/WALLET_ADDRESS","partner_wallet_verification_template":"/api/partner/wa |
| POST /api/partner/users/{user_id}/wallets | Link a wallet to a user | user_id | {"success":true,"wallets":[{"blockchain":"solana","wallet_address":"7e2vExampleWallet11111111111111111111111111111111","label":"Primary","is_primary":1,"verified":0}],"docs_links":{"developers_api_guide":"/developers/api-guide.md","openapi":"/api/openapi.yaml","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_user":"/api/partner/users/2048","partner_wallet_link":"/api/partner/users/2048/wallets","partner_wallet_info":"/api/partner/wallet-info/7e2vExampleWallet11111111111111111111 |
| GET /api/partner/wallet-info/{wallet_address} | Get live SOL and VETS balances for a wallet | wallet_address | {"success":true,"wallet":"7e2vExampleWallet11111111111111111111111111111111","sol_balance":1.25,"vets_balance":456.0,"lp_mint":"MintLP111111111111111111111111111111111111","lp_amount":12.0,"docs_links":{"developers_api_guide":"/developers/api-guide.md","openapi":"/api/openapi.yaml","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_users":"/api/partner/users","partner_user_template":"/api/partner/users/USER_ID","partner_wallet_info":"/api/partner/wallet-info/7e2vExampleWallet11111 |
| GET /api/partner/wallet-verification/{wallet_address} | Get wallet verification freshness for a partner-owned wallet | wallet_address | {"success":true,"wallet":"7e2vExampleWallet11111111111111111111111111111111","wallet_states":{"linked":true,"connected_session":false,"verified":true,"stale_verification":false,"hidden":false},"verification":{"verified":true,"verified_at_utc":"2026-04-01T12:00:00Z","verification_age_days":16,"freshness":"fresh","status_text":"Verified 16d ago","reverify_days":60},"owner":{"user_id":2048,"external_id":"partner-2048","is_primary":true,"is_hidden":false},"state_model":["linked","connected_session", |
| GET /api/partner/webhook-events | List partner webhook events with replay-oriented filters | status, reason_tag, from, to | {"success":true,"count":1,"events":[{"id":77,"webhook_id":3,"event_type":"users.updated","status":"failed","attempts":5,"is_dead_letter":true,"reason_tag":"http_error","last_error":"HTTP 500","target_url":"https://example.test/hook","created_at":"2026-03-10T00:00:00Z","last_attempt_at":"2026-03-10T00:05:00Z","delivered_at":null}],"query":{"limit":10,"offset":0,"cursor":null,"status":"dead_letter","reason_tag":null,"webhook_id":null,"from":null,"to":null},"pagination":{"has_more":false,"next_offs |
| POST /api/partner/webhook-events/replay | Batch replay webhook events | n/a | {"success":true,"count":2,"replayed_count":1,"failed_count":1,"reason_tag":"receiver_fix","note":"receiver deployed fix","results":[{"event_id":77,"replayed":true,"error":null,"reason_tag":"receiver_fix"},{"event_id":88,"replayed":false,"error":"not_found","reason_tag":"receiver_fix"}],"docs_links":{"developers_api_errors_json":"/developers/api-errors.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_capabil |
| GET /api/partner/webhooks | List partner webhooks | event_type, is_active, limit, offset, cursor, include_meta | {"success":true,"count":1,"webhooks":[{"id":42,"event_type":"salutes.credit","target_url":"https://example.com/webhooks/vets","is_active":1}],"docs_links":{"developers_api_guide":"/developers/api-guide.md","developers_api_errors_json":"/developers/api-errors.json","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_webhooks":"/api/partner/webhooks","partner_webhook_template":"/api/partner/webhooks/WEBHOOK_ID","partner_webhook_test_template":"/api/partner/webhooks/WEBHOOK_ID/test"," |
| POST /api/partner/webhooks | Create partner webhook | n/a | {"success":true,"webhook":{"id":42,"event_type":"salutes.credit","target_url":"https://example.com/webhooks/vets","secret":"generated-secret","is_active":true,"created_at":"2026-03-08T20:00:00Z","updated_at":"2026-03-08T20:00:00Z"},"docs_links":{"developers_api_guide":"/developers/api-guide.md","developers_api_errors_json":"/developers/api-errors.json","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_webhooks":"/api/partner/webhooks","partner_webhook":"/api/partner/webhooks/42", |
| GET /api/partner/webhooks/dlq | Dead-letter queue summary and remediation guidance | hours | {"success":true,"window_hours":48,"dead_letter_count":1,"max_attempts":5,"by_event_type":[{"event_type":"users.updated","count":1}],"by_reason_tag":[{"reason_tag":"timeout","count":1}],"events":[{"event_id":11,"webhook_id":2,"event_type":"users.updated","target_url":"https://partner.example/webhooks","attempts":5,"reason_tag":"timeout","last_error":"timeout while sending","created_at":"2026-03-10T00:00:00Z","updated_at":"2026-03-10T01:00:00Z"}],"docs_links":{"developers_api_errors_json":"/develo |
| POST /api/partner/webhooks/signature/verify | Verify webhook signature payloads against a candidate secret | n/a | {"success":true,"valid":true,"provided_signature":"abc123","expected_signature":"abc123","timestamp":"1700000000","canonical_body":"{\"event_id\":\"123\",\"event_type\":\"users.updated\",\"data\":{\"ok\":true}}","validator_example":{"formula":"hex(HMAC_SHA256(secret, f\"{timestamp}.{payload}\"))","header_names":["X-Webhook-Timestamp","X-Webhook-Signature"]},"docs_links":{"developers_api_guide":"/developers/api-guide.md","openapi":"/api/openapi.yaml","sdk_manifest":"/developers/sdk/manifest.json" |
| DELETE /api/partner/webhooks/{webhook_id} | Delete partner webhook | webhook_id | {"success":true,"deleted":true,"webhook_id":42,"docs_links":{"developers_api_guide":"/developers/api-guide.md","openapi":"/api/openapi.yaml","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_webhooks":"/api/partner/webhooks","partner_webhook":"/api/partner/webhooks/42","partner_webhook_test":"/api/partner/webhooks/42/test","partner_webhook_events":"/api/partner/webhook-events","sandbox_webhook_test_template":"/api/partner/sandbox/webhooks/WEBHOOK_ID/test"}} |
| POST /api/partner/webhooks/{webhook_id}/test | Test webhook delivery | webhook_id | {"success":true,"queued":true,"event_id":999,"webhook_id":42,"docs_links":{"developers_api_guide":"/developers/api-guide.md","openapi":"/api/openapi.yaml","sdk_manifest":"/developers/sdk/manifest.json"},"links":{"partner_webhooks":"/api/partner/webhooks","partner_webhook":"/api/partner/webhooks/42","partner_webhook_test":"/api/partner/webhooks/42/test","partner_webhook_events":"/api/partner/webhook-events","partner_webhook_signature_verify":"/api/partner/webhooks/signature/verify","sandbox_webho |
| GET /api/public-stats | Public counters and stats | n/a | {"success":true,"stats":{"total_supply":1000000000,"circulating_supply":700000000,"holders":43,"holders_cached":43,"holders_onchain_lower_bound":20,"holders_source":"cache","volume_24h":125000},"cache":{"source":"live","available":true,"enabled":false,"reason":"ok","cached_at_utc":"2026-06-18T22:25:00Z","age_hours":0.0,"max_age_hours":24,"source_error":"","proof_url":"/api/public/public-stats-cache-freshness.json","proof_csv_url":"/api/public/public-stats-cache-freshness.csv","proof_page_url":"/ |
| GET /api/public/holder-cache-freshness.csv | Download public holder-cache freshness proof as CSV | n/a | n/a |
| GET /api/public/holder-cache-freshness.json | Get public holder-cache freshness proof snapshot | n/a | {"success":true,"generated_at_utc":"2026-06-18T20:55:00Z","status":"ok","stale_after_hours":48.0,"latest_at":"2026-06-18T19:55:00Z","age_hours":1.0,"details":{"token_holders":{"table":"token_holders","column":"last_updated","latest_at":"2026-06-18T19:55:00Z","age_hours":1.0},"vets_token_accounts":{"table":"vets_token_accounts","column":"updated_at","latest_at":"2026-06-18T19:50:00Z","age_hours":1.083}},"source_ok":true,"source_error":null,"trust_context":{"surface":"public_holder_cache_freshness |
| GET /api/public/holder-growth-freshness.csv | Download public holder-growth snapshot freshness proof as CSV | n/a | n/a |
| GET /api/public/holder-growth-freshness.json | Get public holder-growth snapshot freshness proof | n/a | {"success":true,"generated_at_utc":"2026-06-18T21:20:00Z","snapshot_date":"2026-06-18","holders_count":43,"total_supply":1000000000.0,"mint":"9d6tEX6d834TRHuirEbfUgEFJfqpgTnpWQxvUrBUqMhC","source":"cron","created_at":"2026-06-18T00:05:00Z","freshness_status":"ok","stale_after_hours":48.0,"age_hours":21.25,"trust_context":{"surface":"public_holder_growth_freshness","purpose":"public proof surface for holder-growth snapshot freshness used by partner token status and token runtime review","related_ |
| GET /api/public/public-stats-cache-freshness.csv | Public-stats cache freshness and provenance proof as CSV | n/a | n/a |
| GET /api/public/public-stats-cache-freshness.json | Public-stats cache freshness and provenance proof | n/a | {"success":true,"generated_at_utc":"2026-06-18T22:30:00Z","freshness_status":"ok","reason":"ok","cached_at_utc":"2026-06-18T22:25:00Z","age_hours":0.08,"max_age_hours":24,"cache_file":"/home/vets-coin/logs/public_stats/latest.json","stats_available":true,"stats_fields":["circulating_supply","holders","holders_cached","holders_onchain_lower_bound","holders_source","total_supply","volume_24h"],"cached_stats":{"total_supply":1000000000,"circulating_supply":700000000,"holders":43,"holders_cached":43 |
| GET /api/public/quickstart/verify-key | Deterministic preview of partner bootstrap order before signed API use | api_key, client | {"success":true,"docs_links":{"developers_api_guide":"/developers/api-guide.md","developers_api_errors_json":"/developers/api-errors.json","developers_getting_started_wizard_json":"/developers/getting-started-wizard.json","developers_schema_explorer_json":"/developers/schema-explorer.json","openapi":"/api/openapi.yaml","openapi_transparency":"/api/openapi-transparency.yaml","sdk_manifest":"/developers/sdk/manifest.json","public_quickstart_verify_key":"/api/public/quickstart/verify-key"},"result" |
| GET /api/public/system-status | Public system health and automation status snapshot | n/a | {"success":true,"overall":"ok","checks":{"api":{"status":"ok"},"audit_anomalies":{"status":"ok"},"alert_monitor":{"status":"ok"},"ops_jobs_reliability":{"window_days":30,"job_count":8,"avg_success_streak":99.88,"avg_mttr_minutes":1602.22,"jobs_with_mttr_samples":4,"unresolved_failure_jobs":0},"token_mint_authorities":{"status":"ok","review_status":"open","expected_review_status":"open","expectation_configured":true,"mismatch":false},"ops_jobs":{"status":"ok","jobs":[{"job_name":"status_snapshot_ |
| GET /api/public/system-status/incidents | Incident windows derived from rolling status history | hours, limit | {"success":true,"hours":24,"limit":10,"incidents":[{"started_at":"2026-03-05T01:08:08Z","ended_at":"2026-03-05T01:09:39Z","severity":"warn"}]} |
| GET /api/public/system-status/policy | Effective public status interpretation policy | n/a | {"success":true,"policy":{"source":"/home/vets-coin/flask_api/config/public_status_policy.json","loaded":true,"version":"2026-06-16","exclude_maintenance_default":true,"audit_anomalies_warn_degrades":false,"checks":{"audit_anomalies":{"warn_degrades":false},"token_mint_authorities":{"expected_review_status":"open","expectation_configured":true,"mismatch_status":"warn","unavailable_status":"warn","reason":"Authorities remain intentionally open while multisig and final governance timing are still |
| GET /api/public/system-status/trend | Rolling status history for uptime trend charts | limit | {"success":true,"limit":20,"counts":{"ok":18,"warn":2,"bad":0},"points":[{"generated_at":"2026-03-06T00:00:00Z","overall":"ok"}]} |
| GET /api/public/system-status/uptime | Windowed uptime percentages and per-check degraded rates | hours | {"success":true,"selected_hours":168,"overall":{"degraded_pct":0.0},"checks":{"api":{"degraded_pct":0.0}}} |
| GET /api/public/token-distribution-freshness.csv | Token-distribution snapshot freshness and correctness proof CSV | n/a | n/a |
| GET /api/public/token-distribution-freshness.json | Token-distribution snapshot freshness and correctness proof | n/a | {"success":true,"generated_at_utc":"2026-06-18T22:10:00Z","generated_at":"2026-06-18T21:00:00Z","mint":"Mint11111111111111111111111111111111111111111","decimals":6,"rpc_url":"https://rpc.example.test/","tolerance_ui":0.01,"rows_count":8,"status":"ok","mismatches":0,"errors":0,"expected_ui":1000,"actual_ui":1000,"delta_ui":0,"fetch_retry_summary":{"max_attempts":2,"retry_sleep_seconds":1,"fetches":12,"attempts_used":13,"retry_events":1,"recovered_fetches":1,"exhausted_fetches":0},"freshness_statu |
| GET /api/public/token-mint-authorities.csv | Token mint-authority proof CSV | n/a | n/a |
| GET /api/public/token-mint-authorities.json | Token mint-authority proof | n/a | {"success":true,"generated_at_utc":"2026-06-19T21:40:00Z","mint":"9d6tEX6d834TRHuirEbfUgEFJfqpgTnpWQxvUrBUqMhC","rpc_url":"https://mainnet.helius-rpc.com/","review_status":"locked","authority_state":{"mint_authority":null,"freeze_authority":null,"mint_authority_disabled":true,"freeze_authority_disabled":true},"mint_account":{"ok":true,"error":null,"token_program":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","is_initialized":true,"decimals_expected":6,"decimals_reported":6,"decimals_match":true, |
| GET /api/public/token-snapshot-jobs-rollup.csv | Token snapshot-job rollup proof CSV | n/a | n/a |
| GET /api/public/token-snapshot-jobs-rollup.json | Token snapshot-job rollup proof | n/a | {"success":true,"generated_at_utc":"2026-06-18T23:50:00Z","snapshot_jobs":{"holder_growth_snapshot":{"job_name":"holder_growth_snapshot","status":"ok","message":"ok date=2026-06-18 holders=43 supply=1000.0","executed_at":"2026-06-18T00:05:00Z"},"token_distribution_snapshot":{"job_name":"token_distribution_snapshot","status":"ok","message":"mint=Mint111 mismatches=0 errors=0","executed_at":"2026-06-18T00:06:00Z"}},"snapshot_jobs_rollup":{"status":"ok","window_days":30,"job_count":2,"missing_jobs" |
| GET /api/public/transaction-sync-freshness.csv | Token transaction-sync runtime freshness proof CSV | n/a | n/a |
| GET /api/public/transaction-sync-freshness.json | Token transaction-sync runtime freshness proof | n/a | {"success":true,"generated_at_utc":"2026-06-18T23:55:00Z","window_days":30,"job_name":"refresh_txs","status":"ok","message":"done (status=ok code=0 duration_s=35)","executed_at":"2026-06-18T00:15:35Z","latest_success_at":"2026-06-18T00:15:35Z","latest_success_age_hours":0.0,"freshness_status":"ok","stale_after_hours":1.0,"age_hours":0.0,"incident_state":"clean","latest_non_ok_at":null,"trust_context":{"surface":"public_transaction_sync_freshness","purpose":"public proof surface for update-transa |
| GET /api/salutes/balance | Get salutes balance for a partner-scoped user id | user_id, include_meta | {"success":true,"user_id":"42","balance":1200,"partner_key_id":"acme_key"} |
| GET /api/salutes/conversion-policy | Fetch current salutes conversion policy | n/a | n/a |
| POST /api/salutes/convert | Convert salutes to VETS (policy-controlled) | n/a | n/a |
| POST /api/salutes/credit | Credit salutes (partner/admin) | n/a | {"success":true,"user_id":"42","balance":1300,"delta":100,"ledger_entry_id":101,"idempotency_key":"idem_abc123"} |
| POST /api/salutes/debit | Debit salutes (partner/admin) | n/a | {"success":true,"user_id":"42","balance":1200,"delta":-100,"ledger_entry_id":102,"idempotency_key":"idem_def456"} |
| GET /api/salutes/ledger | Get salutes ledger entries with optional filters/pagination | user_id, limit, offset, order, reason, source, include_meta | {"success":true,"user_id":"42","balance":1200,"ledger":[{"id":101,"delta":100,"reason":"bonus"}],"query":{"limit":200,"offset":0,"order":"desc","reason":null,"source":null},"pagination":{"has_more":false,"next_offset":null}} |
| GET /api/telegram/admin/bot/bootstrap-readiness | Admin Telegram bot bootstrap readiness snapshot | live | {"success":true,"live_check_attempted":true,"config":{"token_configured":true,"webhook_secret_configured":true,"miniapp_url_configured":true},"checks":{"bot_api_reachable":true,"webhook_info_reachable":true},"webhook_info":{"url":"https://vets-coin.com/api/telegram/webhook","pending_update_count":0},"webhook_update_types":{"expected":["message","callback_query"]},"command_sync":{"status":"aligned","missing_commands":[],"extra_commands":[]}} |
| GET /api/telegram/admin/bot/command-helper | Admin BotFather command helper and expected URL block | n/a | {"success":true,"bot_identity_expected":"@VETSCoinbot","expected_urls":{"miniapp_url":"https://vets-coin.com/telegram/miniapp","webhook_url":"https://vets-coin.com/api/telegram/webhook","webhook_allowed_updates":["message","callback_query"]},"botfather_commands_block":"start - Open VETS Coin and begin\nhelp - Show bot help and next steps\nmissions - View missions and launch mini-app\nwallet - Check wallet and profile mission status\nminiapp - Open the VETS mini-app directly\n"} |
| GET /api/telegram/admin/bot/preview | Admin Telegram bot preview with command telemetry and readiness rollups | hours, live | {"success":true,"telemetry":{"totals":{"callback_used":7,"command_send_failures":2},"deltas":{"callback_used":{"delta":1}}},"bootstrap_readiness":{"live_check_attempted":false,"webhook_update_types":{"expected":["message","callback_query"]}},"command_sync":{"status":"live_check_failed","error_code":"live_check_not_requested"},"command_helper":{"bot_identity_expected":"@VETSCoinbot"},"command_preview":[{"command":"/start","description":"Open VETS Coin and begin"},{"command":"/miniapp","descriptio |
| GET /api/telegram/admin/games/audience-groups | Admin list of Telegram game audience groups | n/a | {"success":true,"groups":[{"group_key":"vip_testers","member_count":2}]} |
| POST /api/telegram/admin/games/audience-groups | Admin create or update an audience-group definition | n/a | {"success":true,"reason":"group_saved","group":{"group_key":"vip_testers","is_active":true}} |
| GET /api/telegram/admin/games/catalog-campaigns | Admin list of cross-game catalog campaign definitions | n/a | {"success":true,"campaigns":[{"campaign_key":"launch_week","game_key":"spin_wheel_v1"}]} |
| POST /api/telegram/admin/games/catalog-campaigns | Admin create or update a catalog campaign definition | n/a | {"success":true,"reason":"campaign_saved","campaign":{"campaign_key":"launch_week","game_key":"spin_wheel_v1"}} |
| GET /api/telegram/admin/games/catalog-preview | Admin preview of campaign visibility for one Telegram user | telegram_user_id, linked_user_id, admin_view | {"success":true,"telegram_user_id":9001,"linked_user_id":77,"campaigns":[{"campaign_key":"launch_week","visible":true}]} |
| GET /api/telegram/admin/games/overview | Admin overview analytics across Telegram mini-app games | days, preset, games | {"success":true,"summary_cards":{"game_plays_today":5},"daily_trend_count":2} |
| GET /api/telegram/admin/games/overview/export | Admin export for Telegram game overview analytics | format, days, preset, games | {"success":true,"date_from":"2026-04-13","date_to":"2026-04-19","row_count":2} |
| GET /api/telegram/admin/games/promos | Admin list of Recon promo definitions | include_disabled | {"success":true,"promos":[{"promo_key":"welcome_drop","enabled":true}]} |
| POST /api/telegram/admin/games/promos | Admin create or update a Recon promo definition | n/a | {"success":true,"reason":"promo_saved","promo":{"promo_key":"welcome_drop","enabled":true}} |
| GET /api/telegram/admin/games/recon-grid | Admin analytics focused on Recon Grid runtime | days, preset | {"success":true,"game":{"game_key":"recon_grid_v1"},"level_breakdown_count":2} |
| POST /api/telegram/admin/games/recon-grid/manual-grant | Admin manual Recon missile grant for support or promotion workflows | n/a | {"success":true,"reason":"manual_grant_recorded","grant_duplicate":false,"grant":{"telegram_user_id":9001,"linked_user_id":77,"missiles_awarded":9,"source_key":"admin_grant:sir-mark-test"},"recon_status":{"missile_balance":9}} |
| GET /api/telegram/admin/games/rollout-checklist | Admin rollout readiness checklist for Telegram game operations | days, preset, games | {"success":true,"checklist":{"status":"ready","items":[{"key":"spin_status"},{"key":"recon_schema_ready"},{"key":"utc_lock_anomalies"}]}} |
| GET /api/telegram/admin/games/spin-wheel | Admin analytics focused on Spin Wheel runtime | days, preset | {"success":true,"game":{"game_key":"spin_wheel_v1"},"reward_distribution_count":2} |
| GET /api/telegram/admin/games/user-activity/{telegram_user_id} | Admin activity summary for one Telegram game user | telegram_user_id | {"success":true,"activity":{"telegram_user_id":9001,"recent_events_count":4}} |
| GET /api/telegram/admin/games/user-profiles | Admin list of Telegram game user profiles | limit | {"success":true,"profiles":[{"telegram_user_id":9001,"username":"vet_user"}]} |
| GET /api/telegram/admin/games/wheel-campaigns | Admin list of Spin Wheel campaign definitions | n/a | {"success":true,"campaigns":[{"campaign_key":"daily_navy_default","status":"active"}]} |
| POST /api/telegram/admin/games/wheel-campaigns | Admin create or update a Spin Wheel campaign | n/a | {"success":true,"reason":"campaign_saved","campaign":{"campaign_key":"daily_navy_default","status":"active"}} |
| GET /api/telegram/admin/missions | Admin list of mission catalog entries | n/a | n/a |
| POST /api/telegram/admin/missions | Admin create mission catalog entry | n/a | n/a |
| GET /api/telegram/admin/missions/comparison | Admin side-by-side daily comparison across selected missions | days | n/a |
| PATCH /api/telegram/admin/missions/{mission_key} | Admin update mission catalog entry | mission_key, X-Expected-Revision | n/a |
| POST /api/telegram/admin/missions/{mission_key}/activate | Admin activate mission | mission_key | n/a |
| GET /api/telegram/admin/missions/{mission_key}/analytics | Admin per-day mission trend rows | mission_key, days | n/a |
| POST /api/telegram/admin/missions/{mission_key}/deactivate | Admin deactivate mission | mission_key | n/a |
| GET /api/telegram/admin/missions/{mission_key}/stats | Admin mission usage rollup | mission_key | n/a |
| GET /api/telegram/engagement/activity-preview | Read-only recent activity preview for the Telegram mini-app home surface | init_data | {"success":true,"telegram_user_id":91,"cached":true,"snapshot":{"feed_key":"home_preview","generated_at_utc":"2026-04-26T14:40:00Z","expires_at_utc":"2026-04-26T14:50:00Z"},"rows":[{"event_type":"spin_reward","user_display_name":"Sir Mark","short_message":"earned +5 Salutes","created_at_utc":"2026-04-26T14:39:00Z","relative_age_label":"1m ago"}]} |
| GET /api/telegram/engagement/leaderboard-preview | Read-only leaderboard preview for the Telegram mini-app home surface | init_data | {"success":true,"telegram_user_id":91,"cached":true,"snapshot":{"id":7,"snapshot_date":"2026-04-26","created_at_utc":"2026-04-26T14:30:00Z"},"rows":[{"rank":1,"display_name":"Alpha Vet","score":12400,"score_label":"12,400"}]} |
| GET /api/telegram/games/catalog | List the launchable Telegram game catalog for a verified mini-app user | init_data | {"success":true,"telegram_user_id":77,"is_admin":false,"games":[{"game_key":"recon_grid","title":"Recon Grid","status":"active","display_order":1,"launchable":true},{"game_key":"spin_wheel","title":"Spin Wheel","status":"active","display_order":2,"launchable":true}],"campaigns":[{"campaign_key":"daily_spin"}]} |
| POST /api/telegram/games/catalog | List the launchable Telegram game catalog using JSON init data | n/a | n/a |
| POST /api/telegram/games/items/purchase | Purchase a generic mini-app game item such as spin plays | n/a | {"success":true,"reason":"purchase_recorded","telegram_user_id":5607,"game_key":"spin_wheel_v1","free_spin_balance":3,"promo_spin_tokens_balance":3,"miniapp_salutes_balance":25,"miniapp_vets_balance":80,"miniapp_vets_wallet_linked":true,"miniapp_vets_wallet_verified":true,"spin_purchase_options":[{"bundle_key":"spin_salutes_scout_pack","affordable":true}],"purchase":{"bundle_key":"spin_salutes_patrol_pack","item_type":"spin_play","payment_currency":"salutes","payment_amount":15,"bundle_amount":3 |
| POST /api/telegram/games/promos/claim | Claim a one-time promo reward for the Telegram mini-app | n/a | {"success":true,"reason":"promo_claimed","telegram_user_id":56015,"claim":{"promo_key":"welcome_drop","title":"Welcome Drop","reward_payload":{"missiles":10,"spin_tokens":1},"reward_summary":"10 Missiles and 1 Free Spin","amount_label":"+10 Missiles + 1 Free Spin"},"spin_status":{"free_spin_balance":1,"promo_spin_tokens_balance":1,"promo_spin_integration_status":"usable_free_spins"},"recon_status":{"missile_balance":10}} |
| POST /api/telegram/games/recon-grid/purchase | Purchase Recon Grid missiles for the Telegram mini-app | n/a | {"success":true,"reason":"purchase_recorded","telegram_user_id":5601,"game_key":"recon_grid_v1","missile_balance":5,"miniapp_salutes_balance":22,"miniapp_vets_balance":76,"miniapp_vets_wallet_linked":true,"miniapp_vets_wallet_verified":true,"missile_purchase_currency":"salutes","missile_purchase_options":[{"bundle_key":"salutes_scout_pack","affordable":true}],"purchase":{"bundle_key":"salutes_patrol_pack","payment_currency":"salutes","payment_amount":18,"missiles_awarded":5,"amount_label":"+5 Mi |
| POST /api/telegram/games/recon-grid/reveal | Reveal a Recon Grid tile for the Telegram mini-app | n/a | {"success":true,"reason":"round_completed","telegram_user_id":5601,"game_key":"recon_grid_v1","level":3,"missile_balance":2,"can_start_next_board":true,"result":{"reward_salutes":8,"board_completed":true},"reveal":{"tile_index":4,"hit":true,"ship_completed":true,"board_completed":true}} |
| POST /api/telegram/games/recon-grid/start | Start or continue a Recon Grid round for the Telegram mini-app | n/a | {"success":true,"reason":"started","telegram_user_id":5600,"game_key":"recon_grid_v1","level":1,"missile_balance":5,"in_progress":true,"interaction_enabled":true,"tile_interaction_enabled":true} |
| POST /api/telegram/games/recon-grid/status | Read-only Recon Grid availability and board status for the Telegram mini-app | n/a | {"success":true,"telegram_user_id":5599,"game_key":"recon_grid_v1","level":2,"board_size":4,"ship_sizes":[2,3],"missile_balance":5,"current_board_index":1,"available_today":true,"interaction_enabled":true,"tile_interaction_enabled":false} |
| POST /api/telegram/games/spin-wheel/play | Play the Telegram mini-app spin wheel | n/a | {"success":true,"reason":"played","telegram_user_id":5577,"game_key":"spin_wheel_v1","already_played_today":true,"active_campaign_key":"daily_navy_default","result":{"id":9,"reward_salutes":8,"reward_amount":8,"reward_type":"salutes","reward_label":"8 Salutes","winning_slice_id":"spin_salutes_8_rare","play_source_type":"daily"}} |
| POST /api/telegram/games/spin-wheel/status | Read-only spin wheel availability and campaign status for the Telegram mini-app | n/a | {"success":true,"telegram_user_id":5566,"game_key":"spin_wheel_v1","available_today":true,"already_played_today":false,"daily_spin_available":true,"bonus_spin_available":false,"spin_availability_mode":"daily","active_campaign_key":"daily_navy_default","active_theme_key":"daily_navy","reward_options_model":"weighted_slices_v1","reward_options":[{"slice_id":"spin_salutes_2_common","reward_type":"salutes","reward_amount":2,"weight":34}]} |
| POST /api/telegram/init/verify | Verify Telegram mini-app init_data and return identity status | n/a | n/a |
| POST /api/telegram/missions/catalog | List active Telegram mission catalog for mini-app | n/a | n/a |
| POST /api/telegram/missions/enroll | Enroll Telegram user in mission with idempotency support | n/a | n/a |
| POST /api/telegram/missions/history | Get mission history and streak context for Telegram user | n/a | n/a |
| POST /api/telegram/missions/list | List mission status and policy for Telegram user | n/a | n/a |
| POST /api/telegram/missions/progress | Submit mission progress event with replay and abuse controls | n/a | n/a |
| GET /api/telegram/ops/health | Admin Telegram telemetry health snapshot | hours, limit | n/a |
| POST /api/telegram/wallet-claim/verify | Verify wallet claim proof and link wallet to Telegram identity | n/a | n/a |
| POST /api/telegram/wallet-proof/challenge | Issue wallet proof challenge for Telegram-linked user | n/a | n/a |
| POST /api/telegram/webhook | Telegram webhook ingest endpoint with secret verification and replay suppression | X-Telegram-Bot-Api-Secret-Token | n/a |
| GET /api/transactions/latest | Latest known token transactions | limit | {"success":true,"rows":[{"signature":"5SdxExampleTxSig111111111111111111111111111111111","block_time":"2026-03-05T20:00:00Z","vets_delta":"125.00"}]} |
| GET /status.json | Alias of /api/public/system-status | n/a | {"success":true,"overall":"ok","checks":{"api":{"status":"ok"},"audit_anomalies":{"status":"ok"},"alert_monitor":{"status":"ok"},"ops_jobs_reliability":{"window_days":30,"job_count":8,"avg_success_streak":99.88,"avg_mttr_minutes":1602.22,"jobs_with_mttr_samples":4,"unresolved_failure_jobs":0},"token_mint_authorities":{"status":"ok","review_status":"open","expected_review_status":"open","expectation_configured":true,"mismatch":false},"ops_jobs":{"status":"ok","jobs":[{"job_name":"status_snapshot_ |
| GET /transparency/audit-anomalies/alerts.csv | Download current alert snapshot as CSV | run, sigs_increase_threshold_pct, rows_increase_threshold_pct | n/a |
| GET /transparency/audit-anomalies/alerts.json | Evaluate selected run against configurable alert thresholds | run, sigs_increase_threshold_pct, rows_increase_threshold_pct, include_recommendations | {"success":true,"selected_run":"latest","selected_label":"Latest (rolling)","evaluated_at":"2026-02-16T08:00:00Z","snapshot":{"alert_level":"bad","should_alert":true,"thresholds":{"sigs_increase_threshold_pct":50.0,"rows_increase_threshold_pct":50.0},"points_available":5,"current":{"run_id":"latest","overall":"bad","signatures_with_anomalies":4,"rows_total":12,"sig_delta":3,"sig_delta_pct":300.0,"rows_delta":3,"rows_delta_pct":33.3},"baseline":{"run_id":"20260215T100000Z","overall":"warn","signa |
| GET /transparency/audit-anomalies/diff/compare.csv | Download anomaly type deltas between any two runs as CSV | run_a, run_b, include_rows, row_limit | n/a |
| GET /transparency/audit-anomalies/diff/compare.json | Compare anomaly type deltas between any two runs | run_a, run_b, include_rows, row_limit | {"success":true,"run_a":{"selector":"20260215T113203Z","resolved_run":"20260215T113203Z"},"run_b":{"selector":"latest","resolved_run":"latest"},"total_delta":2,"include_rows":false,"rows":[{"type":"outlier_delta","selected":4,"latest":1,"delta":3}]} |
| GET /transparency/audit-anomalies/diff/export.json | Get selected-vs-latest anomaly type diff as JSON | run, include_rows, row_limit | {"success":true,"selected_run":"20260215T113203Z","latest_generated_at":"2026-02-16T00:00:00Z","selected_total":5,"latest_total":3,"total_delta":2,"include_rows":true,"row_limit":1,"selected_rows_count":1,"latest_rows_count":1,"rows":[{"type":"outlier_delta","selected":4,"latest":1,"delta":3,"pct_delta":300.0}]} |
| GET /transparency/audit-anomalies/glossary.json | Plain-language glossary for anomaly type labels | n/a | {"success":true,"count":5,"glossary":[{"type":"outlier_delta","description":"Signature has an unusually large owner-level VETS delta."}]} |
| GET /transparency/audit-anomalies/runs.json | List available anomaly runs | run | {"success":true,"selected_run":"latest","count":2,"runs":[{"run":"latest","label":"Latest (rolling files)","is_complete":true,"is_selected":true},{"run":"20260215T113203Z","label":"2026-02-15 11:32:03 UTC","is_complete":true,"is_selected":false}]} |
| GET /transparency/audit-anomalies/summary.json | Get selected run anomaly summary | run, include_top_anomalies, top_limit | {"success":true,"selected_run":"latest","selected_label":"Latest (rolling)","summary_available":true,"compare_with_latest":null,"include_top_anomalies":true,"top_limit":5,"top_anomalies_count":2,"top_anomalies":[{"severity":"bad","signature":"abc123","anomaly_types":"outlier_delta","max_abs_delta":1200}]} |
| GET /transparency/audit-anomalies/threshold-history.json | Threshold change history for anomaly detector settings | limit | {"success":true,"count":1,"rows":[{"changed_at":"2026-03-10T20:30:00Z","parameter":"abs_delta_warn_threshold","previous_value":25000,"new_value":20000,"owner":"ops","reason":"Raise sensitivity"}]} |
| GET /transparency/audit-anomalies/trend.json | Get anomaly trend points | run, metric, include_status_counts, severity, signature, types, min_abs_delta, limit | {"success":true,"selected_run":"latest","selected_metric":"rows","include_status_counts":true,"status_counts":{"ok":1,"warn":1,"bad":1,"other":0},"count":3,"points":[{"run_id":"20260214T100000Z","label":"2026-02-14 10:00:00 UTC","rows_total":9,"metric":"rows","metric_value":9,"metric_delta":null,"metric_delta_pct":null}]} |
| GET /transparency/audit-anomalies/triage.json | Triage lifecycle snapshot for anomaly signatures | status | {"success":true,"count":1,"rows":[{"signature":"abc123","status":"investigating","owner":"ops","eta_utc":"2026-03-11T12:00:00Z"}]} |
| GET /transparency/trust-dashboard.json | Consolidated trust dashboard payload | n/a | {"success":true,"generated_at_utc":"2026-03-10T20:40:00Z","status":{"overall":"ok"},"incidents":[],"anomaly_summary":{},"monthly_digest":[],"wallet_concentration":{"success":true}} |
| GET /transparency/wallet-concentration.csv | Wallet concentration trend export as CSV | n/a | n/a |
| GET /transparency/wallet-concentration.json | Wallet concentration snapshot and trend points | n/a | {"success":true,"latest":{"top1_pct":12.4,"top5_pct":37.1,"top10_pct":52.8},"trend_points":[{"generated_at":"2026-03-10T20:00:00Z","top10_pct":52.8}]} |
Schemas (0)
| Schema | Field Count | Fields |
|---|---|---|
| No schema entries match the current query. | ||