Service twin · API + UI
Documenso
Test document agents that prepare envelopes, route recipients, collect signatures, and manage signing workflows.
$ uv tool install blobfish-cli
$ blobfish twin login
$ blobfish twin-runs create --twins documenso --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. This twin runs the captured contract cx--documenso rekeyed onto seeded state.
Seeded entities
| Entity | Table | Fields | About |
|---|---|---|---|
| documenso_distribute_document | documenso_distribute_documents | 7 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_document | documenso_documents | 20 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_document_field | documenso_document_fields | 9 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_document_recipient | documenso_document_recipients | 17 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_duplicate_document | documenso_duplicate_documents | 6 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_embedding_presign_token_beta | documenso_embedding_presign_token_betas | 7 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_move_document | documenso_move_documents | 7 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_redistribute_document | documenso_redistribute_documents | 7 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_resend_document_for_signing | documenso_resend_document_for_signings | 8 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_signed_document | documenso_signed_documents | 6 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_team_member | documenso_team_members | 9 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_template | documenso_templates | 12 | Inferred from MCP tool parameters; the tool contract remains the authority. |
| documenso_use_template_beta | documenso_use_template_betas | 8 | Inferred from MCP tool parameters; the tool contract remains the authority. |
Three surfaces, one state
Mount Documenso 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":["documenso"],"ttl_minutes":60}'Known limitations
This twin mirrors the captured contract cx--documenso: its tool surface is the captured server’s, with synthetic seeded values. Operations outside that capture are not mounted — we mount fewer, executable operations rather than stub the rest.