Salesforce Marketing Cloud

Connect your AI agents to Salesforce Marketing Cloud.

Authentication: OAuth or server-to-server credentials. See Magic Link for the runtime auth flow, or Application credentials to bring your own OAuth app.

Sample use cases

  • Find the contact record for [email protected] and list the data extensions she appears in.
  • Upsert this week’s webinar registrants into the Webinar Attendees data extension.
  • Run the Nightly Lead Sync automation and confirm it completed.

Available Tools

validate_email_address

Check whether an email address is valid before sending: syntax, whether the domain accepts mail (MX), and known-bad a…

list_assets

List Content Builder assets (emails, content blocks, images, templates) with an optional simple $filter (e.g. “assetT…

search_assets

Search Content Builder assets with an advanced query: nested AND/OR operand trees, multiple sort clauses, and a field…

get_asset

Get one Content Builder asset by ID, including its full content, views, data, and meta. Use list_assets or search_ass…

create_asset

Create a Content Builder asset. Requires name and asset_type (e.g. htmlemail=208, htmlblock=197, png=28). Emails take…

update_asset

Update a Content Builder asset (partial PATCH): name, description, folder, content, views, data, meta, channels, or a…

delete_asset

Delete a Content Builder asset by ID. Use list_assets or search_assets to find the asset ID.

list_asset_categories

List Content Builder categories (folders) with optional filter(e.g.′parentIdeq516016′),filter (e.g. 'parentId eq 516016'), orderBy, and scope (‘Sh…

create_asset_category

Create a Content Builder folder under a parent folder. Requires name and parent_id; call list_asset_categories first …

update_asset_category

Rename or move a Content Builder folder (full PUT: name and parent_id are both required). Use list_asset_categories t…

delete_asset_category

Delete a Content Builder folder by ID. The folder must be empty: move or delete its assets and subfolders first. Use …

list_automations

List Automation Studio automations with page-number pagination (page_size up to 500), optionally sorted (order_by) an…

get_automation

Get one automation by ID, including its schedule, status, and steps with their activities. Use list_automations to fi…

run_automation

Run an automation once now, performing all of its activities (queries, imports, sends). Use list_automations to find …

list_folders

List Marketing Cloud folders of one type, e.g. category_type ‘dataextension’. Call this to get the category_id that c…

list_campaigns

List Marketing Cloud campaigns with optional $orderBy (e.g. ‘createdDate DESC’). Returns campaign IDs for get_campaig…

get_campaign

Get one campaign by ID. Use list_campaigns to find campaign IDs.

create_campaign

Create a campaign. Requires name; optional description, campaign_code, color (hex without ’#’), and favorite. Returns…

update_campaign

Update a campaign’s name, description, campaign_code, color, or favorite flag. Provide at least one field; fields you…

delete_campaign

Delete a campaign by ID. Use list_campaigns to find the campaign ID.

list_campaign_assets

List the assets (emails, journeys, …) associated with a campaign. Each item’s id is the association ID remove_cam…

add_campaign_asset

Associate one or more items with a campaign, e.g. asset_type ‘EMAIL’ with item_ids from list_assets. Use list_campaig…

remove_campaign_asset

Remove an asset association from a campaign. campaign_asset_id is the association id from list_campaign_assets (or …

search_contacts_by_email

Find contacts by email address (1-100 addresses). Returns the contact keys that use each address, for update_contact,…

create_contact

Create a contact with attribute values grouped by attribute set (most accounts require the ‘Email Addresses’ set). Ca…

update_contact

Update an existing contact’s attribute values, grouped by attribute set. Use search_contacts_by_email to find the con…

delete_contacts

Delete contacts by contact key. Asynchronous: SFMC deletes them after the account’s retention period. Returns operati…

get_contact_delete_status

Get the status of a contact delete operation started by delete_contacts. Pass the operation_id that delete_contacts r…

list_attribute_set_definitions

List Contact Builder attribute set definitions and their attributes, with page-number pagination. Call this before cr…

get_data_extension_rows

Read rows from a data extension by external key or ID (exactly one), with page-number pagination (page_size up to 250…

upsert_data_extension_rows

Insert or update up to 500 rows synchronously, matched on primary key columns. Use list_data_extensions for the exter…

upsert_data_extension_rows_async

Queue a large batch of rows for a data extension asynchronously. mode ‘upsert’ (default) inserts or updates by primar…

get_async_request_status

Get the processing status of an asynchronous data request (requestStatus, resultStatus, hasErrors). The request_id co…

get_async_request_results

Get per-row results (status, errorCode, message) of a completed asynchronous data request, with page-number paginatio…

list_data_extensions

List data extensions with page-number pagination (page, page_size; use page_info.next_page). The API requires categor…

get_data_extension

Get one data extension’s properties (name, key, folder, sendable settings, row count) by ID. Use list_data_extensions…

list_data_extension_fields

List a data extension’s fields (column names, types, lengths, primary keys, nullability). Call this before upserting …

create_data_extension

Create a data extension with at least one field. Set is_sendable with sendable_custom_object_field and sendable_subsc…

update_data_extension

Update a data extension’s name, description, sendable/testable flags, or retention settings. Pass at least one change…

delete_data_extension

Permanently delete a data extension and all its rows. Use list_data_extensions to find the ID. To remove only the row…

create_data_extension_field

Add one or more fields (columns) to an existing data extension. The change is applied asynchronously, so re-check wit…

update_data_extension_field

Change existing data extension fields (length, scale, nullability, default value), matched by name. Applied asynchron…

clear_data_extension

Delete ALL rows from a data extension, keeping its structure. This removes every row and cannot be undone. Use this t…

list_event_definitions

List Journey Builder event definitions (entry sources) with their id and eventDefinitionKey, optionally filtered by n…

get_event_definition

Get one event definition by event_definition_id or key (exactly one). Use list_event_definitions to find them.

create_event_definition

Create a journey entry event (e.g. type ‘APIEvent’) bound to a data extension. Use list_data_extensions for data_exte…

update_event_definition

Replace an event definition (full body: type, name, key, data extension). Call get_event_definition first and resend …

delete_event_definition

Delete an event definition. Journeys that use it as an entry source must be stopped or deleted first. Use list_event_…

list_journeys

List Journey Builder journeys (lean summaries: id, key, version, status). Filter by status, type, tag, version, or na…

get_journey

Get a journey’s full definition (triggers, activities, goals, exits) by journey_id or key (exactly one). Use list_jou…

create_journey

Create a journey from a Journey Spec (key, name, triggers, activities). An API entry trigger references an event defi…

update_journey

Replace a draft journey version’s full Journey Spec. Requires journey_id, key, version, and name; call get_journey fi…

delete_journey

Delete a journey, or one version with version_number. Running journeys must be stopped first with stop_journey. Use l…

publish_journey

Start publishing (activating) a journey version asynchronously. Returns a status_id; poll get_journey_publish_status …

get_journey_publish_status

Check the progress of a publish_journey request by its status_id. Returns status plus any validation errors and warni…

stop_journey

Stop a running journey version; contacts exit and it cannot be restarted (inverse of publish_journey). Use list_journ…

pause_journey

Pause a running journey version (contacts hold in place). Set all_versions to pause every version. Undo with resume_j…

resume_journey

Resume a paused journey version (inverse of pause_journey). Set all_versions to resume every version. Use list_journe…

get_journey_audit_log

Get a journey’s audit log (who created, modified, published, unpublished, or deleted it), optionally filtered by acti…

fire_entry_event

Inject a contact into a published journey by firing its API entry event. Use list_event_definitions for event_definit…

remove_contacts_from_journey

Remove up to 50 contacts from journeys (inverse of fire_entry_event). Each entry needs a contact_key and the journey …

get_journey_exit_status

Check whether contacts removed with remove_contacts_from_journey have exited. Pass the same contact_key/definition_ke…

list_contact_journeys

List which journeys (key and version) the given contacts are currently in, plus contact keys that were not found. Use…

list_email_send_definitions

List transactional email send definitions with page-number pagination (page_size up to 100, the API maximum). Support…

get_email_send_definition

Get one transactional email send definition by its definition key, including its email asset, subscription settings, …

create_email_send_definition

Create a transactional email send definition that links a Content Builder email to a subscriber list. Call list_asset…

update_email_send_definition

Update a transactional email send definition: name, description, status (Active/Inactive), classification, email asse…

delete_email_send_definition

Delete a transactional email send definition by definition key. Messages can no longer be sent with it. To stop sendi…

send_transactional_email

Send a real transactional email to 1-500 recipients using an active send definition. Call list_email_send_definitions…

get_email_message_status

Get the send status of one transactional email message by message key (e.g. ‘TransactionalSendEvents.EmailSent’). Use…