Prowl
15/100
prowl
Benchmarked Oct 01, 2026

Velo Payments APIs

## Terms and Definitions Throughout this document and the Velo platform the following terms are used: * **Payor.** An entity (typically a corporation) which wishes to pay funds to one or more payees

defihrapi defi_yield api_key_header
Benchmark Your API

Score Breakdown

Latency6/10
Auth Simplicity3/10
Consistency2/10
Error Clarity2/10
Documentation1/10
Token Efficiency1/10
Parseability1/10
First-Try Success0/10

Benchmark Analysis Log

Full LLM thinking from the 4-phase benchmark pipeline.

Analyze
{
  "service_type": "defi_protocol",
  "base_url": "https://velopayments.com",
  "auth_method": "api_key_header",
  "auth_config": {},
  "endpoints": [],
  "pricing_model": {
    "type": "per_request",
    "details": {}
  },
  "rate_limits": {},
  "capabilities": [],
  "defi_specifics": {
    "chains": [],
    "protocols": [],
    "yield_types": [],
    "has_tvl_data": false,
    "has_apy_data": false,
    "has_price_feeds": false,
    "contract_verified": false
  }
}
Plan
{
  "tests": [
    {
      "name": "auth_missing_api_key",
      "endpoint": "/v1/payments",
      "method": "GET",
      "headers": {},
      "payload": null,
      "expected_status": 401,
      "intent": "auth",
      "expected_behavior": "Rejects request without X-API-Key header, returns structured auth error",
      "metrics": ["status_code", "latency"],
      "validation": {"field": "error", "type": "string", "min_length": 1}
    },
    {
      "name": "auth_wrong_api_key",
      "endpoint": "/v1/payments",
      "method": "GET",
      "headers": {"X-API-Key": "invalid-key-000"},
      "payload": null,
      "expected_status": 401,
      "intent": "auth",
      "expected_behavior": "Rejects malformed/unknown API key with 401",
      "metrics": ["status_code", "latency"],
      "validation": {"field": "error", "type": "string", "min_length": 1}
    },
    {
      "name": "list_payments_happy",
      "endpoint": "/v1/payments",
      "method": "GET",
      "headers": {"X-API-Key": "{{api_key}}"},
      "payload": null,
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns paginated list of payments for authenticated payor",
      "metrics": ["latency", "status_code", "accuracy"],
      "validation": {"field": "payments", "type": "array", "min_length": 0}
    },
    {
      "name": "create_payment_happy",
      "endpoint": "/v1/payments",
      "method": "POST",
      "headers": {"X-API-Key": "{{api_key}}", "Content-Type": "application/json"},
      "payload": {
        "payorId": "{{payor_id}}",
        "payeeId": "{{payee_id}}",
        "amount": 100,
        "currency": "USD",
        "sourceAccountId": "{{account_id}}",
        "paymentChannel": "ACH"
      },
      "expected_status": 201,
      "intent": "happy_path",
      "expected_behavior": "Accepts valid payment instruction and returns created payment with id",
      "metrics": ["latency", "status_code", "accuracy"],
      "validation": {"field": "paymentId", "type": "string", "min_length": 1}
    },
    {
      "name": "create_payment_missing_amount_validation",
      "endpoint": "/v1/payments",
      "method": "POST",
      "headers": {"X-API-Key": "{{api_key}}", "Content-Type": "application/json"},
      "payload": {
        "payorId": "{{payor_id}}",
        "payeeId": "{{payee_id}}",
        "currency": "USD"
      },
      "expected_status": 400,
      "intent": "validation",
      "expected_behavior": "Rejects payment missing required amount field with structured error",
      "metrics": ["status_code", "latency"],
      "validation": {"field": "error", "type": "string", "min_length": 1}
    },
    {
      "name": "create_payment_bad_currency_validation",
      "endpoint": "/v1/payments",
      "method": "POST",
      "headers": {"X-API-Key": "{{api_key}}", "Content-Type": "application/json"},
      "payload": {
        "payorId": "{{payor_id}}",
        "payeeId": "{{payee_id}}",
        "amount": 100,
        "currency": "NOTACURRENCY",
        "sourceAccountId": "{{account_id}}"
      },
      "expected_status": 400,
      "intent": "validation",
      "expected_behavior": "Rejects unsupported currency code with structured error",
      "metrics": ["status_code", "latency"],
      "validation": {"field": "error", "type": "string", "min_length": 1}
    },
    {
      "name": "get_payment_by_id_happy",
      "endpoint": "/v1/payments/{{payment_id}}",
      "method": "GET",
      "headers": {"X-API-Key": "{{api_key}}"},
      "payload": null,
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns single payment record with matching id and status",
      "metrics": ["latency", "status_code", "accuracy"],
      "validation": {"field": "paymentId", "type": "string", "min_length": 1}
    },
    {
      "name": "get_payment_invalid_id_validation",
      "endpoint": "/v1/payments/00000000-0000-0000-0000-000000000000",
      "method": "GET",
      "headers": {"X-API-Key": "{{api_key}}"},
      "payload": null,
      "expected_status": 404,
      "intent": "validation",
      "expected_behavior": "Returns 404 for non-existent payment id",
      "metrics": ["status_code", "latency"],
      "validation": {"field": "error", "type": "string", "min_length": 1}
    },
    {
      "name": "list_payees_happy",
      "endpoint": "/v1/payees",
      "method": "GET",
      "headers": {"X-API-Key": "{{api_key}}"},
      "payload": null,
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns paginated list of payees for the authenticated payor",
      "metrics": ["latency", "status_code", "accuracy"],
      "validation": {"field": "payees", "type": "array", "min_length": 0}
    },
    {
      "name": "list_payment_channels_happy",
      "endpoint": "/v1/paymentChannels",
      "method": "GET",
      "headers": {"X-API-Key": "{{api_key}}"},
      "payload": null,
      "expected_status": 200,
      "intent": "happy_path",
      "expected_
Execute

1/13 tests passed

TestEndpointStatusLatency
auth_missing_api_keyGET /v1/payments301120ms
auth_wrong_api_keyGET /v1/payments30126ms
list_payments_happyGET /v1/payments30115ms
create_payment_happyPOST /v1/payments40313ms
create_payment_missing_amount_validationPOST /v1/payments40314ms
create_payment_bad_currency_validationPOST /v1/payments40314ms
get_payment_by_id_happyGET /v1/payments/{{payment_id}}30160ms
get_payment_invalid_id_validationGET /v1/payments/00000000-0000-0000-0000-000000000000301131ms
list_payees_happyGET /v1/payees30152ms
list_payment_channels_happyGET /v1/paymentChannels30149ms
Interpret
{
  "overall": 18,
  "dimensions": {
    "token_efficiency": 1.0,
    "first_try_success": 0.5,
    "response_parseability": 1.0,
    "error_clarity": 2.0,
    "doc_quality": 1.0,
    "auth_simplicity": 3.0,
    "latency": 6.0,
    "consistency": 2.0
  },
  "pricing_normalized": {
    "cost_per_1k_requests": null,
    "free_tier_requests": null
  },
  "issues": [
    "All /v1/* endpoints return HTTP 301 redirects — base_url or path is wrong, so no real API is reached",
    "POST requests return 403 HTML (CloudFront distribution misconfigured), not JSON — API is effectively unusable",
    "No DeFi-specific endpoints exposed (no yields, staking, APY, TVL). Capabilities and endpoints arrays are empty",
    "Error messages are generic CONTENT_TYPE_MISMATCH, not DeFi-relevant (no unsupported chain, invalid pool, APY method errors)",
    "Auth tests (missing/wrong API key) return 301 instead of 401/403 JSON — auth semantics completely broken",
    "No yield/APY data present, so accuracy, freshness, and consistency of DeFi values cannot be verified",
    "DefiLlama crossref returned a TVL for 'Re' — no matching protocol TVL from this service to compare against",
    "Documentation on APY vs APR, yield calculation methodology, or chain support is absent"
  ],
  "recommendations": [
    "Fix base URL and routing so /v1/* returns JSON instead of 301 redirects",
    "Configure CloudFront to allow POST and return application/json error payloads",
    "Expose concrete DeFi endpoints: /yields, /pools, /pools/{id}, /protocols, /tvl",
    "Return standard numeric JSON for APY/APR/TVL with units documented",
    "Return 401/403 JSON with clear auth error codes instead of redirects/HTML",
    "Document APY calculation method (compounding frequency, fee handling, reward-token valuation) and chain coverage",
    "Add validation error responses for missing amount, bad currency, unsupported chain, unknown pool",
    "Provide public read-only endpoints for yield data without API key where possible"
  ]
}

Agent Readiness

x402 Payments
Not supported
Streaming
No
Sandbox
None
Agent Auth
api_key_header
SDKs
None listed
MCP Support
No

Embed your Prowl badge

Show your live agent-readiness score on your own site. Free, no auth — it updates as your score changes.

Prowl agent-readiness badge
<a href="https://prowl.world/service/velo-payments-apis">
  <img src="https://prowl.world/badge/velo-payments-apis.svg" height="56" alt="Agent-readiness on Prowl">
</a>

Options: ?style=light|dark · ?size=sm|md · ?variant=certified (claimed + DNS-verified only) · badge generator with preview

Want the full interactive view?

See operational metrics, LLM evaluations, agent readiness, and more.

Open in Dashboard