FREE PERSONAL AND BUSINESS AGREEMENT TOOLS
Your agreements. Your tools.
Use a private vault, imports, scoped REST API and MCP for free. There are no signer or envelope charges, and you do not need a CounselMeter organization subscription.
Personal storage includes 500 MiB total, with up to 25 MiB per original file. Originals and archived records count toward storage. Downloads remain available at the limit. Request, file-size and abuse controls still apply.
Give each tool the access it needs
Create a key in Manage keys. Choose agreements:read to list and read your retained copies, or add agreements:write to import, attach originals and archive. Revoke a key when it is no longer needed.
Keep private keys on your server or in your agent’s secret store. Send them in the Authorization header. Never put them in a URL, public page, iframe or browser script. Keys only access their owner’s records within their selected scopes; they do not grant another person’s vault or business signing authority.
curl 'https://ndaid.com/api/v1/agreements' \
-H "Authorization: Bearer $NDAID_TOKEN"Set NDAID_TOKEN privately in your server environment. These examples contain placeholders, not working credentials. Browser sessions use the separate CSRF-protected app routes.
List, read and keep a copy
| Route | Scope | What it does |
|---|---|---|
| GET /api/v1/agreements | agreements:read | List your copies and storage use. q, offset and archived are optional filters. |
| GET /api/v1/agreements/:id | agreements:read | Read one retained record, source evidence and original-file hashes. |
| POST /api/v1/agreements | agreements:write | Retain an explicitly authorized copy. This creates no signature. |
| POST /api/v1/agreements/:id/files | agreements:write | Attach one original using multipart file and a fresh requestId UUID. |
| POST /api/v1/agreements/:id/archive | agreements:write | Set archived to true or false. Archived records still use storage. |
For an import, generate fresh requestId and globalAgreementId UUIDs. Include title, originDomain, originRecordId, privateEvidence and acknowledgeProvenance. Only acknowledge provenance after the owner chooses to retain the copy and checks its source. Reusing requestId with identical content is idempotent; changing its content is refused.
curl -X POST 'https://ndaid.com/api/v1/agreements' \
-H "Authorization: Bearer $NDAID_TOKEN" \
-H 'Content-Type: application/json' \
--data '{
"requestId": "REPLACE_WITH_FRESH_UUID",
"globalAgreementId": "REPLACE_WITH_FRESH_UUID",
"title": "Lease copy",
"collection": "Business agreements",
"originDomain": "source.example",
"originRecordId": "source-record-id",
"privateEvidence": {"sourceNote": "Replace with the actual source evidence"},
"acknowledgeProvenance": true
}'Replace every placeholder and obtain permission before running a write. Evidence JSON is limited to 2 MiB. Attach the original separately using multipart form fields file and requestId; each original may be up to 25 MiB. An import retains a copy and supplied evidence. It does not verify signatures, legal completion or enforceability, or give access to the source vault.
Connect your agent with MCP
The stateless Streamable HTTP endpoint is /api/mcp. Use the same private Bearer key and scopes as REST. Send Accept for both application/json and text/event-stream. Start with initialize, then tools/list and tools/call.
curl -X POST 'https://ndaid.com/api/mcp' \
-H "Authorization: Bearer $NDAID_TOKEN" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25"}}'Later requests may use MCP-Protocol-Version: 2025-11-25. The server also supports 2025-06-18. Available tools are agreements_list and agreements_get with read scope, and agreements_import with write scope. tools/list shows only the tools your key can use. A successful JSON-RPC transport can still return a tool error; check isError and the returned content before treating a write as complete.
MCP imports do not copy files automatically. Attach originals with REST. A tool request does not sign an agreement or authorize an agent to act for a business.
Show a record status with care
POST /api/v1/nda-status requires nda:read and checks only NDA records the key owner is a party to. It is not a public search across other people’s agreements. Send party1 and party2 email addresses in a server-side JSON request with the private Bearer header.
For a public badge, create a key with only nda:read. Its separate publicToken may be put in the widget URL below. That token intentionally exposes the permitted record status to viewers; it never opens the private agreement vault. Do not substitute a private key.
<iframe
src="https://ndaid.com/api/v1/widget?token=PUBLIC_BADGE_TOKEN&party1=alice%40example.com&party2=bob%40example.com"
title="NDA record status"
style="border:0;width:220px;height:50px"
></iframe>A status badge reports a stored NDA record. It does not prove every future conversation is covered or that an agreement is enforceable in every jurisdiction.
Clear limits. No per-signature tariff.
The free vault and API have storage, upload, per-key request and abuse limits. API requests, including MCP forwarding, consume the key’s configured hourly allowance. A 429 means the request allowance has been reached; it is not a signer or envelope charge.
Missing or expired credentials return 401; missing scope or permission returns 403. Invalid inputs return 400. Conflicting idempotency/content can return 409, and storage or file-size limits can return 413. Check the response before retrying a write. Keep the same requestId when retrying the same import.
You can use NDAID on its own. Optional CounselMeter services have their own pricing. Shared AccordID sign-in keeps app permissions separate and does not sign a contract, verify a legal identity or make someone a business representative.