Reference

Endpoint map for the journey docs.

Primary Vera API paths grouped by capability. Use this page after you know the journey stage and need the exact request shape, response shape, or example call.

Workspace and projects

GET/v1/workspace

Read the active workspace snapshot for agent planning.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/workspace" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/workspace", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "projects": [
    {
      "id": "proj_01hx6x9v2r",
      "name": "First outbound campaign",
      "business_name": "Vera.AI",
      "website": "https://vera.symph.ai",
      "agent_mode": "needs_approval"
    }
  ],
  "activeProject": {
    "id": "proj_01hx6x9v2r",
    "name": "First outbound campaign"
  },
  "nextActions": []
}
GET/v1/projects

List projects for the authenticated workspace.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

[
  {
    "id": "proj_01hx6x9v2r",
    "name": "First outbound campaign",
    "business_name": "Vera.AI",
    "website": "https://vera.symph.ai",
    "agent_mode": "needs_approval",
    "created_at": "2026-05-19T07:30:00Z"
  }
]
POST/v1/projects

Create a project.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects" \
  -H "Authorization: Bearer vwk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "name": "First outbound campaign",
  "business_name": "Vera.AI",
  "website": "https://vera.symph.ai"
}'

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "name": "First outbound campaign",
    "business_name": "Vera.AI",
    "website": "https://vera.symph.ai"
  })
});

const data = await response.json();

response

{
  "id": "proj_01hx6x9v2r",
  "name": "First outbound campaign",
  "business_name": "Vera.AI",
  "website": "https://vera.symph.ai",
  "agent_mode": "needs_approval"
}
PATCH/v1/projects/{project_id}/policy

Set needs_approval or autonomous mode.

Examples

curl

curl -X PATCH "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/policy" \
  -H "Authorization: Bearer vwk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_mode": "autonomous"
}'

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/policy", {
  method: "PATCH",
  headers: {
    Authorization: "Bearer vwk_live_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "agent_mode": "autonomous"
  })
});

const data = await response.json();

response

{
  "id": "proj_01hx6x9v2r",
  "name": "First outbound campaign",
  "agent_mode": "autonomous"
}
GET/v1/projects/{project_id}/readiness

Check whether Vera has the inputs needed to operate.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/readiness" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/readiness", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "ready": true,
  "blockers": [],
  "warnings": [
    "Approve at least one recent prospect research record before draft generation."
  ]
}

API keys

GET/v1/api-keys

List API keys for the authenticated user.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/api-keys" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/api-keys", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

[
  {
    "id": "key_01hx7g2n8w",
    "name": "AI agent",
    "key_prefix": "vwk",
    "key_last4": "9k2p",
    "scopes": [
      "api"
    ],
    "created_at": "2026-05-19T08:00:00Z",
    "revoked_at": null
  }
]
POST/v1/api-keys

Create an API key. The secret is returned once.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/api-keys" \
  -H "Authorization: Bearer vwk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "name": "AI agent",
  "scopes": [
    "api"
  ]
}'

fetch

const response = await fetch("https://api-vera.symph.ai/v1/api-keys", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "name": "AI agent",
    "scopes": [
      "api"
    ]
  })
});

const data = await response.json();

response

{
  "api_key": {
    "id": "key_01hx7g2n8w",
    "name": "AI agent",
    "key_prefix": "vwk",
    "key_last4": "9k2p",
    "scopes": [
      "api"
    ]
  },
  "secret": "vwk_live_..."
}
POST/v1/api-keys/{api_key_id}:revoke

Disable an API key without removing its audit row.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/api-keys/key_01hx7g2n8w:revoke" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/api-keys/key_01hx7g2n8w:revoke", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "ok": true,
  "message": "API key revoked."
}
DELETE/v1/api-keys/{api_key_id}

Delete an API key record from settings.

Examples

curl

curl -X DELETE "https://api-vera.symph.ai/v1/api-keys/key_01hx7g2n8w" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/api-keys/key_01hx7g2n8w", {
  method: "DELETE",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "ok": true,
  "message": "API key deleted."
}

Knowledge

POST/v1/projects/{project_id}/context

Add notes, URLs, and files.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/context" \
  -H "Authorization: Bearer vwk_live_..." \
  -F "notes=Vera.AI turns context into outbound motion." \
  -F "urls=https://vera.symph.ai" \
  -F "files=@./product-notes.pdf"

fetch

const form = new FormData();
form.append("notes", "Vera.AI turns context into outbound motion.");
form.append("urls", "https://vera.symph.ai");
form.append("files", fileInput.files[0]);

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/context", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_..."
  },
  body: form
});

