The API reaches the same NDAs as the tools, over plain JSON: the ones you sent and the ones sent to your verified email address. Each tool is one of its routes under another name, so a route and its tool answer the same thing.
Sign in
Send an API token from the Agents page, or the OAuth token of an app you connected, as a bearer token:
GET https://sendnda.com/api/v1/ndas
Authorization: Bearer YOUR_TOKEN
Accept: application/json
The token acts as you. The limit is the one the MCP server has: 120 requests per minute per account, and five new NDAs a minute.
The routes
Each takes the fields its tool takes, as a query string on a GET and as a JSON body otherwise.
| Route | Tool | Does |
|---|---|---|
GET /api/v1/ndas | list-ndas | Lists the NDAs you sent and received |
POST /api/v1/ndas | create-nda | Creates an NDA and emails both parties at once |
GET /api/v1/ndas/{uuid} | get-nda | Reads one NDA with its agreement text and document_sha256 |
PATCH /api/v1/ndas/{uuid} | amend-nda | Changes the terms of an NDA you sent |
POST /api/v1/ndas/{uuid}/recipient | set-recipient-details | Fills in your details on an NDA you received |
POST /api/v1/ndas/{uuid}/sign | sign-nda | Signs on your side, once you said so |
POST /api/v1/ndas/{uuid}/resend | resend-nda | Emails the recipient their link again |
DELETE /api/v1/ndas/{uuid} | delete-nda | Deletes an NDA you sent, until either of you signs |
Signing over the API is the same act as on the page: consent must be true, document_sha256 must be the hash of the text the person read, and the signing record credits the token, as api_token or oauth_token.
The envelope
Every answer is one JSON object. sendnda is the version of this contract, then data on success or error on a failure:
{
"sendnda": 1,
"data": { "uuid": "…", "role": "sender", "status": "completed", "next_action": "completed", … }
}
data holds the fields the tools describe: on GET /api/v1/ndas a list of summaries, on the others one NDA.
Errors
{
"sendnda": 1,
"error": { "kind": "not_found", "message": "No NDA with this uuid exists on this account. …" }
}
kind is what to branch on; message says what happened in words.
| Kind | Status | Means |
|---|---|---|
usage | 400, 401, 403, 409, 422 | The request was wrong, the token can't do it, or the NDA is past the step it asks for. A 422 carries detail, the messages per field. |
not_found | 404 | No such route, or no NDA under that uuid you're a party to. Someone else's NDA answers the same as one that doesn't exist. |
throttled | 429 | A limit is spent. retry_after and the Retry-After header say how many seconds to wait. |
source | 500 and up | Send NDA couldn't answer. Ask again later. |