Skip to main content

Documentation Index

Fetch the complete documentation index at: https://usenaive.ai/docs/llms.txt

Use this file to discover all available pages before exploring further.

Email is one of the most fundamental primitives in Naive API v2. Every company gets a system domain auto-provisioned on registration, and agents can create inboxes, send mail, and read replies — all scoped to the authenticated identity. This guide covers the full email lifecycle: domain setup, inbox provisioning, sending, and reading.

CLI First

# Create inbox and send email
naive email create --local-part hello
naive email inboxes
naive email send --from-inbox <inbox-id> --to user@example.com --subject "Hi" --body "Hello"

Tools

ToolTypeDescription
create_inboxCoreCreate a new email inbox on the company’s domain
delete_inboxCoreDeactivate an email inbox
list_inboxesCoreList all available inboxes for the company
send_emailCoreSend an email from a specific inbox
list_inbox_emailsCoreList received emails for an inbox
get_emailCoreRead the full body of a specific email

Domain Prerequisites

Before sending email, your company needs an active (verified) domain. System domains are auto-provisioned on registration but may start as pending_dns until the email provider verifies DNS.
curl https://api.usenaive.ai/v1/domains \
  -H "Authorization: Bearer nv_sk_your_key"
If your domain shows pending_dns, trigger verification:
curl -X POST https://api.usenaive.ai/v1/domains/{domain_id}/verify \
  -H "Authorization: Bearer nv_sk_your_key"
See Domain Management for the full BYOD workflow.

Creating Inboxes

Create email addresses on your company’s active domain. Each inbox gets a dedicated identity.
curl -X POST https://api.usenaive.ai/v1/email/inboxes \
  -H "Authorization: Bearer nv_sk_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "local_part": "support" }'
Response:
{
  "id": "inbox-uuid",
  "address": "support@acme-corp.usenaive.ai",
  "local_part": "support",
  "domain": "acme-corp.usenaive.ai",
  "status": "active"
}

Parameters

ParamTypeRequiredDefaultDescription
local_partstringYesThe part before @ (min 2 chars, alphanumeric + dots/hyphens)
domain_idstringNoAutoSpecific domain UUID (defaults to company’s first active domain)
You can create multiple inboxes on the same domain — support@, sales@, notifications@, etc.

Sending Email

The send_email tool requires the inbox UUID you’re sending from. This enforces identity — agents can only send from addresses they own.
curl -X POST https://api.usenaive.ai/v1/email/send \
  -H "Authorization: Bearer nv_sk_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "from_inbox": "inbox-uuid",
    "to": "prospect@company.com",
    "subject": "Research findings",
    "body": "Hi Sarah,\n\nHere are the results from our analysis..."
  }'
Response:
{
  "id": "msg-uuid-123",
  "status": "sent",
  "credits_used": 1,
  "credits_remaining": 99
}

Parameters

ParamTypeRequiredDefaultDescription
from_inboxstringYesInbox UUID to send from
tostringYesRecipient email address
subjectstringYesEmail subject line
bodystringYesEmail body (plain text or HTML)
reply_tostringNoReply-to address override
Cost: 1 credit per email (deducted immediately on success)

Reading the Inbox

List received emails

curl "https://api.usenaive.ai/v1/email/inbox?from_inbox=inbox-uuid&limit=20" \
  -H "Authorization: Bearer nv_sk_your_key"
Response:
{
  "emails": [
    {
      "id": "em-uuid-1",
      "from": "sarah@company.com",
      "subject": "Re: Research findings",
      "received_at": "2026-04-27T10:30:00Z",
      "snippet": "Thanks for the update, this looks great..."
    }
  ]
}

Read a specific email

curl https://api.usenaive.ai/v1/email/em-uuid-1 \
  -H "Authorization: Bearer nv_sk_your_key"

Error Handling

ErrorCauseRecovery
invalid_inboxInbox UUID not found or not owned by this agentUse GET /v1/email/inboxes to see available inboxes
no_active_domainCompany has no verified domainCheck GET /v1/domains and verify with POST /v1/domains/:id/verify
domain_not_verifiedSending from an unverified domainRun naive domains verify <id> or POST /v1/domains/:id/verify
insufficient_creditsNot enough credits to sendCheck balance with GET /v1/status
duplicate_recordEmail address already exists (active)Use a different local_part

Typical Workflow

Agent receives task: "Set up email and reach out to leads"

    ├─ GET /v1/domains                         → Check domain status
    │   → status: active ✓

    ├─ POST /v1/email/inboxes                  → Create outreach inbox
    │   { local_part: "outreach" }
    │   → address: outreach@acme.usenaive.ai

    ├─ POST /v1/email/send                     → Send personalized email
    │   { from_inbox: "inbox-uuid",
    │     to: "lead@company.com",
    │     subject: "Quick question",
    │     body: "Hi Alex, ..." }
    │   → sent: true

    ├─ GET /v1/email/inbox?from_inbox=...      → Check for replies
    │   → 1 new email

    └─ GET /v1/email/em-uuid-1                 → Read the reply
        → "Thanks for reaching out! Let's schedule a call."