Skip to main content

Close

Read and write a Close CRM organization - leads (accounts), contacts, opportunities, timeline activity and tasks - with the organization's own statuses, pipelines and custom fields discovered rather than assumed.

Connect a Close organization with an API key to work its CRM end to end: search leads with Close's own query syntax (including the query behind any Smart View), read an account with its people and deals inline, create and update leads, contacts and opportunities, write notes and log calls onto a timeline, and manage tasks. Statuses, pipelines, users and custom fields are all discovered through their own tools, because every Close organization defines its own. Remember Close's model: a LEAD is the account (a company or household) and the people inside it are CONTACTS - a person's name never belongs in a lead's name. Opportunity values are stored in cents, per period. Sending email through Close is not supported here; notes and logged calls are.

Connect

Credential fieldRequiredWhere it comes from
API key (API_KEY)YesFrom Settings → API Keys in Close (starts with api_). It carries the full permissions of the Close user who created it, so pick that user deliberately.

Tools

ToolAccessWhat it does
Whoami (yekar.close-crm.whoami)ReadThe Close user this API key acts as, and the organization it belongs to. Worth calling first: an API key inherits the permissions of the user who created it, so this is what every other tool can see and do, and a 403 elsewhere is about this user's role.
List users (yekar.close-crm.list-users)ReadThe people in this Close organization, with their user ids. Those ids are what assignment takes - a task's assignee and an opportunity's owner are user_… ids, never names or email addresses.
List lead statuses (yekar.close-crm.list-lead-statuses)ReadThis organization's lead statuses and their ids. Every organization defines its own - 'Potential', 'Qualified', 'Bad Fit' are defaults, not guarantees - and Create/Update lead takes the stat_… ID, not the label. Call this before setting a lead's status.
List opportunity statuses (yekar.close-crm.list-opportunity-statuses)ReadThis organization's opportunity statuses, each with its stat_… id, its pipeline, and its type - active, won or lost. Those three types are the only ones Close recognises, so 'is this deal closed?' is answered by the type, not by reading the label. Create/Update opportunity takes the id.
List pipelines (yekar.close-crm.list-pipelines)ReadThis organization's opportunity pipelines, each with the statuses it contains in order. An opportunity's status determines its pipeline, so this is the map from 'which sales process' to 'which status ids are legal'.
List custom fields (yekar.close-crm.list-custom-fields)ReadThe custom fields this organization has defined on leads, contacts, opportunities or activities - each with the exact custom.<id> key to send on a write, its type, and the allowed choices where it has them. Call this before writing any custom value: the ids are per-organization, and a wrong key is a validation error, not a silently ignored field.
List Smart Views (yekar.close-crm.list-smart-views)ReadThe saved searches (Smart Views) this organization has defined. Each carries the query string behind it, which can be passed straight to List leads' query - the fastest way to reuse a segment the team already agreed on rather than inventing a query. A Smart View built in the visual editor has no text form and reports a null query.
List leads (yekar.close-crm.list-leads)ReadSearch or page this organization's leads. In Close a LEAD IS THE ACCOUNT - the company or household - and the people inside it are contacts, so a person's name belongs in a contact, never in a lead's name. Each returned lead carries its contacts and open opportunities inline. query takes Close's own search syntax, which is also what Smart Views are made of (see List Smart Views to reuse one).
Get lead (yekar.close-crm.get-lead)ReadOne lead (account) in full: its status, addresses and custom fields, plus the contacts and opportunities attached to it. The nested contact and opportunity lists are capped for the context budget and report how many were omitted - use List contacts or List opportunities for the complete set on a large account.
Create lead (yekar.close-crm.create-lead)WriteCreate a lead - an ACCOUNT (company or household) - optionally with its first contacts and addresses in the same call. In Close a person is a contact inside a lead, so putting a person's name here creates an account named after them, which is a mess to unpick later. Close does NOT deduplicate: creating the same company twice produces two leads, so search with List leads first.
Update lead (yekar.close-crm.update-lead)WriteChange a lead's fields. Only what you pass is touched - omitted fields keep their values - but addresses and any multi-value custom field are REPLACED wholesale, not merged. Contacts are not editable here; use Update contact.
Delete lead (yekar.close-crm.delete-lead)WritePermanently delete a lead and EVERYTHING attached to it - its contacts, opportunities, activities and tasks. This is not an archive: Close has no recycle bin for leads, so there is nothing to restore from afterwards. Prefer moving the lead to a 'Bad Fit'-style status unless deletion is genuinely what is wanted.
List contacts (yekar.close-crm.list-contacts)ReadThe PEOPLE in this organization, optionally narrowed to one lead. A contact always belongs to exactly one lead (account) - there are no free-floating people in Close, and moving a person between accounts means creating them on the new one.
Get contact (yekar.close-crm.get-contact)ReadOne person in full - every email address, phone number and web link they carry, their title, their custom fields, and the id of the lead (account) they belong to.
Create contact (yekar.close-crm.create-contact)WriteAdd a person to an existing lead (account). Every contact needs a lead - if the account does not exist yet, call Create lead first (it can create the lead and its contacts in one call). Close does not deduplicate on email, so creating the same person twice produces two contacts.
Update contact (yekar.close-crm.update-contact)WriteChange a person's details. Omitted fields keep their values, but emails, phones and urls REPLACE the existing list wholesale - Close has no per-item patch, so passing one email leaves the contact with exactly that one. Read the contact first and send the full list when adding to it.
Delete contact (yekar.close-crm.delete-contact)WritePermanently remove a person from their lead. The account and its activity history survive; the contact does not, and there is no undo.
List opportunities (yekar.close-crm.list-opportunities)ReadDeals, filtered by lead, owner, status or outcome. Every monetary field comes back in BOTH forms: valueCents is exactly what Close stores, and value is the same amount in major units. Sum valueCents, never value, when totalling - and note that the value is PER valuePeriod, so a monthly deal's number is not an annual one.
Get opportunity (yekar.close-crm.get-opportunity)ReadOne deal in full - its value (in cents and in major units), period, currency, confidence, owner, pipeline, status and custom fields.
Create opportunity (yekar.close-crm.create-opportunity)WriteOpen a deal on a lead. VALUE IS IN CENTS: $1,000.00 is 100000. The value is per valuePeriod (one_time, monthly or annual), so a recurring deal stores one period's amount and not the contract total. The status you pick also picks the pipeline - call List opportunity statuses first.
Update opportunity (yekar.close-crm.update-opportunity)WriteChange a deal - including winning or losing it, which is done by moving it to a status whose type is won or lost rather than by setting a flag. VALUE IS IN CENTS. Omitted fields keep their values.
Delete opportunity (yekar.close-crm.delete-opportunity)WritePermanently delete a deal. Prefer moving it to a lost status instead: a lost deal stays in the pipeline history and in reporting, while a deleted one disappears from both with no undo.
List activities (yekar.close-crm.list-activities)ReadA lead's timeline (or one user's activity): notes, calls, emails, SMS, meetings and the automatic status-change entries, newest first. Each activity's prose is normalized into text whichever field its own type keeps it in, so a mixed timeline reads uniformly. Requires leadId or userId - Close serves no unfiltered feed.
Create note (yekar.close-crm.create-note)WriteWrite a note onto a lead's timeline, attributed to the API key's own Close user. Notes are visible to the whole organization - there is no private or internal-only note in Close.
Log call (yekar.close-crm.log-call)WriteRecord a call that already happened onto a lead's timeline. This LOGS a call - it does not place one; Close's dialler is not reachable through the API. Duration is in seconds.
List tasks (yekar.close-crm.list-tasks)ReadTasks, optionally narrowed to a lead or an assignee. Note Close's default: with isComplete omitted, only INCOMPLETE tasks come back - pass it explicitly to see finished ones or the full set is not what you get.
Create task (yekar.close-crm.create-task)WritePut a task on a lead. Assignment takes a user_… id, not a name or an email address - call List users to resolve one; leaving it out assigns the task to the API key's own user rather than to nobody.
Update task (yekar.close-crm.update-task)WriteComplete, reopen, reassign or re-date a task. Completing is what this tool is usually for - set isComplete to true; Close keeps the task and marks it done rather than deleting it, so the history survives.

Notes

  • In Close, sign in as the user whose permissions Yekar.AI should have - an API key inherits that user's role exactly, and there are no per-key scopes to narrow later.
  • Go to Settings → API Keys → New API Key, name it (e.g. "Yekar.AI"), and copy the key (it starts with api_). Close shows it once.
  • Paste it here. If you copied it from Close's curl examples, a trailing colon may have come along - it is part of -u 'api_…:', not the key, and is stripped automatically.
  • Call Whoami to confirm which Close user and organization the key resolves to; a later 403 is about that user's role, not about the key.
  • Add one credential per Close organization - a production and a sandbox organization can live on the same connection.