Service twin · API only
Waterfall
Test revenue and GTM agents that find prospects, enrich contacts and companies, and verify work emails.
$ uv tool install blobfish-cli
$ blobfish twin login
$ blobfish twin-runs create --twins waterfall --ttl 60 --waitWhat’s inside
A deterministic, seeded, resettable replica: every operation below executes real state transitions against the twin’s own SQLite state — reads are hash-invariant, writes produce inspectable diffs, and reset restores the seed baseline.
Seeded entities
| Entity | Table | Fields | About |
|---|---|---|---|
| company | companies | 7 | Target account enriched with firmographics for GTM prospecting. |
| prospect_list | prospect_lists | 6 | Saved segment of prospects targeted by one campaign or outbound motion. |
| prospect | prospects | 10 | Contact-level prospect on a list, enriched with role, persona, and work email. |
| enrichment_job | enrichment_jobs | 8 | Waterfall enrichment run over a prospect list, cascading through data providers until a match. |
| email_verification | email_verifications | 9 | Deliverability verdict for a prospect's work email: valid, risky, invalid, or unknown. |
Guarded lifecycles
These state machines are enforced, not decorative: an action whose fromstate doesn’t match is rejected the way the production service rejects it.
enrichment_job.status
run: queued → runningcancel: queued|running → canceledcomplete: running → completedretry: failed → queued
Three surfaces, one state
Mount Waterfall in a twin environment and the same seeded state serves vendor-shaped REST operations, an MCP endpoint for tool calling, and a generated bf-twin CLI — with copy-on-write sessions per rollout and a one-call reset to the seed baseline. Prefer raw HTTP? The same create works with curl:
$ curl -sS -X POST https://blobfish.ai/api/v1/twin/environments \
-H "X-API-Key: $BLOBFISH_API_KEY" -H "Content-Type: application/json" \
-d '{"services":["waterfall"],"ttl_minutes":60}'Known limitations
- composite domain template modeled on common waterfall-enrichment GTM APIs (list-based provider waterfalls, contact/company enrichment, email verification); not transcribed from a single vendor's docs
- asynchronous enrichment runs modeled with explicit run/cancel/complete/retry actions; provider chain collapsed to a single matched_provider column
- synthetic seeded values