fabtally-com Attest API
The Attest API from fabtally-com — 1 operation(s) for attest.
The Attest API from fabtally-com — 1 operation(s) for attest.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/fabtally-com:fabtally-com-attest-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: FabTally Attest API
version: 0.2.0
description: 'Pay-per-call utilities for AI agents: slicer-accurate FDM 3D-printing quotes and signed point-in-time URL attestations. Settlement via x402 (USDC on Base).'
x-guidance: 'Two paid endpoints, both x402 (USDC on Base). POST /agent/v1/quote takes a multipart body (file=STL/3MF/STEP, plus optional material and quantity) and returns print time, filament grams and a priced quote ($0.005). POST /agent/v1/attest takes JSON {url, check, needle?} and returns an ed25519-signed record of what the URL returned ($0.01). GET /agent/overview and GET /agent/v1/attest/schema are free discovery docs. Each paid call responds 402 with an x402 `accepts` challenge; pay and retry to receive the result. Bring your own pricing: POST /agent/v1/quote accepts optional material_cost_per_kg, machine_rate_per_hour, setup_fee, margin, markup_percent, minimum_price and currency — omit for hobbyist defaults, pass your own for business economics (config is free; call price unchanged). The quote echoes a `pricing_basis` object of default-vs-custom values.'
contact:
email: hello@fabtally.com
servers:
- url: https://fabtally.com
tags:
- name: Attest
paths:
/agent/v1/attest:
post:
operationId: attest
summary: Attest — signed point-in-time URL observation (paid, $0.01 USDC on Base)
tags:
- Attest
description: Independent point-in-time observation of a public URL, signed with ed25519. Fetches the URL from a neutral third-party host and returns HTTP status, final URL after redirects, sha256 of the exact bytes received, size, and cache headers — plus your chosen check (exists / contains a string / content hash). Useful when an agent needs a durable, verifiable record that a page said something at a specific moment.
x-payment-info:
price:
mode: fixed
currency: USD
amount: '0.010000'
protocols:
- x402:
scheme: exact
network: eip155:8453
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
maxAmountRequired: '10000'
payTo: '0xccB5d25C698FdfdaA7B21d54088774cF512A90e3'
resource: https://fabtally.com/agent/v1/attest
facilitator: https://facilitator.payai.network
maxTimeoutSeconds: 60
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- url
- check
properties:
url:
type: string
description: Absolute http(s) URL to observe. Must resolve to a public IP; private/loopback/link-local ranges are refused at every redirect hop.
check:
type: string
enum:
- exists
- contains
- hash
description: 'What to assert: "exists", "contains" (needs needle), or "hash".'
needle:
type: string
description: Substring to look for when check="contains". 1024 chars max.
example:
url: https://example.com/pricing
check: contains
needle: $49/mo
responses:
'200':
description: Signed attestation
content:
application/json:
schema:
type: object
properties:
url:
type: string
description: The URL as requested (normalized).
fetchedAt:
type: string
format: date-time
description: UTC ISO-8601 timestamp of the observation.
check:
type: string
enum:
- exists
- contains
- hash
needle:
type:
- string
- 'null'
httpStatus:
type:
- integer
- 'null'
description: Status of the final hop; null if the fetch failed.
finalUrl:
type:
- string
- 'null'
description: URL after following redirects.
redirects:
type: array
description: Every redirect hop taken, in order.
items:
type: object
properties:
from:
type: string
status:
type: integer
to:
type: string
result:
type:
- boolean
- string
- 'null'
description: Boolean for exists/contains; sha256 hex string for hash; null if unobtainable.
sha256:
type:
- string
- 'null'
description: sha256 (hex) of the exact response bytes received.
bodyBytes:
type:
- integer
- 'null'
headersSubset:
type: object
properties:
content-type:
type:
- string
- 'null'
last-modified:
type:
- string
- 'null'
etag:
type:
- string
- 'null'
error:
type:
- object
- 'null'
description: Set when the observation could not be completed as a 2xx fetch (DNS failure, timeout, blocked address, non-2xx status, oversized body). The attestation is still returned and still signed — 'the URL did not respond at time T' is itself an observation.
properties:
code:
type: string
message:
type: string
attestor:
type: string
enum:
- attest.fabtally.com/v0
disclaimer:
type: string
enum:
- point-in-time observation, not a legal attestation
signature:
type: object
description: ed25519 signature over the canonical JSON of this object with the `signature` field removed and keys serialized in the documented order. Verify with the public key from GET /agent/v1/attest/schema.
properties:
alg:
type: string
keyId:
type: string
publicKeySpkiB64:
type: string
value:
type: string
description: base64 signature
canonicalization:
type: string
example:
url: https://example.com/pricing
fetchedAt: '2026-07-30T19:05:00.000Z'
check: contains
needle: $49/mo
httpStatus: 200
finalUrl: https://example.com/pricing
redirects: []
result: true
sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
bodyBytes: 18422
headersSubset:
content-type: text/html; charset=utf-8
last-modified: null
etag: W/"47f0-x"
error: null
attestor: attest.fabtally.com/v0
disclaimer: point-in-time observation, not a legal attestation
signature:
alg: ed25519
keyId: …
publicKeySpkiB64: …
value: …
canonicalization: …
'402':
description: Payment Required