Stripe
Payment infrastructure for the internet.
Overall score
77.2/100
stripe-rest-v1
Measured Oct 5, 2026
Status
Ranked
Complete benchmark. `overall` is a weighted average of the applicable criteria, comparable to other surfaces in the same category and the same rubric version.
Coverage
98% of the rubric
Surfaces
evaluated.
We score a surface, not a product. One product often exposes several, and they are not worth the same.
stripe-rest-v1restprimary
98% coverage
77.2/100
Criterion
by criterion.
Measured on stripe-rest-v1, rubric v0.2.0. A criterion with no score is not counted as zero: it is excluded and the weights are renormalised.
Offload Valuejudged · weight 15 · Oct 5, 2026
97/100
Stripe performs real-world irreversible side effects an agent cannot simulate: moving funds, charging cards, payouts, transfers, refunds, subscriptions, tax rates, fraud/radar, identity and compliance. It also interacts with banking networks and card issuers, returning decline codes and network advice codes no amount of inference could produce. This is far beyond storage.
- https://docs.stripe.com/api
You can use the Stripe API in sandboxes without affecting your live data or interacting with banking networks.
- https://docs.stripe.com/api
You can use the Stripe API in sandboxes without affecting your live data or interacting with banking networks.
- https://docs.stripe.com/api
You can use the Stripe API in sandboxes without affecting your live data or interacting with banking networks.
Interaction Costmeasured · weight 15 · Oct 5, 2026
67/100
Median over 2 successful run(s): 17720 tokens, 3.5 calls. Ratio to the best in "payments" (3 surfaces measured, v0.2 scale). Cold, without documentation: 1/1 succeeded.
Error Recoverabilityprobed · weight 15 · Oct 5, 2026
80/100
unknown_endpoint → HTTP 404, clarity 85/100 (field named: yes, allowed values: yes, RFC 9457: no) · wrong_type → HTTP 400, clarity 85/100 (field named: yes, allowed values: yes, RFC 9457: no) · hallucinated_enum → HTTP 400, clarity 85/100 (field named: yes, allowed values: yes, RFC 9457: no) · unknown_field → HTTP 400, clarity 85/100 (field named: yes, allowed values: yes, RFC 9457: no) · missing_required_param → HTTP 400, clarity 60/100 (field named: no, allowed values: yes, RFC 9457: no) · idempotency_replay → HTTP 200, clarity 30/100 (field named: no, allowed values: no, RFC 9457: no)
- https://api.stripe.com/v1/customers
HTTP 401: { "error": { "message": "You did not provide an API key. You need to provide your API key in the Authorization header, using Bearer auth (e.g. 'Authorization: Bearer YOUR_SECRET_KEY'). See https
- https://api.stripe.com/v1/customers/nonexistent_resource_xyz
HTTP 404: { "error": { "code": "resource_missing", "doc_url": "https://stripe.com/docs/error-codes/resource-missing", "message": "No such customer: 'nonexistent_resource_xyz'", "param": "id",
- https://api.stripe.com/v1/customers?limit=not_a_number
HTTP 400: { "error": { "code": "parameter_invalid_integer", "doc_url": "https://stripe.com/docs/error-codes/parameter-invalid-integer", "message": "Invalid integer: not_a_number", "param": "li
- https://api.stripe.com/v1/customers?expand%5B%5D=nonexistent_relation
HTTP 400: { "error": { "message": "This property cannot be expanded (nonexistent_relation). You may want to try expanding 'data.nonexistent_relation' instead.", "request_log_url": "https://dashboard.s
Doc Legibilitymeasured · weight 12 · Oct 5, 2026
24/100
text/markup ratio 0.7% (weight 30) · rendering without JavaScript undetermined (excluded from the calculation) (weight 25) · machine-readable spec: none found (weight 25) · llms.txt: https://docs.stripe.com/llms.txt (weight 10) · 2 runnable example(s) (weight 10). Weighted average over 75 points of available sub-criteria.
Auth Frictionmeasured · weight 10 · Oct 5, 2026
95/100
Authorization: Bearer <key>, verified by a successful call. One header, no ceremony.
- https://api.stripe.com/v1/customers
HTTP 401: { "error": { "message": "You did not provide an API key. You need to provide your API key in the Authorization header, using Bearer auth (e.g. 'Authorization: Bearer YOUR_SECRET_KEY'). See https
- https://api.stripe.com/v1/customers/nonexistent_resource_xyz
HTTP 404: { "error": { "code": "resource_missing", "doc_url": "https://stripe.com/docs/error-codes/resource-missing", "message": "No such customer: 'nonexistent_resource_xyz'", "param": "id",
- https://api.stripe.com/v1/customers?limit=not_a_number
HTTP 400: { "error": { "code": "parameter_invalid_integer", "doc_url": "https://stripe.com/docs/error-codes/parameter-invalid-integer", "message": "Invalid integer: not_a_number", "param": "li
- https://api.stripe.com/v1/customers?expand%5B%5D=nonexistent_relation
HTTP 400: { "error": { "message": "This property cannot be expanded (nonexistent_relation). You may want to try expanding 'data.nonexistent_relation' instead.", "request_log_url": "https://dashboard.s
Safety & Reversibilityprobed · weight 10 · Oct 5, 2026
100/100
Two identical POSTs with the same Idempotency-Key header return the same resource (cus_VNwfjOMrDryZg6). An agent can retry without risking a duplicate. (weight 35) · Isolated test environment available. (weight 25). Weighted average over 60 points of measured sub-criteria.
- https://api.stripe.com/v1/customers
HTTP 401: { "error": { "message": "You did not provide an API key. You need to provide your API key in the Authorization header, using Bearer auth (e.g. 'Authorization: Bearer YOUR_SECRET_KEY'). See https
- https://api.stripe.com/v1/customers/nonexistent_resource_xyz
HTTP 404: { "error": { "code": "resource_missing", "doc_url": "https://stripe.com/docs/error-codes/resource-missing", "message": "No such customer: 'nonexistent_resource_xyz'", "param": "id",
- https://api.stripe.com/v1/customers?limit=not_a_number
HTTP 400: { "error": { "code": "parameter_invalid_integer", "doc_url": "https://stripe.com/docs/error-codes/parameter-invalid-integer", "message": "Invalid integer: not_a_number", "param": "li
- https://api.stripe.com/v1/customers?expand%5B%5D=nonexistent_relation
HTTP 400: { "error": { "message": "This property cannot be expanded (nonexistent_relation). You may want to try expanding 'data.nonexistent_relation' instead.", "request_log_url": "https://dashboard.s
Payload Efficiencyprobed · weight 8 · Oct 5, 2026
46/100
No discoverable field selection (tested fields, select, _fields, expand, properties): the agent swallows the whole resource. (weight 35) · 527 bytes per returned object (7 object(s) in the control response). (weight 25) · Cursor pagination detected ("has_more"). (weight 20) · One list envelope, standard. (weight 10) · No ETag. (Compression is not measurable: the runtime decompresses it and strips the header.) (weight 10). Weighted average over 100 points of measured sub-criteria.
- https://api.stripe.com/v1/customers
HTTP 401: { "error": { "message": "You did not provide an API key. You need to provide your API key in the Authorization header, using Bearer auth (e.g. 'Authorization: Bearer YOUR_SECRET_KEY'). See https
- https://api.stripe.com/v1/customers/nonexistent_resource_xyz
HTTP 404: { "error": { "code": "resource_missing", "doc_url": "https://stripe.com/docs/error-codes/resource-missing", "message": "No such customer: 'nonexistent_resource_xyz'", "param": "id",
- https://api.stripe.com/v1/customers?limit=not_a_number
HTTP 400: { "error": { "code": "parameter_invalid_integer", "doc_url": "https://stripe.com/docs/error-codes/parameter-invalid-integer", "message": "Invalid integer: not_a_number", "param": "li
- https://api.stripe.com/v1/customers?expand%5B%5D=nonexistent_relation
HTTP 400: { "error": { "message": "This property cannot be expanded (nonexistent_relation). You may want to try expanding 'data.nonexistent_relation' instead.", "request_log_url": "https://dashboard.s
Task Atomicitymeasured · weight 6 · Oct 5, 2026
100/100
Median over 2 successful run(s): 17720 tokens, 3.5 calls. Ratio to the best in "payments" (3 surfaces measured, v0.2 scale). Cold, without documentation: 1/1 succeeded.
Prior Knowledge Coveragemeasured · weight 5 · Oct 5, 2026
100/100
Median over 2 successful run(s): 17720 tokens, 3.5 calls. Ratio to the best in "payments" (3 surfaces measured, v0.2 scale). Cold, without documentation: 1/1 succeeded.
Async Compatibilityprobed · weight 2 · Oct 5, 2026
100/100
POST /customers returns an identifier, and GET /customers/{id} reads it back (HTTP 200): the result can be retrieved by polling, with no server to host. Long-polling / SSE not probed, excluded from the weighting.
- https://api.stripe.com/v1/customers
HTTP 401: { "error": { "message": "You did not provide an API key. You need to provide your API key in the Authorization header, using Bearer auth (e.g. 'Authorization: Bearer YOUR_SECRET_KEY'). See https
- https://api.stripe.com/v1/customers/nonexistent_resource_xyz
HTTP 404: { "error": { "code": "resource_missing", "doc_url": "https://stripe.com/docs/error-codes/resource-missing", "message": "No such customer: 'nonexistent_resource_xyz'", "param": "id",
- https://api.stripe.com/v1/customers?limit=not_a_number
HTTP 400: { "error": { "code": "parameter_invalid_integer", "doc_url": "https://stripe.com/docs/error-codes/parameter-invalid-integer", "message": "Invalid integer: not_a_number", "param": "li
- https://api.stripe.com/v1/customers?expand%5B%5D=nonexistent_relation
HTTP 400: { "error": { "message": "This property cannot be expanded (nonexistent_relation). You may want to try expanding 'data.nonexistent_relation' instead.", "request_log_url": "https://dashboard.s
Tool-Native (MCP)binary · weight 2
—/100
Does the vendor publish an official, maintained MCP server?
Runs, verified
never on the agent’s word.
Every row is a real attempt at the category’s canonical task. Success is verified by reading the created resource back.
| Task | Tokens | Calls | Errors | Docs | Result |
|---|---|---|---|---|---|
| charge-a-customer | 13,299 | 3 | 0 | without | verified |
| charge-a-customer | 21,082 | 4 | 0 | with | verified |
| charge-a-customer | 14,358 | 3 | 0 | with | verified |
The same entry,
without the markup.
You publish this API and dispute a score? The methodology is public and every score above points to the evidence that produced it.