for builders

Built for agents and the people who build them.

Usign ships a full MCP server, a Stripe-style REST API, and HMAC-signed webhooks. Connect it to Claude or any MCP-capable agent and start sending. Same primitives everywhere: workspaces, templates, merge fields, contracts, signers.

> List my templates
Creator Agreement (v4) · NDA (v2) · MSA (v1)
> Draft the Creator Agreement for maya@studio.co, fee 2,500
Draft created · status: draft · id: ctr_8fK2…
> Preview it
Valid · 6 fields filled · 0 missing
> Send it
Sent · token minted · email dispatched
POST /v1/contracts
// create is always a draft — send is a separate call
{
"template_id": "tpl_creator_v4",
"signer": "maya@studio.co",
"fields": { "fee_amount": 2500 },
"dispatch": false
}
→ 201 · { "id": "ctr_8fK2a", "status": "draft" }

Three steps to your first contract.

01 · connect
Connect the MCP server.

Add the Usign MCP server to your agent and authenticate the workspace once.

02 · list
List your templates.

Your agent reads the published templates and their merge fields automatically.

03 · send
Send your first contract.

Draft, preview, then confirm send. The signer gets a clean link by email.

Every tool your agent gets.

The full agent surface, named in mono. Create is always a draft. Send is always explicit.

select_workspace
Point the agent at a workspace and load its templates.
list_templates
List published templates with their version numbers.
get_template
Fetch one template and its structure.
list_merge_fields
Inspect the field registry for a template.
create_contract
Create a single draft. Never sends anything.
create_contracts_bulk
Create up to 300 drafts from a list in one call.
preview_contract
Render and validate a draft before it leaves.
send_contractexplicit
The deliberate send. Mints tokens, dispatches email.
get_contract
Fetch a contract’s status and full audit trail.
list_contracts
Query by status, signer, or external reference.
void_contract
Void a contract with a recorded reason.
two-phase safety

Create is always a draft. Send is always explicit.

create_contract and create_contracts_bulk never dispatch. Email goes out only on send_contract. An agent literally cannot fire a contract in a single call. Developers look for this guarantee, so we put it in the type system.

create → draft send → sent
webhooks

Every event chains.

Each lifecycle event fires an HMAC-signed webhook carrying your own external_reference, the ID you set when creating the contract. Match it on your side and route the event anywhere: a CRM, a queue, another agent.

contract.created A draft was created.
contract.viewed A signer opened the signing link.
contract.signed A signer completed their signature.
contract.completed All signers are done. PDF is sealed.
contract.voided A contract was voided, with a reason.
contract.expired A signing link passed its expiration.