Service twin · API only
Unified
Test integration agents built against Unified.to across multiple connected providers.
$ uv tool install blobfish-cli
$ blobfish twin login
$ blobfish twin-runs create --twins unified --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 |
|---|---|---|---|
| connection | connections | 8 | A customer's linked provider account through which unified domain objects are reached. |
| integration | integrations | 7 | A provider available in the Unified.to catalog that a workspace can connect. |
| crm_contact | crm_contacts | 7 | Unified CRM contact read through a specific provider connection. |
| crm_deal | crm_deals | 8 | Unified CRM deal read through a specific provider connection. |
| hris_employee | hris_employees | 8 | Unified HRIS employee read through a specific provider connection. |
| ticketing_ticket | ticketing_tickets | 7 | Unified ticketing ticket read through a specific provider connection. |
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.
connection.auth_status
disconnect: authorized → disconnectedreauthorize: disconnected → authorized
ticketing_ticket.status
start: open → in_progressclose: open|in_progress → closed
Three surfaces, one state
Mount Unified 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":["unified"],"ttl_minutes":60}'Known limitations
- transcribed from https://docs.unified.to/api; parameter and response schemas simplified
- synthetic seeded values
- connection categories simplified to a single category string
- disconnect/reauthorize modeled as explicit lifecycle actions on the connection