const data = await response.json();

response

{
  "ok": true,
  "message": "Context ingested.",
  "sources_created": 3,
  "claims_created": 5
}
GET/v1/projects/{project_id}/knowledge

Read claims, coverage, sources, and evidence.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/knowledge" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/knowledge", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "project_id": "proj_01hx6x9v2r",
  "coverage": {
    "offer": "present",
    "icp": "partial",
    "proof": "missing"
  },
  "claims": [
    {
      "id": "claim_01hx81mk2q",
      "text": "Vera.AI turns business context into grounded outbound workflows.",
      "status": "approved",
      "source_type": "uploaded_context",
      "trust_level": "user_confirmed"
    }
  ],
  "sources": [],
  "evidence": []
}
POST/v1/projects/{project_id}/knowledge-claims

Create a manual claim.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/knowledge-claims" \
  -H "Authorization: Bearer vwk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "text": "Vera.AI supports autonomous no-reply follow-up scheduling.",
  "source_type": "manual",
  "status": "approved"
}'

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/knowledge-claims", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "text": "Vera.AI supports autonomous no-reply follow-up scheduling.",
    "source_type": "manual",
    "status": "approved"
  })
});

const data = await response.json();

response

{
  "id": "claim_01hx81mk2q",
  "text": "Vera.AI supports autonomous no-reply follow-up scheduling.",
  "status": "approved"
}
PATCH/v1/knowledge-claims/{claim_id}

Edit claim text, trust, evidence, or status.

Examples

curl

curl -X PATCH "https://api-vera.symph.ai/v1/knowledge-claims/claim_01hx81mk2q" \
  -H "Authorization: Bearer vwk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "status": "approved",
  "trust_level": "high"
}'

fetch

const response = await fetch("https://api-vera.symph.ai/v1/knowledge-claims/claim_01hx81mk2q", {
  method: "PATCH",
  headers: {
    Authorization: "Bearer vwk_live_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "status": "approved",
    "trust_level": "high"
  })
});

const data = await response.json();

response

{
  "id": "claim_01hx81mk2q",
  "text": "Vera.AI supports autonomous no-reply follow-up scheduling.",
  "trust_level": "high",
  "status": "approved"
}
DELETE/v1/knowledge-claims/{claim_id}

Remove a claim that the agent should not reuse.

Examples

curl

curl -X DELETE "https://api-vera.symph.ai/v1/knowledge-claims/claim_01hx81mk2q" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/knowledge-claims/claim_01hx81mk2q", {
  method: "DELETE",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "ok": true,
  "message": "Knowledge claim deleted."
}

Runs and review

POST/v1/projects/{project_id}/runs

Queue one public journey operation.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/runs" \
  -H "Authorization: Bearer vwk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "operation": "search_prospects",
  "inputs": {
    "limit": 10,
    "refresh": false
  }
}'

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/runs", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "operation": "search_prospects",
    "inputs": {
      "limit": 10,
      "refresh": false
    }
  })
});

const data = await response.json();

response

{
  "id": "run_01hx86cmfe",
  "operation": "search_prospects",
  "status": "queued",
  "project_id": "proj_01hx6x9v2r"
}
GET/v1/runs/{run_id}

Read one run status and result.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/runs/run_01hx86cmfe" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/runs/run_01hx86cmfe", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "id": "run_01hx86cmfe",
  "operation": "search_prospects",
  "status": "succeeded",
  "result": {
    "prospects_created": 4
  }
}
GET/v1/projects/{project_id}/runs

List task runs for the project.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/runs" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/runs", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

[
  {
    "id": "run_01hx86cmfe",
    "operation": "search_prospects",
    "status": "succeeded",
    "created_at": "2026-05-19T08:10:00Z"
  }
]
GET/v1/projects/{project_id}/next-actions

List open agent or human actions.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/next-actions" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/next-actions", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

[
  {
    "id": "act_01hx8jr3n5",
    "action_type": "review_drafts",
    "title": "Review generated drafts",
    "status": "open",
    "priority": "high"
  }
]
POST/v1/projects/{project_id}/review-decisions

Approve, skip, retry, or request changes for review items.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/review-decisions" \
  -H "Authorization: Bearer vwk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "target_type": "draft",
  "target_id": "draft_01hx8cb9ja",
  "decision": "approve",
  "note": "Looks good."
}'

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/review-decisions", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "target_type": "draft",
    "target_id": "draft_01hx8cb9ja",
    "decision": "approve",
    "note": "Looks good."
  })
});

