Integrations · For AI agents

Drop Verdacert into any AI agent in 5 minutes

A certified-translation tool, callable from any agent runtime. MCP for Claude Desktop / Cursor, REST for everything else, and a typed Vercel AI SDK tool you can drop straight into your codebase. Auth is a single bearer token; sandbox tokens are free and exercise the full state machine in under two minutes.

Looking for the full developer docs? Head to verdacert.com/docs — per-endpoint reference, every error code, webhook signature recipes in TS / Python / Go, and offline JWS verification walkthroughs.

1. Get a sandbox token (60 seconds, no waitlist)

Self-serve at verdacert.com/onboarding. Sign in with your email, name your firm, mint a sandbox key — done. Live keys unlock the moment you add a default payment method; no human-approval gate.

Start integrating →
# Tokens look like:
vc_sandbox_p7q8r…           # free, synthetic flow
vc_live_abc123…             # real orders, real money

2. Pick your integration shape

MCP (Claude, Cursor)Vercel AI SDKOpenAI toolsPlain REST

MCP — Claude Desktop, Cursor, agentic frameworks

Verdacert ships a streamable-HTTP MCP server with seven tools: get_capabilities, quote, submit, get_status, get_result, refund, verify_certificate. Point any MCP client at https://verdacert.com/api/mcp with your bearer token.

Claude Desktop config

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (or the equivalent on your OS):

{
  "mcpServers": {
    "verdacert": {
      "url": "https://verdacert.com/api/mcp",
      "headers": {
        "Authorization": "Bearer vc_sandbox_…"
      }
    }
  }
}

Cursor MCP config

Settings → MCP → Add new MCP server. Same JSON as above.

Programmatic JSON-RPC (any HTTP client)

curl https://verdacert.com/api/mcp \
  -H 'Authorization: Bearer vc_sandbox_…' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Vercel AI SDK

One import gives you all seven tools, typed and ready to drop into your generateText / streamText / agent call. Published as @verdacert/ai-sdk-tools.

Install

pnpm add @verdacert/ai-sdk-tools ai zod
# or: npm i @verdacert/ai-sdk-tools ai zod

Use (with Vercel AI Gateway — recommended)

import { generateText, isStepCount } from "ai";
import { createVerdacertTools } from "@verdacert/ai-sdk-tools";

const tools = createVerdacertTools({
  apiKey: process.env.VERDACERT_API_KEY!,
});

const { text } = await generateText({
  // Provider-string model. Routes through AI Gateway automatically
  // when AI_GATEWAY_API_KEY is set (auto-injected on Vercel).
  model: "anthropic/claude-sonnet-4",
  tools,
  stopWhen: isStepCount(20), // multi-step agent loop
  prompt:
    "Quote a 3-page Farsi birth certificate for USCIS. Show me the price.",
});

Tools exported: getCapabilities, quote, submit, getStatus, getResult, refund, verifyCertificate. Each is a plain AI SDK Tool — destructure if you only want a subset. Errors throw VerdacertHttpError with the structured error envelope and request id from the server.

Why AI Gateway? Same pricing as the underlying provider, multi-provider failover, observability, and the same model id works across hosts. On Vercel deployments, AI_GATEWAY_API_KEY is auto-injected. If you'd rather call the provider directly, swap model: "anthropic/claude-sonnet-4" for model: anthropic("claude-sonnet-4-20250514") from @ai-sdk/anthropic.

Prefer not to add a dependency? The package is a thin wrapper around the REST API; see the REST section above to call it directly. The MCP server at https://verdacert.com/api/mcp is also an option for tool-using clients that speak MCP.

OpenAI tool use

Same shape as the AI SDK — define the tool with a JSON schema and execute via REST. Sketch:

const tools = [
  {
    type: "function",
    function: {
      name: "verdacert_quote",
      description: "Quote a Verdacert certified translation.",
      parameters: {
        type: "object",
        properties: {
          sourceLanguage: { type: "string" },
          useCase: { type: "string" },
          pageCount: { type: "integer", minimum: 1 },
          speedTier: { type: "string", enum: ["standard","express","rush"] }
        },
        required: ["sourceLanguage","useCase","pageCount","speedTier"]
      }
    }
  }
];

