# Outvoy > Sales infrastructure for agents, starting with LinkedIn (data enrichment and email sending are next). Today: connect LinkedIn accounts (or simulated sandbox senders), build audiences from LinkedIn searches, Sales Navigator URLs, profile URLs/CSV or post engagers, launch multi-step campaigns (visit profile, like latest post, invite with note, messages) with a preview of every rendered message, and handle replies through a unified inbox, an events feed, signed webhooks and an MCP server. - API base URL: https://api.getoutvoy.com/v1 (auth: `Authorization: Bearer ov_...`; responses are `{ data, meta? }`, errors `{ errorCode, message, details? }`; invalid input is 422 with `details.issues[] { path, message, code }`, and unknown fields in any body, query or MCP argument are refused) - MCP server: https://api.getoutvoy.com/mcp (streamable HTTP, stateless, POST only, API keys only, 60 tools) - OpenAPI 3.1 document (request bodies, operationIds, error responses, event payloads under `webhooks`): https://api.getoutvoy.com/v1/openapi.json (offline copy: https://getoutvoy.com/openapi.json) - Interactive API reference: https://api.getoutvoy.com/docs - Support: live chat on getoutvoy.com and in the console, or support@getoutvoy.com; first response within one business day, resolution within 14 days at most (https://getoutvoy.com/support) Key rules an agent should know: preview (`POST /v1/campaigns/{campaignId}/preview`, MCP `preview_campaign`) renders every message and sends nothing; a campaign has at most one invite step and a message needs an invite before it (unless `settings.audience` is `connected_only`); invitation notes are capped at 300 rendered characters and messages at 8,000; a missing template variable without a fallback skips that lead; a reply stops the lead's sequence; unaccepted invitations are withdrawn after `settings.acceptanceWindowDays` (default 14); `settings.secondChance` `{ extraSenders, after }` lets other pool senders invite someone who hasn't accepted (each within its own limits, only inside the window; the accepted sender takes over and the other invitations are withdrawn), `settings.ifAlreadyConnected` is `continue` (default) or `skip_lead`, and `settings.senderAssignment: "one_per_company"` keeps each company with one sender; the inbox only stores conversations with leads; LinkedIn senders default to 20 invitations/day and 100 per 7 days with a 14-day warm-up from 30%; API keys can't create API keys (console session only), nor export the whole workspace or delete it — read each resource through its endpoint instead; an `Idempotency-Key` reused with a different body is refused (422 `IDEMPOTENCY_KEY_REUSED_ERROR`); sandbox senders simulate LinkedIn on a fast clock (a day per minute) and are the safe place to rehearse. There is no free plan: a new workspace has plan `none` (reads, API keys and lists work; senders, sandbox senders, imports and launches answer 402 `PLAN_REQUIRED_ERROR`) until its owner starts the 7-day free trial in the console (Settings → Billing, card required) or redeems an AppSumo licence; no API key or MCP tool can start it. An AppSumo licence includes 1 LinkedIn sender; more are a monthly add-on ($19/month each) that only the owner can buy in the console (Settings → Billing → Extra LinkedIn accounts, `POST /v1/billing/extra-senders` with a session); `GET /v1/billing` shows it under `extraSenders`. ## Endpoints (all under https://api.getoutvoy.com) - Account: POST /auth/sign-up, POST /auth/sign-in, GET /v1/me, PATCH /v1/workspace, GET|POST /v1/api-keys and DELETE /v1/api-keys/{apiKeyId} (session only), GET /v1/licenses, POST /v1/licenses/redeem (session only), GET /v1/support/identity (session only: the support chat's signed identity) - Billing: GET /v1/billing, POST /v1/billing/checkout and POST /v1/billing/portal (session only: a person with a card starts the trial) - Your data (session only, workspace owners): POST /v1/exports (a ZIP of the whole workspace: JSON per record type, CSV of leads and lists, README.json), GET /v1/exports, GET /v1/exports/{exportId} (a signed `downloadUrl`, 15 minutes; archives kept 7 days), GET /exports/{exportId}/download (the signed link), DELETE /v1/workspace with `{ confirmName }` (deletes the workspace and the owner's account; LinkedIn accounts disconnected, subscription set to end, licence released) - Senders: GET /v1/senders, POST /v1/senders/connect-link, POST /v1/senders/sandbox, GET|PATCH|DELETE /v1/senders/{senderId} (DELETE disconnects; a LinkedIn sender's session is removed from our provider), POST /v1/senders/{senderId}/pause, POST /v1/senders/{senderId}/resume - Search: POST /v1/search/people, GET /v1/search/parameters?senderId=&type=&q= - Lists and leads: GET|POST /v1/lists, GET|PATCH|DELETE /v1/lists/{listId}, GET|POST|DELETE /v1/lists/{listId}/leads, GET /v1/lists/{listId}/export (CSV), GET|POST /v1/lists/{listId}/imports, GET /v1/imports/{importId}, GET /v1/leads, GET|PATCH|DELETE /v1/leads/{leadId} (DELETE erases the person: their sequences stop, their data goes, past events are redacted, their profile is blocklisted unless `{ "blocklist": false }`; emits `lead.deleted`) - Blocklist: GET|POST /v1/blocklist, DELETE /v1/blocklist/{entryId} - Campaigns: GET|POST /v1/campaigns, GET|PATCH|DELETE /v1/campaigns/{campaignId}, POST /v1/campaigns/{campaignId}/preview|launch|pause|resume|archive, POST /v1/campaigns/{campaignId}/leads, GET /v1/campaigns/{campaignId}/stats - Enrollments: GET /v1/campaigns/{campaignId}/enrollments, GET|PATCH /v1/campaigns/{campaignId}/enrollments/{enrollmentId}, POST /v1/campaigns/{campaignId}/enrollments/{enrollmentId}/stop - Inbox: GET /v1/conversations, GET /v1/conversations/{conversationId}, POST /v1/conversations/{conversationId}/messages - Events: GET /v1/events?after=&before=&types=&limit= (lead.* events carry `lead.publicIdentifier` and `lead.providerId`; message events carry `providerMessageId`; `lead.connected` and `message.sent` (source `inbox` or `manual`) cover what happens with a lead outside a sequence step) - Webhooks: GET|POST /v1/webhooks, GET|PATCH|DELETE /v1/webhooks/{webhookEndpointId}, POST /v1/webhooks/{webhookEndpointId}/rotate-secret, GET /v1/webhooks/{webhookEndpointId}/deliveries, POST /v1/webhooks/{webhookEndpointId}/test - MCP: POST /mcp ## MCP tools add_leads_to_list, add_to_blocklist, create_list, delete_list, get_import, get_lead, get_list, import_to_list, list_blocklist, list_imports, list_leads, list_lists, remove_from_blocklist, remove_leads_from_list, search_parameters, search_people, update_lead_fields, delete_lead, update_list, add_leads_to_campaign, archive_campaign, create_campaign, delete_campaign, get_campaign_stats, get_campaign, get_enrollment, launch_campaign, list_campaigns, list_enrollments, pause_campaign, preview_campaign, resume_campaign, stop_enrollment, update_campaign, update_enrollment_fields, list_events, get_conversation, list_conversations, send_message, create_sandbox_sender, disconnect_sender, get_connect_link, get_sender, list_senders, pause_sender, resume_sender, update_sender, create_webhook, delete_webhook, get_webhook, list_webhook_deliveries, list_webhooks, rotate_webhook_secret, test_webhook, update_webhook, get_license, rename_workspace, whoami, get_billing, wait_for_connection ## Docs - [Quickstart](https://getoutvoy.com/docs): sign-up and API key → sandbox sender → search → list → import → campaign → preview → launch → events → reply, all with curl - [API reference overview](https://getoutvoy.com/docs/api): auth, envelope, pagination, errors, idempotency, every endpoint - [MCP setup](https://getoutvoy.com/docs/mcp): Claude Code, Claude Desktop, Cursor, tool list, example prompts - [Events and webhooks](https://getoutvoy.com/docs/webhooks): event types, real payloads, signature verification, retries - [Templates](https://getoutvoy.com/docs/templates): variables, fallbacks, custom fields, length limits, preview issues - [Account safety](https://getoutvoy.com/docs/safety): limits, ceilings, risky values, warm-up, pacing, what pauses a sender ## Optional - [Pricing](https://getoutvoy.com/pricing): monthly plans (Starter $49, Growth $129, Scale $249) with a 7-day free trial (card required, cancel anytime), and AppSumo lifetime tiers ($59–$499 once) that each include 1 LinkedIn account for life, with extra LinkedIn accounts as a monthly add-on at $19/month each; full API and MCP on every plan - [Terms of service](https://getoutvoy.com/terms) - [Privacy policy](https://getoutvoy.com/privacy) - [Data processing agreement](https://getoutvoy.com/dpa) - [Sub-processors](https://getoutvoy.com/subprocessors) - [Cookie policy](https://getoutvoy.com/cookies) - [Refund and cancellation policy](https://getoutvoy.com/refunds) - [Legal notice](https://getoutvoy.com/legal)