const data = await response.json();

response

{
  "target_type": "draft",
  "target_id": "draft_01hx8cb9ja",
  "review_status": "approved",
  "message": "Draft approved. It is ready for an explicit send action.",
  "next_action": {
    "action_type": "send_first_draft",
    "status": "open"
  }
}
POST/v1/projects/{project_id}/agent:continue

Advance the next safe autonomous or preparation step.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/agent:continue" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/agent:continue", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "ok": true,
  "queued_count": 1,
  "message": "Queued 1 preparation task.",
  "runs": [
    {
      "id": "run_01hx8a2r9f",
      "operation": "generate_drafts",
      "status": "queued"
    }
  ],
  "blockers": []
}

Prospects and strategy

GET/v1/projects/{project_id}/prospects

List prospects.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/prospects" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/prospects", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

[
  {
    "id": "prospect_01hx88t4qw",
    "company_name": "Founder-led sales team",
    "domain": "example.com",
    "fit_score": 84,
    "status": "needs_review"
  }
]
POST/v1/projects/{project_id}/prospects

Create a prospect manually.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/prospects" \
  -H "Authorization: Bearer vwk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "company_name": "Founder-led sales team",
  "domain": "example.com",
  "contact_email": "[email protected]",
  "status": "needs_review"
}'

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/prospects", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "company_name": "Founder-led sales team",
    "domain": "example.com",
    "contact_email": "[email protected]",
    "status": "needs_review"
  })
});

const data = await response.json();

response

{
  "id": "prospect_01hx88t4qw",
  "company_name": "Founder-led sales team",
  "domain": "example.com",
  "contact_email": "[email protected]",
  "status": "needs_review"
}
PATCH/v1/prospects/{prospect_id}

Update prospect status, domain, contact email, or latest signal.

Examples

curl

curl -X PATCH "https://api-vera.symph.ai/v1/prospects/prospect_01hx88t4qw" \
  -H "Authorization: Bearer vwk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "contact_email": "[email protected]",
  "status": "cold"
}'

fetch

const response = await fetch("https://api-vera.symph.ai/v1/prospects/prospect_01hx88t4qw", {
  method: "PATCH",
  headers: {
    Authorization: "Bearer vwk_live_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "contact_email": "[email protected]",
    "status": "cold"
  })
});

const data = await response.json();

response

{
  "id": "prospect_01hx88t4qw",
  "contact_email": "[email protected]",
  "status": "cold"
}
GET/v1/projects/{project_id}/prospect-research

List research records created for prospects.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/prospect-research" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/prospect-research", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

[
  {
    "id": "research_01hx8ax7ck",
    "prospect_id": "prospect_01hx88t4qw",
    "review_status": "needs_review",
    "fit_score": 82,
    "caveats": [
      "Confirm contact role before sending."
    ]
  }
]
GET/v1/projects/{project_id}/strategies

List reviewable outreach strategies.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/strategies" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/strategies", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

[
  {
    "id": "strategy_01hx8b02a1",
    "prospect_id": "prospect_01hx88t4qw",
    "review_status": "needs_review",
    "angle": "Operational research relief for a lean sales team",
    "risk_level": "low"
  }
]

Drafts and sends

GET/v1/projects/{project_id}/drafts

List first-touch, reply, and follow-up drafts.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/drafts" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/drafts", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

[
  {
    "id": "draft_01hx8cb9ja",
    "prospect_id": "prospect_01hx88t4qw",
    "subject": "Outbound workflow for your team",
    "review_status": "needs_review",
    "lifecycle_status": "drafted_not_sendable"
  }
]
PATCH/v1/projects/{project_id}/drafts/{draft_id}

Update subject and rich body HTML before review.

Examples

curl

curl -X PATCH "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/drafts/draft_01hx8cb9ja" \
  -H "Authorization: Bearer vwk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "subject": "Outbound workflow for your team",
  "body_html": "<p>Hi team,</p><p>I noticed your outbound process depends on manual research.</p>"
}'

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/drafts/draft_01hx8cb9ja", {
  method: "PATCH",
  headers: {
    Authorization: "Bearer vwk_live_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "subject": "Outbound workflow for your team",
    "body_html": "<p>Hi team,</p><p>I noticed your outbound process depends on manual research.</p>"
  })
});

const data = await response.json();

response

