Skip to main content

How to set up Monaco

Authentication

Monaco uses API key authentication:
  1. In Monaco, open Settings → API keys
  2. Create a key (it starts with mks_)
  3. Paste the API key in Cargo when connecting
A key is scoped to the organization it was created in and carries that organization’s read and write access.
Code slugs: integration slug monaco. Actions: upsertContact, updateContact, getContact, searchContacts, upsertAccount, updateAccount, getAccount, searchAccounts, createOpportunity, updateOpportunity, searchOpportunities, linkContactsToOpportunity, createTask, createAudience, addContactsToAudience, enrollContactsInCampaign. Call them as integrations.monaco.<action>(...).

Syncing Monaco into Cargo

Five syncs pull Monaco records into a Cargo table: Each sync is incremental. The first run reads everything, and later runs only read records whose updated_at moved past the previous run’s high-water mark. A run that does not reach the end of the result set keeps its position and resumes there, so the mark only advances once a full pass has completed — a record is never skipped because a run stopped halfway. Accounts keep their primary domain in a list and their LinkedIn page on the enriched company record. Cargo lifts both to a flat domain and linkedin_url column so they can be used for unification and matching. Custom fields are added as extra columns, named with the field’s key in Monaco.

Monaco actions

Upsert contact

Create a contact, or update the one that matches. Required fields:
  • An Email or a LinkedIn URL to match on
Optional fields:
  • First name, Last name, Job title, Phone number, Location
  • Account ID, or a Company domain that resolves the account and creates it when it does not exist
  • Do not contact, Inbound lead, Notes, Tags
  • Any custom field defined on contacts
Use case: Push an enriched lead into Monaco and attach it to the right account in one step.

Update contact

Update a contact by its Monaco ID. Fields left empty are untouched. Setting Tags replaces the contact’s existing tags.

Get contact

Read one contact by ID, with its scoring, source attribution and custom fields.

Search contacts

Find contacts matching a set of filters. Optional fields:
  • Filters: field, operator and value (see Filtering)
  • Sort: a field key, prefixed with - for descending
  • Limit: up to 500 records, 50 by default

Upsert account

Create an account, or update the one matching the domain. Required fields:
  • Domain: the matching identifier
Optional fields:
  • Name, LinkedIn URL, Status, Owner, Notes
  • Tags: appended to the account’s existing tags
  • Any custom field defined on accounts

Update account

Update an account by its Monaco ID. Optional fields:
  • Name, Status, Owner, Notes
  • Parent account: an account ID to nest this account under. The parent must itself be top-level.
  • Domains: the account’s complete domain list, primary first — domains left out are removed
  • Tags: replaces the account’s existing tags

Get account

Read one account by ID, with its enriched company information, scoring and custom fields.

Search accounts

Find accounts matching a set of filters. Same fields as Search contacts.

Create opportunity

Create an opportunity on an existing account. Required fields:
  • Name
  • Account ID
Optional fields:
  • Owner, Stage (defaults to the first stage of your pipeline)
  • Estimated value and Currency (ISO 4217, for example USD). Monaco documents no default currency, so a value without one is refused rather than booked at a guess.
  • Estimated close date (YYYY-MM-DD)
  • Notes, Tags
  • Idempotency key: set it to a stable value such as a record ID so a retried run does not create a second opportunity

Update opportunity

Move an opportunity’s stage, revise its value, or close it. Optional fields: Name, Owner, Stage, Estimated value, Currency, Estimated close date, Actual close date, Notes, Tags, custom fields. As on create, an estimated value needs a currency.

Search opportunities

Find opportunities matching a set of filters. Same fields as Search contacts. Add contacts to an opportunity’s buying committee. Pairs that already exist are left as they are. Required fields:
  • Opportunity ID
  • Contact IDs

Create task

Create a task for a rep. Required fields:
  • Title
Optional fields:
  • Type: general action item (the default) or email
  • Assignee: defaults to the user the API key belongs to
  • Account ID, Opportunity ID, Due at (ISO 8601)
  • Draft recipients, Draft subject and Draft body: an email for the rep to review. Monaco takes the draft as a whole, so all three are required together and only on an email task.
Use case: Hand a rep an AI-written first email on an account that just hit an intent threshold.

Create audience

Create an audience, seeded either with a list of contacts or with a filter over them — not both. Required fields:
  • Name
Optional fields:
  • Contact IDs: an explicit list of members, or
  • Filters: a query over contacts, optionally narrowed by Source audience and trimmed by Excluded contact IDs

Add contacts to audience

Add contacts to an existing audience by their IDs. Monaco reports per-contact problems in its response rather than failing the call, so the action’s title reflects how many actually landed.

Enroll contacts in campaign

Enroll contacts into an active or paused campaign, through a new audience attached to it. Required fields:
  • Campaign
  • Audience name: the name of the audience Monaco creates to hold these contacts
  • Contact IDs

Filtering

Search actions and filtered audiences take a list of conditions, each a field, an operator and a value. The field list is read from your Monaco schema, so custom fields are filterable alongside standard ones. Available operators are is, is_not, equals, not_equals, contains, not_contains, greater_than, greater_than_or_equals, less_than, less_than_or_equals, is_empty and is_not_empty. Which of them a given field accepts depends on its type — the field picker shows the real list — and the last two take no value. Monaco marks a field filterable and sortable independently, so the two lists do not match. The Sort picker offers the sortable fields rather than the filterable ones.

Best practices

  • Monaco allows 100 requests a minute per organization. Cargo stays under that and spreads its calls, so a sync walking pages leaves room for the actions running beside it.
  • Give Create opportunity an idempotency key whenever the workflow can re-run on the same record.
  • Prefer Upsert contact with a company domain over looking the account up yourself — Monaco resolves it and creates the account when it is missing.