Prediction markets and DAOs logo

Grant Milestone Verifier with Signed Release Attestation

$2.00 USDC per call · Smart contracts and tokens · POST /api/v1/verify-milestone · Id milestone-verifier

Decides whether a grantee met a milestone before a DAO releases the next tranche or stream. Checks GitHub as of the due date (commits, tags, releases, CI, files), npm/PyPI/crates.io publish times, Snapshot proposal state, on-chain deployments (bytecode selector scan through proxies, Sourcify, creation transaction), and URLs; judges the rest with an ensemble plus a skeptical reviewer, reads Sablier Lockup streams on-chain, and returns a decision headline, a per-criterion PASS/FAIL/UNVERIFIABLE verdict, releaseBps, and an EIP-712 signed attestation. Advisory: it never moves funds, and if a source such as GitHub is unreachable those criteria come back UNVERIFIABLE in a signed partial result instead of an error.

What you get

A grant committee, payment agent or multisig can base a tranche release on a signed, reproducible check of public evidence instead of a self-reported milestone.

Call it

Send the JSON body below to https://agents.writerslogic.com/api/v1/verify-milestone. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.

curl -i -X POST https://agents.writerslogic.com/api/v1/verify-milestone \
  -H 'content-type: application/json' \
  -d '{"milestone":{"title":"Maintenance and ecosystem support","acceptanceCriteria":["A tagged release v0.2.0 is published","A changelog is maintained in the repository","Continuous integration passes on the main branch","Public documentation describes ArbSys and ArbGasInfo local support"],"dueDate":"2026-02-28"},"evidence":{"repoUrl":"https://github.com/Supercoolkayy/Ox-rollup","ref":"main","deployments":[{"chain":"arbitrum","address":"0xaf88d065e77c8cC2239327C5EDb3A432268e5831","expectedFunctions":["transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)"]}],"urls":["https://www.ox-rollup.com/docs/01-overview"]},"payout":{"protocol":"sablier","chain":"ethereum","streamId":"3","lockup":"0xcF8ce57fa442ba50aCbC57147a62aD03873FfA73","recipient":"0xc616B2449E9765EDF9FFb485Da42420971299519","amountTotal":"1000000000000000000000"},"releasePolicy":{"mode":"proportional"}}'

Input

FieldTypeRequiredDescription
milestoneobjectyes
evidenceobjectyes
payoutobjectno
releasePolicyobjectno

Example request body

{
  "milestone": {
    "title": "Maintenance and ecosystem support",
    "acceptanceCriteria": [
      "A tagged release v0.2.0 is published",
      "A changelog is maintained in the repository",
      "Continuous integration passes on the main branch",
      "Public documentation describes ArbSys and ArbGasInfo local support"
    ],
    "dueDate": "2026-02-28"
  },
  "evidence": {
    "repoUrl": "https://github.com/Supercoolkayy/Ox-rollup",
    "ref": "main",
    "deployments": [
      {
        "chain": "arbitrum",
        "address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
        "expectedFunctions": [
          "transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)"
        ]
      }
    ],
    "urls": [
      "https://www.ox-rollup.com/docs/01-overview"
    ]
  },
  "payout": {
    "protocol": "sablier",
    "chain": "ethereum",
    "streamId": "3",
    "lockup": "0xcF8ce57fa442ba50aCbC57147a62aD03873FfA73",
    "recipient": "0xc616B2449E9765EDF9FFb485Da42420971299519",
    "amountTotal": "1000000000000000000000"
  },
  "releasePolicy": {
    "mode": "proportional"
  }
}

Result

The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.

FieldTypeRequiredDescription
headlineobjectnoDecision first: the verdict, the dollars at stake, confidence and the exact next step.
statusstring; one of "complete", "partial"nopartial when an evidence source (for example GitHub, when rate limited) could not be read; its criteria are then UNVERIFIABLE.
missingarray<string>no
disclaimerstringno
githubRequestsobjectnoGitHub REST calls spent by this run, whether they were authenticated, the hourly limit that applies, and whether the run hit it.
verdictstring; one of "PASS", "PARTIAL", "FAIL", "INSUFFICIENT_EVIDENCE", "PAYOUT_BLOCKED"no
releaseBpsintegernoShare of the tranche to release, 0-10000.
releaseAmountone ofnofloor(amountTotal * releaseBps / 10000) in base units, capped at the stream's remaining balance; null without a payout.
confidencestring; one of "low", "medium", "high"no
criteriaarray<object>no
payoutone ofno
evidenceSummaryobjectno
provenanceobjectnodecidedBy (deterministic, mixed or ensemble), claim counts per path, and an upper bound on model calls made (1 decomposition call, plus 3 judge samples and 1 skeptic call only when some claim needed judgment).
milestoneHashstringnokeccak256 of the canonical JSON of {milestone, evidence}.
attestationobjectnoEIP-712 MilestoneAttestation: signed, signature, signer, digest, typedData and typedDataV4. Unsigned (signed:false) when the agent has no attestation key.
warningsarray<string>no

Pay and connect

Available through: x402 (USDC on Base), MCP, RapidAPI.

Machine-readable