{
  "id": "draft_01hx8cb9ja",
  "subject": "Outbound workflow for your team",
  "review_status": "needs_review",
  "lifecycle_status": "drafted_not_sendable",
  "body_html": "<p>Hi team,</p><p>I noticed your outbound process depends on manual research.</p>"
}
POST/v1/projects/{project_id}/drafts/{draft_id}:send

Send an approved draft through the selected Gmail sender.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/drafts/draft_01hx8cb9ja:send" \
  -H "Authorization: Bearer vwk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "confirm_reviewed": true,
  "dry_run": false
}'

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/drafts/draft_01hx8cb9ja:send", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "confirm_reviewed": true,
    "dry_run": false
  })
});

const data = await response.json();

response

{
  "ok": true,
  "dry_run": false,
  "draft": {
    "id": "draft_01hx8cb9ja",
    "lifecycle_status": "sent"
  },
  "to_email": "[email protected]",
  "from_email": "[email protected]",
  "gmail_message_id": "18f8f23a9c4d2f11",
  "gmail_thread_id": "18f8f23a9c4d2f11"
}

Replies, inbound, and follow-ups

POST/v1/projects/{project_id}/inbox:sync

Sync Gmail replies and update reply metadata.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/inbox:sync" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/inbox:sync", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "ok": true,
  "provider": "gmail",
  "synced_threads": 3,
  "synced_messages": 3,
  "new_replies": 1,
  "review_actions": 1,
  "reply_draft_runs": 1,
  "paused_follow_ups": 1,
  "skipped_messages": 0
}
GET/v1/projects/{project_id}/email-messages

List synced email messages.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/email-messages" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/email-messages", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

[
  {
    "id": "msg_01hx8f5x2q",
    "prospect_id": "prospect_01hx88t4qw",
    "direction": "inbound",
    "analysis": {
      "intent": "positive",
      "asks_for_pricing": true
    }
  }
]
POST/v1/projects/{project_id}/email-messages/{message_id}:takeover

Pause automation for a reply that a human will handle.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/email-messages/msg_01hx8f5x2q:takeover" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/email-messages/msg_01hx8f5x2q:takeover", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "ok": true,
  "message": "Human takeover recorded.",
  "skipped_reply_drafts": 1,
  "paused_follow_ups": 1
}
GET/v1/projects/{project_id}/inbound-candidates

List classified inbound messages that may become prospects.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/inbound-candidates" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/inbound-candidates", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

[
  {
    "id": "candidate_01hx8n9jfc",
    "status": "needs_review",
    "message_type": "buyer_interest",
    "recommended_action": "accept"
  }
]
POST/v1/projects/{project_id}/inbound-candidates:sync

Classify recent inbound messages as potential prospects.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/inbound-candidates:sync" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/inbound-candidates:sync", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "ok": true,
  "provider": "gmail",
  "scanned_messages": 25,
  "created_candidates": 2,
  "updated_candidates": 1,
  "ignored_candidates": 22,
  "skipped_messages": 0
}
POST/v1/projects/{project_id}/inbound-candidates/{candidate_id}:accept

Convert an inbound candidate into a prospect and reply draft.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/inbound-candidates/candidate_01hx8n9jfc:accept" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/inbound-candidates/candidate_01hx8n9jfc:accept", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "ok": true,
  "message": "Inbound candidate accepted. A prospect was linked and a reply draft was queued for review.",
  "reply_draft_run": {
    "operation": "generate_reply_draft",
    "status": "queued"
  }
}
GET/v1/projects/{project_id}/follow-up-schedules

List scheduled no-reply follow-ups.

Examples

curl

curl -X GET "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/follow-up-schedules" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/follow-up-schedules", {
  method: "GET",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

[
  {
    "id": "fus_01hx8hbk3n",
    "prospect_id": "prospect_01hx88t4qw",
    "status": "scheduled",
    "due_at": "2026-05-22T09:00:00Z"
  }
]
POST/v1/projects/{project_id}/follow-ups:tick

Process due follow-up work.

Examples

curl

curl -X POST "https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/follow-ups:tick" \
  -H "Authorization: Bearer vwk_live_..."

fetch

const response = await fetch("https://api-vera.symph.ai/v1/projects/proj_01hx6x9v2r/follow-ups:tick", {
  method: "POST",
  headers: {
    Authorization: "Bearer vwk_live_..."
  }
});

const data = await response.json();

response

{
  "ok": true,
  "queued_count": 1,
  "message": "Queued 1 follow-up draft run.",
  "runs": [
    {
      "id": "run_01hx8jpr7v",
      "operation": "generate_follow_up_draft",
      "status": "queued"
    }
  ]
}