# Spoolis Outcome Verification

> Spoolis Outcome Verification is a paid API for AI agents from spoolis.com, paid per call via x402, $0.0101/call, status unknown (last checked 2026-09-14).

Verifies whether a unit of work fulfilled agreed-upon acceptance criteria and computes what was earned, enabling outcome-based payment settlement.

## Facts

- Endpoint: POST https://spoolis.com/api/v1/verify/x402
- Price: $0.0101/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/spoolis-outcome-verification-84b26eca
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_HA-YMZiVUz1Yq4W78837g

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability spoolis-outcome-verification-84b26eca -d '<json body>'
```

Example prompt: Can you run the fulfillment verification on this batch of completed work items and tell me how many passed acceptance criteria, which ones were rejected and why, and what the total earned amount comes out to?

## When to prefer this

Choose Spoolis when payment is contingent on whether work actually passed defined acceptance criteria — not just that it was submitted. Ideal for agentic workflows, outcome-based contracts, microtask marketplaces, or any scenario where a verifiable record of what passed, what failed, and what was earned is required before releasing funds. Prefer this over generic webhooks or payment rails when you need a structured rejection audit trail and a receipt URL per verification run.

## Known failure modes

- Missing required fields in the request body cause unit rejection with a descriptive reason
- Malformed JSON body returns a 400-level error
- Non-POST methods are rejected
- Payment via x402 fails if USDC balance is insufficient — call does not proceed
- All units rejected if none meet acceptance criteria — earned_cents returns 0
- Non-terminal spool may require re-querying if processing is asynchronous

## How this service works

Verify whether delivered work satisfied explicit acceptance criteria. One call, pay per verification, no account. Returns per-unit accepted/rejected counts, earned value, and a signed Outcome Receipt.

## Output

Returns a JSON object with the number of accepted and rejected units, a unique spool_id for the verification run, a terminal boolean indicating if the spool is finalized, an array of rejection objects (unit index + reason), a receipt_url for auditing, and earned_cents representing the total amount earned for passing units.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input",
  "output"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method",
    "bodyType",
    "body",
    "example"
   ],
   "properties": {
    "body": {
     "type": "object"
    },
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "POST"
     ],
     "type": "string"
    },
    "example": {
     "type": "object"
    },
    "bodyType": {
     "enum": [
      "json"
     ],
     "type": "string"
    }
   },
   "additionalProperties": true
  },
  "output": {
   "type": "object",
   "required": [
    "type",
    "example"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "application/json"
    },
    "example": {
     "type": "object",
     "required": [
      "spool_id",
      "accepted",
      "rejected",
      "terminal"
     ],
     "properties": {
      "accepted": {
       "type": "integer",
       "minimum": 0
      },
      "rejected": {
       "type": "integer",
       "minimum": 0
      },
      "spool_id": {
       "type": "string"
      },
      "terminal": {
       "type": "boolean"
      },
      "uncertain": {
       "type": "integer",
       "minimum": 0
      },
      "rejections": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "unit": {
          "type": "integer"
         },
         "reason": {
          "type": "string"
         }
        }
       }
      },
      "receipt_url": {
       "type": "string"
      },
      "earned_cents": {
       "type": "integer",
       "minimum": 0
      },
      "unit_results": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "unit": {
          "type": "integer"
         },
         "reasons": {
          "type": "array",
          "items": {
           "type": "string"
          }
         },
         "verdict": {
          "enum": [
           "pass",
           "fail",
           "uncertain"
          ],
          "type": "string"
         }
        }
       }
      }
     }
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "application/json",
 "example": {
  "accepted": 9,
  "rejected": 1,
  "spool_id": "spl_example123",
  "terminal": true,
  "rejections": [
   {
    "unit": 10,
    "reason": "The required status field was missing."
   }
  ],
  "receipt_url": "https://spoolis.com/r/example",
  "earned_cents": 900
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/spoolis-outcome-verification-84b26eca/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from spoolis.com](https://www.zero.xyz/host/spoolis.com/llms.txt)