// Inside your tool_call handler:
async function verdacert_quote(args) {
  const res = await fetch("https://verdacert.com/api/v1/quote", {
    method: "POST",
    headers: {
      "content-type": "application/json",
      Authorization: `Bearer ${process.env.VERDACERT_API_KEY}`
    },
    body: JSON.stringify(args)
  });
  return res.json();
}

Plain REST

Every endpoint at-a-glance:

MethodPathPurpose
GET/api/v1/capabilitiesLive enums (languages, doc types, tiers, add-ons).
POST/api/v1/quotePrice + ETA. Returns quoteId.
POST/api/v1/submitCreate a job. Returns jobId.
GET/api/v1/status/{jobId}Poll job state + progress.
GET/api/v1/result/{jobId}Artifacts + JWS once ready.
GET/api/v1/verify/{certId}Public — no auth. Returns JWS + decoded payload.
GET/.well-known/jwks.jsonPublic — JWKS for Ed25519 signature verification.
POST/api/mcpMCP streamable-HTTP endpoint.
GET/api/v1/openapi.yamlOpenAPI 3.1 spec — feed to Stainless / Speakeasy / Postman.

See it working — reference agent

A complete working AI agent that prepares Verdacert translations for an immigration case file lives at examples/immigration-paralegal in the open-source repo. Two integration paths:

  • No code: drop the included claude-desktop-config.json into Claude Desktop, paste a case description, and watch Claude call our six MCP tools in sequence.
  • Programmatic:~300 lines of TypeScript using the Anthropic SDK + tool-calling. Fork it, swap the case-intake source for your own product's data model, and ship.
# Programmatic path:
git clone https://github.com/mitrakmt/verdacert.git
cd verdacert/examples/immigration-paralegal
pnpm install
cp .env.example .env   # add VERDACERT_API_KEY + ANTHROPIC_API_KEY
pnpm start             # uses the sample I-130 case
# … or supply your own case file:
pnpm start path/to/case.md

3. Verify a certificate

Every result carries a JWS receipt signed with Ed25519. Fetch the public key once, cache for an hour, verify the JWS locally — no need to call us:

# JWKS (public keys)
curl https://verdacert.com/.well-known/jwks.json

# Single-cert JSON (also includes the JWS)
curl https://verdacert.com/api/v1/verify/<certificateId>

# Human-readable verification page (also linked from every PDF QR)
https://verdacert.com/verify/<certificateId>

4. Webhooks (optional)

Skip polling. Provide a webhook URL when minting your key (or per-call via submit({ webhookUrl })) and Verdacert will POST state-change events. Payloads are HMAC-signed Stripe-style:

POST <your webhook URL>
content-type:           application/json
x-verdacert-event:      order.ready
x-verdacert-event-id:   evt_…
x-verdacert-signature:  t=<unix>,v1=<hex_hmac_sha256>

{
  "id": "evt_…",
  "type": "order.ready",
  "createdAt": "2026-05-22T18:00:00.000Z",
  "data": {
    "jobId": "…",
    "orderNumber": "VC-2026-…",
    "status": "ready",
    "apiKeyId": "…",
    "externalEndUserId": "your-user-id",
    "promisedDeliveryAt": "2026-05-23T18:00:00.000Z"
  }
}

Verify v1 by recomputing HMAC-SHA256(t + "." + body, webhookSecret) in constant time. Reject events older than ~5 minutes.

5. Get a sandbox key + smoke test

Email hello@verdacert.com for a sandbox token. Quickest validation:

# 1. Capabilities
curl -H "Authorization: Bearer vc_sandbox_…" \
  https://verdacert.com/api/v1/capabilities

# 2. Quote
curl -X POST https://verdacert.com/api/v1/quote \
  -H "Authorization: Bearer vc_sandbox_…" \
  -H "Content-Type: application/json" \
  -d '{
    "sourceLanguage":"fa","useCase":"uscis",
    "pageCount":2,"speedTier":"standard"
  }'

# 3. Submit (echo the quote input back)
# 4. Poll /api/v1/status/<jobId> until status === "ready"
# 5. Fetch /api/v1/result/<jobId>

The full sandbox lifecycle (paid → processing → in_review → ready) completes in ~2 minutes; Review-and-Certify in ~90 seconds.

Questions, partnerships, rev-share

hello@verdacert.com· ship a working integration and we'll backfill a co-marketed launch.

Or place a one-off order →
Get instant quotePricing