Arco CRM integration
Arco CRM is a Brazilian sales CRM (by Grupo Arco). With its public API an agent can create, find, update, move through pipeline stages, disqualify, reopen and convert leads; manage people, organizations and deals (stage moves, won, lost, reopen, tags); create and complete activities, add notes, list attachments and phone calls (with a signed recording URL), read pipelines, origins, members, loss reasons and custom fields, look records up by phone, email, CPF or CNPJ, read the event feed and manage webhook subscriptions. Records hold personal data (names, phones, emails, Brazilian tax ids). Not exposed: API key management, attachment uploads, CSV exports, call transcriptions, cadences (undocumented) and the deprecated tag-replace routes. Authentication is an API key (ark_ followed by a prefix and a secret) created under API Keys in Arco CRM, sent as a Bearer token; each tool needs the scope its description names. Rate limit: 60 requests a minute per key, 300 per workspace.
Say what should happen.
The workflow builds itself.
What you can do with Arco CRM
Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.
Each badge shows the default agent permission of an endpoint (allowed: an agent calls it without asking; ask first: you are asked before an agent calls it, when the agent or chat asks permission for sensitive actions; never: no agent may call it), which every user can change endpoint by endpoint in their credential settings.
Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.
Lead, 10 operations
bulk_delete_leadsBulk delete leadsPOSTAgents: ask firstDeletes up to 1000 leads in one call (soft delete), recorded as one audit entry and one lead.bulk_deleted event. Unknown or already deleted ids are skipped. Needs the API key scope leads:bulk_delete:all.change_lead_stageChange lead stagePATCHAgents: ask firstMoves an open lead to another stage of its pipeline, or with lead_pipeline_id to a stage of another pipeline; emits lead.stage_changed or lead.pipeline_changed. Needs the API key scope leads:write.convert_leadConvert leadPOSTAgents: ask firstConverts an open lead into a person, an organization and/or a deal; each is create, link or skip. The lead becomes qualified and its history (activities, notes, attachments, tags) moves over; emits lead.converted. Needs the API key scope leads:write.create_leadCreate leadPOSTAgents: ask firstCreates a lead in CRM; its pipeline and first stage come from the workspace's default lead pipeline. Can start the workspace's automations and webhooks. Needs the API key scope leads:write. If the workspace requires an origin, origin_id is required.disqualify_leadDisqualify leadPOSTAgents: ask firstMarks an open lead as disqualified (a terminal status) with an optional reason and comment, and emits lead.disqualified. Needs the API key scope leads:write. A lead that is not open answers LEAD_ALREADY_TERMINAL.get_leadGet leadGETAgents: ask firstReturns one lead (personal data) with its status, owner, pipeline and stage, UTM and ad attribution, location, custom fields and time in stage. Needs the API key scope leads:read.list_leadsList leadsGETAgents: ask firstLists leads newest first, with filters combined by AND (status, pipeline, stage, origin, channel, UTM, owner, unassigned, converted, text search); page with meta.next_cursor. Personal data. Needs the API key scope leads:read.reopen_leadReopen leadPOSTAgents: ask firstPuts a disqualified lead back to open, clearing its disqualification fields; it keeps its stage (or, if that stage was deleted, goes to the first active stage of the pipeline). Emits lead.reopened. Needs the API key scope leads:write.transfer_lead_ownerTransfer lead ownerPOSTAgents: ask firstAssigns a lead to another member (owner) and emits lead.owner_transferred. Idempotent when the target already owns it. Needs the API key scope leads:transfer_owner:all.update_leadUpdate leadPATCHAgents: ask firstChanges the fields you send on a lead and leaves the rest; custom_data is merged into the existing values. Send lead_pipeline_id with lead_stage_id to move it to another pipeline (open leads only). Needs the API key scope leads:write.
Deal, 8 operations
change_deal_stageChange deal stagePOSTAgents: ask firstMoves a deal to another stage of its pipeline, or with pipeline_id (open deals only) to a stage of another pipeline. Needs the API key scope deals:change_stage:all. Idempotency-Key avoids duplicates on retry (24 hours).create_dealCreate dealPOSTAgents: ask firstCreates a deal (sales opportunity) in a pipeline and stage; can start the workspace's automations and webhooks. Needs the API key scope deals:create. Idempotency-Key avoids duplicates on retry (24 hours).get_dealGet dealGETAgents: ask firstReturns one deal with its value, status, pipeline and stage, owner, linked person and organization, first-contact attribution and time in stage. Needs the API key scope deals:read:all.list_dealsList dealsGETAgents: ask firstLists the workspace's deals (sales opportunities) with value, status, pipeline and stage, owner and time in stage; filters combine with AND. Pages with cursor. Needs the API key scope deals:read:all.mark_deal_lostMark deal lostPOSTAgents: ask firstCloses a deal as lost, with an optional free-text reason_lost or a loss_reason_id. Needs the API key scope deals:mark_lost:all. Idempotency-Key avoids duplicates on retry (24 hours).mark_deal_wonMark deal wonPOSTAgents: ask firstCloses a deal as won, with an optional reason. Needs the API key scope deals:mark_won:all. Idempotency-Key avoids duplicates on retry (24 hours).reopen_dealReopen dealPOSTAgents: ask firstPuts a won or lost deal back to open, in the stage it had before closing (or, if that stage was deleted, the first active stage of the pipeline). A deal already open answers 400. Needs the API key scope deals:reopen:all.update_dealUpdate dealPATCHAgents: ask firstChanges the fields you send on a deal and leaves the others as they are. Send pipeline_id with stage_id to move an open deal to another pipeline; change_deal_stage moves it within its pipeline. Needs the API key scope deals:update:all.
Webhook subscription, 7 operations
add_webhook_event_typesAdd webhook event typesPOSTAgents: ask firstAdds event types to a subscription in one atomic step; types already there are skipped. The * wildcard is refused here (use update_webhook_subscription with event_types ["*"]), and a subscription already on the wildcard answers 400.create_webhook_subscriptionCreate webhook subscriptionPOSTAgents: ask firstCreates a webhook subscription that POSTs CRM events to an HTTPS URL. Needs the API key scope webhooks:manage. The signing secret is returned only in this answer and is not passed on here, so deliveries cannot be verified with it.delete_webhook_subscriptionDelete webhook subscriptionDELETEAgents: ask firstDeletes a webhook subscription (soft delete); its pending deliveries are cancelled. Needs the API key scope webhooks:manage.get_webhook_subscriptionGet webhook subscriptionGETAgents: ask firstReturns one webhook subscription (url, event types, status), without its secret. Needs the API key scope webhooks:read.list_webhook_subscriptionsList webhook subscriptionsGETAgents: ask firstLists the workspace's webhook subscriptions (url, event types, status), without their secrets. Needs the API key scope webhooks:read.remove_webhook_event_typesRemove webhook event typesDELETEAgents: ask firstRemoves event types from a subscription in one atomic step; types not enabled are skipped. The * wildcard is refused, and a removal that would empty the list answers 400 (delete_webhook_subscription stops it instead).update_webhook_subscriptionUpdate webhook subscriptionPATCHAgents: ask firstChanges the url, event_types, status (enabled or disabled) or name of a subscription; the secret cannot change. Needs the API key scope webhooks:manage.
Activity, 5 operations
complete_activityComplete activityPOSTAgents: ask firstMarks an activity as done (completed_at set to now). Idempotent. Needs the API key scope activities:complete:all.create_activityCreate activityPOSTAgents: ask firstCreates an activity (task) of a type from list_activity_types, assigned to a member and optionally linked to a lead, deal, person or organization. Needs the API key scope activities:create.get_activityGet activityGETAgents: ask firstReturns one activity (task) with its type, title, owner, due date, completion time, notes and related record. Needs the API key scope activities:read:all.list_activitiesList activitiesGETAgents: ask firstLists activities (tasks such as calls or meetings) with type, owner, due date, status and the related record; filters by status, owner, type and related record. Needs the API key scope activities:read:all.update_activityUpdate activityPATCHAgents: ask firstChanges the fields you send on an activity and leaves the others as they are. Needs the API key scope activities:update:all.
Call, 4 operations
bulk_delete_callsBulk delete callsPOSTAgents: ask firstDeletes up to 1000 calls in one call (soft delete), recorded as one audit entry and one call.bulk_deleted event. Unknown or already deleted ids are skipped. Needs the API key scope calls:bulk_delete:all.get_callGet callGETAgents: ask firstReturns one phone call with direction, status, numbers, durations, disposition, recording and transcription status and linked records. Personal data. Needs the API key scope calls:read:all.list_callsList callsGETAgents: ask firstLists phone calls with direction, status, numbers, durations, disposition and links to records; filters by date, direction, status and link. Returns personal data (phone numbers, names). Needs the API key scope calls:read:all.transfer_call_ownerTransfer call ownerPOSTAgents: ask firstAssigns a call to another member (agent) and emits call.owner_transferred. Idempotent when the target already owns it. Needs the API key scope calls:transfer_owner:all.
Note, 4 operations
create_noteCreate notePOSTAgents: ask firstAdds a note to a lead, deal, person or organization. Needs the API key scope notes:create. Idempotency-Key avoids duplicates on retry (24 hours).get_noteGet noteGETAgents: ask firstReturns one note with its record, author and content. Needs the API key scope notes:read.list_notesList notesGETAgents: ask firstLists the notes of one record (entity_type with entity_id), newest first, with author and content. Needs the API key scope notes:read.update_noteUpdate notePATCHAgents: ask firstChanges the content or the attachments of a note. Needs the API key scope notes:update.
Organization, 4 operations
create_organizationCreate organizationPOSTAgents: ask firstCreates an organization (company) in CRM. A cnpj is accepted with or without its mask, stored as digits only and its check digit validated (invalid: 400 VALIDATION_ERROR); email is stored lowercase. Needs the API key scope organizations:create.get_organizationGet organizationGETAgents: ask firstReturns one organization (company) with owner, CNPJ, email, website, industry, size, location and custom fields. Needs the API key scope organizations:read:all.list_organizationsList organizationsGETAgents: ask firstLists the workspace's organizations (companies) with owner, CNPJ, email, last contact and tags; filters by owner, unassigned pool or name. Pages with cursor. Needs the API key scope organizations:read:all.update_organizationUpdate organizationPATCHAgents: ask firstChanges the fields you send on an organization and leaves the others as they are. A cnpj is accepted with or without its mask and its check digit validated; email is stored lowercase. Clearing a field with null is not exposed.
Person, 4 operations
create_personCreate personPOSTAgents: ask firstCreates a contact (person) in CRM. A cpf is accepted with or without its mask, stored as digits only and its check digit validated (invalid: 400 VALIDATION_ERROR). Needs the API key scope people:create.get_personGet personGETAgents: ask firstReturns one contact (person) with owner, organization, email, phone, CPF, position, location and custom fields. Personal data. Needs the API key scope people:read:all.list_peopleList peopleGETAgents: ask firstLists the workspace's contacts (people) with owner, organization, CPF, last contact and tags; filters by organization, owner or unassigned pool. Returns personal data. Pages with cursor. Needs the API key scope people:read:all.update_personUpdate personPATCHAgents: ask firstChanges the fields you send on a contact and leaves the others as they are. A cpf is accepted with or without its mask and its check digit validated (invalid: 400 VALIDATION_ERROR). Clearing a field with null is not exposed.
Deal tag, 3 operations
add_deal_tagsAdd deal tagsPOSTAgents: ask firstAdds tags to a deal in one atomic step; tags already there are skipped. If any tag_id is not in the workspace, nothing is added (404). Emits deal.tags_updated when something was added. Needs the API key scope deals:update:all.list_deal_tagsList deal tagsGETAgents: ask firstReturns every tag on a deal. Needs the API key scope deals:read:all.remove_deal_tagsRemove deal tagsDELETEAgents: ask firstRemoves tags from a deal in one atomic step; tags not on it are skipped. Emits deal.tags_updated when something was removed. Needs the API key scope deals:update:all.
Lead tag, 3 operations
add_lead_tagsAdd lead tagsPOSTAgents: ask firstAdds tags to a lead in one atomic step; tags already there are skipped. If any tag_id is not in the workspace, nothing is added (404). Emits lead.tags_updated when something was added. Needs the API key scope leads:write.list_lead_tagsList lead tagsGETAgents: ask firstReturns every tag on a lead. Needs the API key scope leads:read.remove_lead_tagsRemove lead tagsDELETEAgents: ask firstRemoves tags from a lead in one atomic step; tags not on it are skipped (tags_removed then empty). Emits lead.tags_updated when something was removed. Needs the API key scope leads:write.
Membership, 2 operations
get_membershipGet membershipGETAgents: ask firstReturns one active member (name, email, role) by its UUID. Personal data. Needs the API key scope memberships:read.list_membershipsList membershipsGETAgents: ask firstLists the workspace's active members (name, email, role); use their ids as owner_membership_id on leads, deals, people and organizations. Returns personal data (names, emails). Needs the API key scope memberships:read.
Origin, 2 operations
get_originGet originGETAgents: ask firstReturns one origin by its UUID. Needs the API key scope origins:read.list_originsList originsGETAgents: ask firstLists the workspace's lead origins (acquisition sources) alphabetically; use their ids as origin_id when creating leads and deals. Needs the API key scope origins:read.
Activity type, 1 operation
list_activity_typesList activity typesGETAgents: ask firstLists every activity type of the workspace by name (no paging); use their ids as type_id when creating activities. Needs the API key scope activities:read:all.
Attachment, 1 operation
list_attachmentsList attachmentsGETAgents: ask firstLists the confirmed attachments (files) of one lead, deal, person or organization, oldest first, with name, type and size. Needs the API key scope attachments:download.
Call recording, 1 operation
get_call_recording_urlGet call recording urlGETAgents: ask firstReturns a fresh signed URL to stream or download a call's recording, valid 15 minutes, with its expiry time. Personal data. Needs the API key scope calls:listen_recording:all.
City, 1 operation
list_citiesList citiesGETAgents: ask firstLists the municipalities of a Brazilian state with their official IBGE code; use the code as city_ibge_id on leads, people and organizations. Needs no scope (any valid API key).
Custom field, 1 operation
list_custom_fieldsList custom fieldsGETAgents: ask firstLists the custom fields the workspace defines for one entity type (deal, lead, person, organization or product): key (used in custom_data), type, options, required and unique flags. Needs the API key scope custom_fields:read.
Deal pipeline, 1 operation
list_deal_pipelinesList deal pipelinesGETAgents: ask firstLists the workspace's deal pipelines; with include_stages true each comes with its stages (ids, names, order, probability, SLA). Pages with cursor. Needs the API key scope deals:read.
Deal stage history, 1 operation
list_deal_stage_historyList deal stage historyGETAgents: ask firstLists every stage a deal has passed through, oldest first, with entered_at, exited_at and duration_ms, to see time spent per stage. Needs the API key scope deals:read:all.
Event, 1 operation
list_eventsList eventsGETAgents: ask firstReads the CRM's change events (lead.created, deal.won and so on) in order, from a cursor: pass meta.next_cursor to read the next page. Needs the API key scope events:read. For real-time delivery use a webhook subscription instead.
Lead conversion, 1 operation
preview_lead_conversionPreview lead conversionGETAgents: ask firstReturns up to 5 existing people and 5 organizations that match a lead (exact email, phone or CNPJ, or name), and the required fields that would be missing, so you can choose link or create before convert_lead. Changes nothing.
Lead pipeline, 1 operation
list_lead_pipelinesList lead pipelinesGETAgents: ask firstLists the workspace's lead pipelines; with include_stages true each comes with its stages (ids, names, order, SLA, active flag). Pages with cursor. Needs the API key scope leads:read.
Lead stage history, 1 operation
list_lead_stage_historyList lead stage historyGETAgents: ask firstLists every stage a lead has passed through, oldest first, with entered_at, exited_at and duration_ms, to see time spent per stage and find bottlenecks. Needs the API key scope leads:read.
Loss reason, 1 operation
list_loss_reasonsList loss reasonsGETAgents: ask firstLists the workspace's loss reasons; scope lead gives the reasons for disqualify_lead, scope deal those for mark_deal_lost. Only active ones unless include_inactive is true. Needs the API key scope loss_reasons:read.
Record, 1 operation
lookup_recordsLookup recordsGETAgents: ask firstFinds leads, people and organizations by exact phone, email, CPF or CNPJ after normalization; several keys match by OR and each row says which in matched_by. Returns personal data.
State, 1 operation
list_statesList statesGETAgents: ask firstLists the 27 Brazilian states (UF) with IBGE code and two-letter code; use the code as state on leads, people and organizations. Needs no scope (any valid API key).
Tag, 1 operation
list_tagsList tagsGETAgents: ask firstLists the workspace's active tags (id, name, color), newest first; use their ids with add_lead_tags and add_deal_tags. Needs the API key scope tags:read.
Webhook delivery, 1 operation
list_webhook_deliveriesList webhook deliveriesGETAgents: ask firstLists a subscription's delivery attempts, newest first (up to limit, default 50, at most 100), with status, HTTP code and error. Needs the API key scope webhooks:read.
Webhook event, 1 operation
replay_webhook_eventsReplay webhook eventsPOSTAgents: ask firstQueues the CRM's past events again for delivery to a subscription (optionally from from_event_id on), so its URL receives them again. Needs the API key scope webhooks:manage.
Use Arco CRM from Claude Code, Cursor or Codex
Connect Arco CRM in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Arco CRM operations become tools the client can call, next to every other integration you connected.
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"
[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"{
"mcpServers": {
"livecontext": {
"type": "http",
"url": "https://livecontext.ai/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}How to connect Arco CRM
- Create your workspace
Sign up free. Nothing to install.
- Connect Arco CRM once
Add your Arco CRM connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.
- Describe the job in chat
The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.
Arco CRM integration FAQ
What can you do with the Arco CRM integration?
LiveContext exposes 73 operations on Arco CRM, covering lead, deal, webhook subscription and activity.
