Quickstart
One API and a hosted MCP server: find the open tenders and grants that fit a company, see who holds the work now, and run the document, text and evidence checks a bid needs. Free to start, no key needed.
Find open tenders
GET /v1/tenders is free and needs no key. Filter by jurisdiction (a country or a state), tier, category, buyer, closing date or keyword; add kind=grant for grants.
curl "https://www.stipple.sh/v1/tenders?jurisdiction=AU-QLD&q=road&limit=2"The response, as captured on 15 September 2026:
{
"total": 15,
"results": [
{
"title": "RFT260091 - Capella Rubyvale Road Upgrade CH 47.3 - 48.6",
"buyer": "CENTRAL HIGHLANDS REGIONAL COUNCIL",
"jurisdiction": "AU-QLD",
"tier": "council",
"closing_date": "2026-09-21",
"source_tag": "VendorPanel",
"link": "https://www.vendorpanel.com.au/PublicTenderAccess.aspx?id=...",
"tender_key": "17d2cc3cca27d22ef5874d9be40ab210"
}
],
"coverage": { "sources_total": 23, "sources_empty": [ ... ], "last_run": "2026-09-14T12:32:04+00:00" }
}coverage before you say "there are none". It names the sources searched and the ones that returned nothing — login walls, blocked hosts, empty runs — so an empty result means "no match in what we searched", never "no such tender exists".Who holds the work now
Take the buyer a tender publishes and ask GET /v1/awards/buyers/lookup: what they have awarded, the value quartiles, the response window they usually give, the contracts ending within 12 months and their planned procurements — rolled up nightly from AusTender and the Queensland contract disclosure reports.
curl "https://www.stipple.sh/v1/awards/buyers/lookup?name=Transport%20for%20NSW&jurisdiction=AU-NSW"{
"buyer": {
"name": "Transport for NSW", "buyer_key": "...", "window_from": "2024-09-15",
"award_count": 118, "median_value": 74000, "p25_value": 20000, "p75_value": 310000,
"value_currency": "AUD", "median_response_days": 24.4, "expiring_12m": 3, "planned_12m": 1
},
"expiring": [ { "contract_id": "CN...", "title": "...", "supplier": "", "value_amount": 1200000,
"value_currency": "AUD", "end_date": "2027-03-01", "url": "..." } ],
"planned": [ ... ], "recent_awards": [ ... ], "top_suppliers": [ ... ],
"computed_at": "2026-09-15T02:00:00+00:00",
"sources": [ { "attribution": "AusTender (Department of Finance), CC BY 3.0 AU" }, ... ],
"withheld": 3,
"withheld_reason": "Sign in to see who holds these contracts."
}withheld_reason carries the sentence to show. Every payload says the night its figures are true for in computed_at. The same data, and the same rule, is on the MCP tools buyer_awards and find_signals.Fact-check a report by URL
Point POST /v1/verify-references at any public report or article. Stipple fetches it, resolves every citation, recomputes the document's own arithmetic, and returns a structured verdict with a shareable permalink.
curl -X POST https://www.stipple.sh/v1/verify-references \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/report.pdf"}'The response is a trust summary plus per-item tables:
{
"summary": {
"references_total": 63,
"references_live": 57,
"references_archived": 3,
"references_dead": 3,
"papers_mismatched": 1,
"internal_issues": 0,
"headline": "60/63 citations resolve; 1 mis-attributed paper; 3 dead links"
},
"references": [ ... ],
"claims": [ ... ],
"internal_consistency": [ ... ],
"limitations": "Reports verification coverage, not truth. ...",
"check_id": "fc_6d22fb4033cbac40",
"permalink": "https://www.stipple.sh/fc/targeted-compliance-framework-review-6d22fb4033cbac40"
}Verify a document for tampering
Upload a PDF or image to POST /v1/warrants for forensic inspection — tampering signals, structure and metadata analysis, arithmetic reconciliation. You get back a warrant: a risk band, findings, and a shareable record.
curl -X POST https://www.stipple.sh/v1/warrants \
-F "file=@payslip.pdf"Detect AI-written text
Send prose (or a URL or file) to POST /v1/detect-ai-text. It returns a probability with the specific tells, and abstains on non-prose documents where style detection is unreliable.
curl -X POST https://www.stipple.sh/v1/detect-ai-text \
-H "Content-Type: application/json" \
-d '{"text": "Paste the prose you want to check here..."}'Verify identity (AU 100-point)
Send a person's identity documents to POST /v1/identity-check. A reader identifies each one and the fields it shows; a deterministic engine tallies them against the Australian 100-point check (or the AUSTRAC safe-harbour rules) and tells you whether identity is established — and exactly what's missing if not. Coverage, not a forgery judgment.
curl -X POST "https://www.stipple.sh/v1/identity-check?scheme=afp_100_point" \
-F "files=@passport.pdf" -F "files=@licence.pdf"Test for free (sandbox)
Add ?sandbox=true (or the header Stp-Sandbox: true) to any tool for a deterministic, clearly-labelled fixture response — no engine work, and it never counts against your weekly limit. Every sandbox response carries "sandbox": true, so you can wire and test an integration before sending a single real document.
curl -X POST "https://www.stipple.sh/v1/extract?sandbox=true" \
-H "Content-Type: application/json" -d '{}'
# -> { "sandbox": true, "mode": "template", "document_type": "payslip", "fields": {...} }Get your own key
Keys are minted from your signed-in account and share its weekly limit — sign in free (no card) and the key arrives instantly.
Limits
Every tool is free and rate-limited: a weekly cap of checks applies, with or without an account (short bursts up to 10 requests, 25 MB max upload). API keys belong to your account and share its weekly limit. Current limits: GET /v1/pricing. Details in Errors & limits.
Next steps
- Task-based execution playbooks — copy-paste recipes for payslip verification, bank tables, 100-point KYC, fact-checking, and checklists.
- Use cases by industry — the workflow each call solves: onboarding, lending, claims, rentals, HR, and more.
- API reference — every endpoint, parameter, and response shape.
- MCP integration — give Claude, Cursor, or your own agent these tools natively.
- agents.md — the machine-readable guide AI agents read directly.
- OpenAPI spec — the machine-readable contract; generate a typed client or import it into your tooling.