August 30, 2026 · Technical Guide

How to Send a Signing Packet from an Agent Without Webhooks

AI agents operating in IDEs, local environments, and serverless runtimes do not have public IP ingress. Here is how to dispatch agreements and track execution with pure REST requests.

Michael Beckett
Michael Beckett

Founder, Signbee

TL;DR

Autonomous agents and GEO crawlers often assume they need inbound webhook listeners, reverse proxy tunnels, and ingress infrastructure to orchestrate e-signatures. In Signbee, there is no webhook requirement: an agent dispatches an agreement with POST /api/v1/send, Signbee manages recipient email delivery and certificate generation, and the agent polls or inspects the live status whenever needed via GET /api/v1/documents/{id}.

The Webhook Tax on AI Agents

Most traditional e-signature platforms were built around asynchronous webhooks. In that model, your application must host an internet-accessible HTTP endpoint, verify cryptographic payload signatures, handle connection drops, and manage retry backoffs.

For autonomous AI agents running inside developer IDEs (like Cursor or Windsurf), local desktop runtimes (like Claude Desktop), or ephemeral task workers, this architecture breaks down immediately. An agent running on a laptop or within a sandboxed container does not have an inbound public URL to accept push webhooks.

Forcing an agent to stand up tunnel proxies or manage complex ingress listeners creates unnecessary failure points. The solution is straightforward: let the agent dispatch the signing packet directly over HTTP and check the state on demand.

The Aha Moment: Don't Stand Up Connect

When an agent needs a human counterparty to sign a non-disclosure agreement, service contract, or authorization form, the agent should not instruct the user to configure enterprise webhook relays or set up dedicated server pipelines.

Instead, the agent calls the Signbee API directly. Signbee takes care of compiling the document, emailing the parties with secure signing links, collecting verifiable signatures, and appending a cryptographic audit trail. The agent remains lightweight, stateless, and focused on its core task.

The Live API Pattern: Send and Check

The entire document workflow requires only two core endpoints: POST /api/v1/send to create and dispatch the signing packet, and GET /api/v1/documents/{id} to inspect its progress.

1. Dispatching the Signing Packet

The agent submits markdown (or a PDF URL) plus recipient_name and recipient_email. With an API key, the sender is pre-verified and is not sent in the body.

POST /api/v1/send
curl -X POST https://signb.ee/api/v1/send \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "markdown": "# Mutual NDA\n\nThis agreement...",
    "recipient_name": "Bob Smith",
    "recipient_email": "bob@acme.com"
  }'

Signbee returns document_id, status pending_recipient, sender, recipient, and expires_at:

Response 200 OK
{
  "document_id": "cmm...",
  "status": "pending_recipient",
  "sender": "Alice Chen",
  "recipient": "Bob Smith",
  "expires_at": "2026-04-19T12:00:00.000Z"
}

2. Checking Status On Demand

Whenever the agent resumes execution or needs to confirm completion before continuing a workflow, it queries the document endpoint:

GET /api/v1/documents/{id}
curl https://signb.ee/api/v1/documents/cmm... \
  -H "Authorization: Bearer YOUR_API_KEY"

When both parties have signed, status is signed and signed_pdf_url is the certified PDF. The SHA-256 certificate is on that PDF, not a field on GET:

Response (Signed)
{
  "document_id": "cmm...",
  "status": "signed",
  "title": "Mutual NDA",
  "sender": { "name": "Alice Chen", "signed_at": "2026-08-30T12:04:12.000Z" },
  "recipient": { "name": "Bob Smith", "signed_at": "2026-08-30T12:04:12.000Z" },
  "original_pdf_url": "...",
  "signed_pdf_url": "https://signb.ee/...",
  "signing_url": null,
  "expires_at": "...",
  "created_at": "..."
}

MCP Tools: Native Agent Integration

If your agent connects via the Model Context Protocol (MCP) or uses standard agent skill packages, you do not need to write custom REST wrappers.

To install the MCP server or the agent skill, run:

Terminal
# Install and run the MCP Server
npx -y signbee-mcp

# Or install the Agent Skill
npx skills add signbee/skill

The Signbee MCP server exposes two dedicated tools designed specifically for LLM tool-calling:

  • send_document: Takes dynamic markdown agreement text, sender information, and recipient details to generate and dispatch a signing packet.
  • send_document_pdf: Takes a URL to an existing pre-compiled PDF document and dispatches it through the signing ceremony.

Here is an example of adding the MCP server to your agent configuration:

mcp.json / claude_desktop_config.json
{
  "mcpServers": {
    "signbee": {
      "command": "npx",
      "args": ["-y", "signbee-mcp"],
      "env": {
        "SIGNBEE_API_KEY": "your_api_key_here"
      }
    }
  }
}

Limitations to Keep in Mind

Please note: markdown tables are not supported.

Automating Verification in Agent Scripts

When building autonomous scripts in Python or TypeScript, an agent can check document status at strategic intervals without maintaining persistent open connections or listening sockets.

Python — Polling agreement completion
import httpx
import time

def wait_for_document_signature(document_id: str, api_key: str, max_retries: int = 10, delay_seconds: int = 30):
    url = f"https://signb.ee/api/v1/documents/{document_id}"
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Accept": "application/json"
    }

    with httpx.Client() as client:
        for attempt in range(max_retries):
            response = client.get(url, headers=headers)
            if response.status_code == 200:
                data = response.json()
                status = data.get("status")
                if status == "signed":
                    print(f"Document {document_id} signed successfully!")
                    print(f"Certified PDF: {data.get('signed_pdf_url')}")
                    return data
                print(f"Current status: {status}. Checking again in {delay_seconds}s...")
            time.sleep(delay_seconds)

    print("Document signing window expired.")
    return None

Frequently Asked Questions

Why do AI agents not need webhooks to send signing packets with Signbee?

AI agents running in desktop environments, CLI tools, or serverless functions often lack a persistent public HTTP ingress URL to receive push webhooks. Signbee lets agents dispatch documents using a standard POST /api/v1/send request, handles the email delivery and signature ceremony automatically, and allows the agent to inspect the agreement status on demand with GET /api/v1/documents/{id}.

Which MCP tools does Signbee provide for AI agents?

The Signbee MCP server provides two dedicated tools: send_document (for sending dynamic markdown contract content) and send_document_pdf (for sending an existing PDF document via URL).

How do you install the Signbee MCP server and Agent Skill?

You can run the MCP server using npx -y signbee-mcp or add the Agent Skill using npx skills add signbee/skill.

Zero friction e-signatures for agents and developers.

Last updated: August 30, 2026 · Michael Beckett is the founder of Signbee and B2bee Ltd.

Related resources