Upsales integration
Upsales is a Nordic CRM and marketing platform. Manage companies, contacts, opportunities and won orders (one entity told apart by probability) with their stages, tasks (phone calls and to-dos), appointments, campaigns, products, price lists and product categories, subscriptions (recurring agreements that generate orders), NPS scores and logged phone calls; read users, events and their attendees, category values and custom field definitions. List tools page with limit (up to 2000) and offset and filter with comparison prefixes such as gte:2026-01-01. Not exposed: document upload, user-defined objects, user administration, editing custom field, category and appointment type definitions, currencies, support tickets, comments, e-signatures, forms and mail. Authentication is an Upsales API key (created by an admin under settings), sent as the token query parameter.
Say what should happen.
The workflow builds itself.
What you can do with Upsales
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.
Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.
Contact, 7 operations
create_contactCreate contactPOSTCreates a contact on a company. firstName and lastName are required (sent with usingFirstnameLastname=true), client sets the company.delete_contactDelete contactDELETEDeletes a contact by id, with no undo.get_contactGet contactGETReturns one contact by id: name, email, phones, title, company, categories, campaigns, opt-ins, lead score and custom field values.list_contact_custom_fieldsList contact custom fieldsGETLists the custom fields defined on contacts: id, name, data type, default values and alias. Use a field id in custom values ({fieldId, value}) and custom filters.list_contactsList contactsGETLists contacts (people at your companies), one page at a time (limit up to 2000, offset to page). Filter by company (client.id), email, a contact custom field, or a company custom field (client.custom).list_event_contactsList event contactsGETLists the contacts of one event with their status (added, invited, attending, attended, declined, waitingList) and the dates of each step.update_contactUpdate contactPUTUpdates a contact: only the fields sent change (name, email, phone, cellPhone, title, active, company...).
Account, 6 operations
create_companyCreate companyPOSTCreates a company. name is required; set account managers with users, and custom field values with custom.delete_companyDelete companyDELETEDeletes a company by id, with no undo.get_companyGet companyGETReturns one company by id with its account managers, addresses, categories, campaigns, custom field values, lead score and the dates of its nearest and last activities, appointments, opportunities and orders.list_companiesList companiesGETLists companies (accounts), one page at a time (limit up to 2000, offset to page). Filter with isExternal=0 to skip identified website visitors that are not yet in your database, or on user.id, scoreUpdateDate or a custom field.list_company_custom_fieldsList company custom fieldsGETLists the custom fields defined on companys: id, name, data type, default values and alias. Use a field id in custom values ({fieldId, value}) and custom filters.update_companyUpdate companyPUTUpdates a company: only the fields sent change (name, phone, webpage, notes, account managers, custom field values...).
Activity, 6 operations
create_activityCreate activityPOSTCreates a task: a phone call or a to-do, chosen by activityType (ids from list_activity_types). description, users and activityType are required; a phone call also needs client.delete_activityDelete activityDELETEDeletes a task (phone call or to-do) by id.get_activityGet activityGETReturns one task (phone call or to-do) by id with its type, users, company, contacts, dates, outcomes and custom field values.list_activitiesList activitiesGETLists tasks (phone calls and to-dos), one page at a time (limit up to 2000, offset to page). Completed tasks have a closeDate. Filter by company with client.id.list_activity_custom_fieldsList activity custom fieldsGETLists the custom fields defined on task (activity)s: id, name, data type, default values and alias. Use a field id in custom values ({fieldId, value}) and custom filters.update_activityUpdate activityPUTUpdates a task: only the fields sent change. Set closeDate (YYYY-MM-DD) to mark it completed; completed tasks are hidden from the user list by default.
Agreement, 6 operations
create_subscriptionCreate subscriptionPOSTCreates a subscription that generates orders at an interval. description, user, client, stage (a 100% stage), orderRow and metadata (start date, interval, period length, order creation time) are required.delete_subscriptionDelete subscriptionDELETEDeletes a subscription by id.get_subscriptionGet subscriptionGETReturns one subscription by id with its company, stage, order rows, yearly value and metadata (start, end, renewal and next order dates, interval).list_subscription_custom_fieldsList subscription custom fieldsGETLists the custom fields defined on subscriptions: id, name, data type, default values and alias. Use a field id in custom values ({fieldId, value}) and custom filters.list_subscriptionsList subscriptionsGETLists subscriptions (recurring agreements that create orders at an interval), one page at a time, with order rows, values and subscription metadata (start, end, renewal and next order dates). Filter by company with client.id.update_subscriptionUpdate subscriptionPUTUpdates a subscription. Send the full subscription as read with get_subscription; to cancel, set metadata.agreementEnddate to the last day of service.
Appointment, 6 operations
create_appointmentCreate appointmentPOSTCreates an appointment. date, users and activityType (an appointment type id from list_appointment_types) are required, and isAppointment must be true.delete_appointmentDelete appointmentDELETEDeletes an appointment by id.list_appointment_custom_fieldsList appointment custom fieldsGETLists the custom fields defined on appointments: id, name, data type, default values and alias. Use a field id in custom values ({fieldId, value}) and custom filters.list_appointmentsList appointmentsGETLists appointments (meetings with companies), one page at a time (limit up to 2000, offset to page), with their type, users, company, contacts and dates. Filter by company with client.id.list_appointment_typesList appointment typesGETLists the appointment types (Meeting, First meeting...) with their ids, to pass as activityType in create_appointment.update_appointmentUpdate appointmentPUTUpdates an appointment: only the fields sent change (date, endDate, description, location, notes, users, contacts...).
Order, 6 operations
create_orderCreate orderPOSTCreates an opportunity (probability 1 to 99) or a won order (100) on a company, with its order rows (product, quantity, price, listPrice). description, date, user, client, stage, probability and orderRow are required.delete_orderDelete orderDELETEDeletes an opportunity or order by id.get_orderGet orderGETReturns one opportunity or order by id: company, contact, stage, probability, order rows with products and prices, values in the order and master currency, and custom field values.list_order_custom_fieldsList order custom fieldsGETLists the custom fields defined on opportunity and orders: id, name, data type, default values and alias. Use a field id in custom values ({fieldId, value}) and custom filters.list_ordersList ordersGETLists opportunities and orders, one entity told apart by probability: 1 to 99 is an open opportunity, 100 a won order, 0 lost. Filter on probability, value, date or company (client.id) with comparison prefixes.update_orderUpdate orderPUTUpdates an opportunity or order: only the fields sent change. Moving probability to 100 turns an opportunity into a won order; orderRow replaces the order rows.
Project, 6 operations
create_campaignCreate campaignPOSTCreates a campaign. name, startDate, active and users (who can see it) are required.delete_campaignDelete campaignDELETEDeletes a campaign by id.get_campaignGet campaignGETReturns one campaign by id with its dates, quota, notes, users and custom field values.list_campaign_custom_fieldsList campaign custom fieldsGETLists the custom fields defined on campaigns: id, name, data type, default values and alias. Use a field id in custom values ({fieldId, value}) and custom filters.list_campaignsList campaignsGETLists campaigns, which group companies, contacts, activities, appointments and orders, one page at a time.update_campaignUpdate campaignPUTUpdates a campaign: only the fields sent change. Set active to 0 to hide it from the campaign list.
Np, 5 operations
create_nps_scoreCreate nps scorePOSTRecords an NPS score for a contact. contactId, date and score (0 to 10) are required; feedback is optional.delete_nps_scoreDelete nps scoreDELETEDeletes an NPS record by id.get_nps_scoreGet nps scoreGETReturns one NPS score by id with its contact, date, score and feedback.list_nps_scoresList nps scoresGETLists the NPS scores recorded from third-party survey providers, with contact, date, score (0 to 10) and feedback.update_nps_scoreUpdate nps scorePUTUpdates an NPS record: its date, score or feedback.
Product, 5 operations
create_productCreate productPOSTCreates a product. name, listPrice (0 when there is none) and active are required.get_productGet productGETReturns one product by id with its list price, purchase cost, category, currency prices, tiers and bundle contents.list_product_custom_fieldsList product custom fieldsGETLists the custom fields defined on products: id, name, data type, default values and alias. Use a field id in custom values ({fieldId, value}) and custom filters.list_productsList productsGETLists products with list price, purchase cost, category, currencies and price tiers, one page at a time.update_productUpdate productPUTUpdates a product: only the fields sent change. Products cannot be deleted; set active to 0 to disable one.
Orderstage, 4 operations
create_stageCreate stagePOSTCreates a stage of the sales process. name and probability (its default probability, 0 to 100) are required.get_stageGet stageGETReturns one stage by id with its name, default probability and the roles it is restricted to.list_stagesList stagesGETLists the opportunity and order stages of the sales process, each with its default probability. Use a stage id in create_order.update_stageUpdate stagePUTUpdates a stage: its name, default probability or role restrictions.
Phone call, 4 operations
create_phone_callCreate phone callPOSTLogs a phone call made or received outside Upsales. user, contact, client, date and phoneNumber are required.get_phone_callGet phone callGETReturns one logged phone call by id with its user, contact, company, number, date, duration and recording URL.list_phone_callsList phone callsGETLists logged phone calls (from a telephony integration): user, contact, company, number, date, duration and recording URL.update_phone_callUpdate phone callPUTUpdates a logged phone call: duration, recording URL, external id and the other fields sent.
User, 3 operations
get_userGet userGETReturns one user by id: email, name, title, phones, role, whether active and administrator, and custom field values.list_user_custom_fieldsList user custom fieldsGETLists the custom fields defined on users: id, name, data type, default values and alias. Use a field id in custom values ({fieldId, value}) and custom filters.list_usersList usersGETLists the users of the Upsales account (people with access, not contacts) with their ids, to assign records to.
Product category, 2 operations
get_product_categoryGet product categoryGETReturns one product category by id with its parent, sort order and role restrictions.list_product_categoriesList product categoriesGETLists product categories, with parentId for the category tree.
Client category type, 1 operation
list_company_category_typesList company category typesGETLists the extra company category types, the groups that company category values belong to.
Clientcategory, 1 operation
list_company_categoriesList company categoriesGETLists the company category values (A customer, Prospect...) with the category type each belongs to (0 is the default type).
Contact category type, 1 operation
list_contact_category_typesList contact category typesGETLists the extra contact category types, the groups that contact category values belong to.
Contactcategory, 1 operation
list_contact_categoriesList contact categoriesGETLists the contact category values with the category type each belongs to (0 is the default type).
Orderrow, 1 operation
list_order_row_custom_fieldsList order row custom fieldsGETLists the custom fields defined on order rows: id, name, data type, default values and alias. Use a field id in custom values ({fieldId, value}) and custom filters.
Price list, 1 operation
list_price_listsList price listsGETLists price lists (Advanced Order Logic addon): name, code, whether active and which one is the default.
Self, 1 operation
get_selfGet selfGETReturns the API user and its Upsales account: user id, email, language, account name and licences, and which products and features the account has.
Social event, 1 operation
list_eventsList eventsGETLists Upsales Events (B2B events and webinars) in any state: name, dates, location, venue, scores and whether still a draft. Filter draft=0 to leave drafts out.
Todo type, 1 operation
list_activity_typesList activity typesGETReturns the two task types with their ids: TODO and PHONE_CALL. Pass one of those ids as activityType in create_activity.
Use Upsales from Claude Code, Cursor or Codex
Connect Upsales in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Upsales 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 Upsales
- Create your workspace
Sign up free. Nothing to install.
- Connect Upsales once
Add your Upsales 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.
Upsales integration FAQ
What can you do with the Upsales integration?
LiveContext exposes 75 operations on Upsales, covering contact, account, activity and agreement.
