Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/act-on-ucl-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Act On Ucl API
version: '2.0'
description: 'Operations tagged Ucl across 2 of this provider''s published API definitions: act-on-raw-body-api-openapi.yml, act-on-rest-api-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.actonsoftware.com
security:
- sec0: []
tags:
- name: Ucl
paths:
/ucl/v2/ucl/v2/{accountId}/import/contacts/{importDefinitionId}:
servers:
- url: https://api.actonsoftware.com
post:
summary: Import Contacts
description: Create one or more users for an account. Each user is sent as an element in a JSON array.
operationId: test-api
parameters:
- name: accountId
in: path
schema:
type: integer
format: int32
required: true
- name: importDefinitionId
in: path
schema:
type: integer
format: int32
required: true
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
RAW_BODY:
type: string
description: 'JSON object with the following required keys: userType, email, firstName, lastName, password.'
filter:
type: object
required:
- type
- expressionEvaluationType
properties:
type:
type: string
expressionEvaluationType:
type: string
enum:
- AND
- OR
- CUSTOM
customBooleanExpression:
type: string
default: 'NULL'
expressions:
type: array
items:
properties:
type:
type: string
enum:
- profile
- system
id:
type: string
field:
type: string
condition:
type: object
properties:
type:
type: string
comparison:
type: string
values:
type: array
items:
type: string
type: object
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"status\": \"success\",\n \"keyPoint\": \"blank\"\n}"
schema:
type: object
properties:
status:
type: string
example: success
keyPoint:
type: string
example: blank
'400':
description: '400'
content:
text/plain:
examples:
Result:
value: '{boo}'
deprecated: false
x-readme:
code-samples:
- language: curl
code: "curl --location 'https://api.actonsoftware.com/api/1/user' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer TOKEN_HERE' \\\n--data-raw '[\n {\n \"userType\": \"Marketing\",\n \"email\": \"name3@act-on.net\",\n \"firstName\": \"fName1\",\n \"lastName\": \"Surname1\",\n \"password\": \"pwxxx123\",\n \"title\": \"Marketing Manager\",\n \"phoneNumber\": \"111-111-1111\",\n \"mobileNumber\": \"111-111-1111\",\n \"faxNumber\": \"111-111-1111\",\n \"timeZone\": \"PT\",\n \"sendEmailConfirmation\": \"Y\"\n }\n]'"
name: Example 1
samples-languages:
- curl
tags:
- Ucl
/ucl/v2/{accountId}/import/contacts/{importDefinitionId}:
servers:
- url: https://api.actonsoftware.com
post:
summary: Import Contacts
description: ''
operationId: import-contacts
parameters:
- name: accountId
in: path
description: accountId
schema:
type: integer
format: int32
required: true
- name: importDefinitionId
in: path
description: The id of the import definition
schema:
type: integer
format: int32
required: true
- name: cleanupImportDefinition
in: query
description: Whether to delete the import definition after the import
schema:
type: boolean
default: false
requestBody:
content:
application/json:
schema:
type: object
properties:
file:
type: string
description: CSV with contact data matching the provided import definition. Limit of 200MB.
format: binary
responses:
'200':
description: '200'
content:
text/plain:
examples:
Successfully Uploaded:
value: "{\n \"data\": {\n \"accountId\": \"12345\",\n \"importId\": \"1longstringhere\",\n \"importDefinitionId\": 987654,\n \"importStatus\": \"RUNNING\",\n \"errorMessage\": null,\n \"submittedCount\": 0,\n \"unsubmittedCount\": 0,\n \"createdCount\": 0,\n \"updatedCount\": 0,\n \"failedCount\": 0,\n \"rejectedCount\": 0\n }\n}"
schema:
type: object
properties:
data:
type: object
properties:
accountId:
type: string
example: '12345'
importId:
type: string
example: 1longstringhere
importDefinitionId:
type: integer
example: 987654
default: 0
importStatus:
type: string
example: RUNNING
errorMessage: {}
submittedCount:
type: integer
example: 0
default: 0
unsubmittedCount:
type: integer
example: 0
default: 0
createdCount:
type: integer
example: 0
default: 0
updatedCount:
type: integer
example: 0
default: 0
failedCount:
type: integer
example: 0
default: 0
rejectedCount:
type: integer
example: 0
default: 0
'400':
description: '400'
content:
application/json:
examples:
Column Not Found:
value: "{\n \"errors\": [\n \"CSV Column(s) was not found: MissingColumnName. All csvColumns need to be on the CSV headers prior to import.\"\n ]\n}"
schema:
type: object
properties:
errors:
type: array
items:
type: string
example: 'CSV Column(s) was not found: MissingColumnName. All csvColumns need to be on the CSV headers prior to import.'
'401':
description: '401'
content:
text/plain:
examples:
Result:
value: ''
'403':
description: '403'
content:
text/plain:
examples:
Error processing file:
value: ''
'413':
description: '413'
content:
text/plain:
examples:
Result:
value: File size exceeds the maximum limit of 200MB.
'415':
description: '415'
content:
text/plain:
examples:
Result:
value: ''
'500':
description: '500'
content:
text/plain:
examples:
Result:
value: ''
deprecated: false
tags:
- Ucl
/ucl/v2/{accountId}/import/definition:
servers:
- url: https://api.actonsoftware.com
get:
summary: Get Import Definitions
description: ''
operationId: get-import-definitions
parameters:
- name: accountId
in: path
description: The Act-On account Id for this request
schema:
type: string
required: true
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'401':
description: '401'
content:
text/plain:
examples:
Result:
value: ''
'415':
description: '415'
content:
text/plain:
examples:
Result:
value: ''
'500':
description: '500'
content:
text/plain:
examples:
Result:
value: ''
deprecated: false
tags:
- Ucl
post:
summary: Create an Import Definition
description: ''
operationId: create-an-import-definition
parameters:
- name: accountId
in: path
description: The Act-On account Id for this request
schema:
type: integer
format: int32
required: true
requestBody:
content:
application/json:
schema:
type: object
required:
- accountId
- importDefinitionName
- mappings
- mergeStrategy
properties:
accountId:
type: string
description: The Act-On account ID
delimiter:
type: string
description: An optional attribute to specify CSV delimiter (acknowledging that if you use something other than a comma, the file is no longer a CSV...)
default: COMMA
enum:
- COMMA
- SEMI_COLON
- TAB
importDefinitionName:
type: string
description: The name of the Import Definition
importSegmentIds:
type: array
description: An optional list of segments for the imported records to join
items:
type: string
mappings:
type: array
description: Field mappings for the import
items:
properties:
csvColumn:
type: string
description: Header value in the source file
actonColumn:
type: string
description: Target field name in Act-On
overwriteExistingValue:
type: boolean
description: Should an existing value in Act-On be replaced, including with a NULL/Empty string from the source file.
dataFormat:
type: string
description: Leave blank or omit for most field types. Required for Date. Provide the format of the date such as "yyyy-MM-dd" (Follow LDML patterns.)
type: object
mergeStrategy:
type: string
description: The merge strategy to use for the import
default: EMAIL
enum:
- EMAIL
- EXTERNAL_ID
objectType:
type: string
description: Required value for EXTERNAL_ID mergeStrategy
quote:
type: string
description: An optional attribute to specify how text strings are identified. (QUOTE is for "double quote". SIMPLE_QUOTE is a 'single quote'.)
default: QUOTE
enum:
- QUOTE
- SIMPLE_QUOTE
responses:
'200':
description: '200'
content:
application/json:
examples:
Success - External ID:
value: "{\n \"data\": {\n \"accountId\": \"12345\",\n \"importDefinitionId\": 987654,\n \"importDefinitionName\": \"Definition Name\",\n \"mergeStrategy\": \"EXTERNAL_ID\",\n \"objectType\": \"Record Type\",\n \"mappings\": [\n {\n \"csvColumn\": \"email\",\n \"actonColumn\": \"E-mail Address\",\n \"overwriteExistingValue\": true,\n \"dataFormat\": null\n },\n {\n \"csvColumn\": \"unique_contact_id\",\n \"actonColumn\": \"ExternalId\",\n \"overwriteExistingValue\": true,\n \"dataFormat\": null\n },\n {\n \"csvColumn\": \"First Name\",\n \"actonColumn\": \"First Name\",\n \"overwriteExistingValue\": true,\n \"dataFormat\": null\n },\n {\n \"csvColumn\": \"Last Name\",\n \"actonColumn\": \"Last Name\",\n \"overwriteExistingValue\": true,\n \"dataFormat\": null\n }\n ],\n \"importSegmentIds\": null,\n \"delimiter\": \"COMMA\",\n \"quote\": \"QUOTE\"\n }\n}"
schema:
type: object
properties:
data:
type: object
properties:
accountId:
type: string
example: '12345'
importDefinitionId:
type: integer
example: 987654
default: 0
importDefinitionName:
type: string
example: Definition Name
mergeStrategy:
type: string
example: EXTERNAL_ID
objectType:
type: string
example: Record Type
mappings:
type: array
items:
type: object
properties:
csvColumn:
type: string
example: email
actonColumn:
type: string
example: E-mail Address
overwriteExistingValue:
type: boolean
example: true
default: true
dataFormat: {}
importSegmentIds: {}
delimiter:
type: string
example: COMMA
quote:
type: string
example: QUOTE
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'401':
description: '401'
content:
text/plain:
examples:
Result:
value: ''
'415':
description: '415'
content:
text/plain:
examples:
Result:
value: ''
'500':
description: '500'
content:
text/plain:
examples:
Result:
value: ''
deprecated: false
tags:
- Ucl
/ucl/v2/{accountId}/import/definition/{importDefinitionId}:
servers:
- url: https://api.actonsoftware.com
get:
summary: Get Import Definition by Id
description: ''
operationId: get-import-definition-by-id
parameters:
- name: accountId
in: path
description: The Act-On account Id for this request
schema:
type: string
required: true
- name: importDefinitionId
in: path
description: The Id of the import definition to retrieve
schema:
type: string
required: true
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'401':
description: '401'
content:
text/plain:
examples:
Result:
value: ''
'404':
description: '404'
content:
text/plain:
examples:
Result:
value: ''
'415':
description: '415'
content:
text/plain:
examples:
Result:
value: ''
'500':
description: '500'
content:
text/plain:
examples:
Result:
value: ''
deprecated: false
tags:
- Ucl
put:
summary: Update an Import Definition
description: ''
operationId: update-an-import-definition
parameters:
- name: accountId
in: path
description: The Act-On account Id for this request
schema:
type: integer
format: int32
required: true
- name: importDefinitionId
in: path
description: The Id of the import definition to update
schema:
type: string
required: true
requestBody:
content:
application/json:
schema:
type: object
required:
- accountId
- importDefinitionName
- mappings
- mergeStrategy
properties:
accountId:
type: string
description: The Act-On account ID
delimiter:
type: string
description: An optional attribute to specify CSV delimiter.
default: COMMA
importDefinitionId:
type: integer
description: The id of the Import Definition
format: int32
importDefinitionName:
type: string
description: The name of the Import Definition
importSegmentIds:
type: array
description: An optional list of segments for the imported records to join
items:
type: string
mappings:
type: array
description: Field mappings for the import
mergeStrategy:
type: string
description: The merge strategy to use for the import
default: EMAIL
objectType:
type: string
description: Required value for EXTERNAL_ID mergeStrategy
quote:
type: string
description: An optional attribute to specify CSV delimiter.
default: QUOTE
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
tags:
- Ucl
delete:
summary: Delete Import Definition by Id
description: ''
operationId: delete-import-definition-by-id
parameters:
- name: accountId
in: path
description: The Act-On account Id for this request
schema:
type: string
required: true
- name: importDefinitionId
in: path
description: The Id of the import definition to delete
schema:
type: string
required: true
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'401':
description: '401'
content:
text/plain:
examples:
Result:
value: ''
'415':
description: '415'
content:
text/plain:
examples:
Result:
value: ''
'500':
description: '500'
content:
text/plain:
examples:
Result:
value: ''
deprecated: false
tags:
- Ucl
/ucl/v2/{accountId}/import/status/{importId}:
servers:
- url: https://api.actonsoftware.com
get:
summary: Get Import status
description: ''
operationId: get-import-status
parameters:
- name: accountId
in: path
description: The Act-On account Id for this request
schema:
type: string
required: true
- name: importId
in: path
description: The Id of the import to retrieve
schema:
type: string
required: true
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"data\": {\n \"accountId\": \"12345\",\n \"importId\": \"1longstringhere\",\n \"importDefinitionId\": 987654,\n \"importStatus\": \"COMPLETED\",\n \"errorMessage\": null,\n \"submittedCount\": 1000,\n \"unsubmittedCount\": 0,\n \"createdCount\": 1000,\n \"updatedCount\": 0,\n \"failedCount\": 0,\n \"rejectedCount\": 0\n }\n}"
schema:
type: object
properties:
data:
type: object
properties:
accountId:
type: string
example: '12345'
importId:
type: string
example: 1longstringhere
importDefinitionId:
type: integer
example: 987654
default: 0
importStatus:
type: string
example: COMPLETED
errorMessage: {}
submittedCount:
type: integer
example: 1000
default: 0
unsubmittedCount:
type: integer
example: 0
default: 0
createdCount:
type: integer
example: 1000
default: 0
updatedCount:
type: integer
example: 0
default: 0
failedCount:
type: integer
example: 0
default: 0
rejectedCount:
type: integer
example: 0
default: 0
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'401':
description: '401'
content:
text/plain:
examples:
Result:
value: ''
'415':
description: '415'
content:
text/plain:
examples:
Result:
value: ''
'500':
description: '500'
content:
text/plain:
examples:
Result:
value: ''
deprecated: false
tags:
- Ucl
/ucl/v2/{accountId}/contact/:
servers:
- url: https://api.actonsoftware.com
get:
summary: Get contacts from the Act-On Contacts List
description: ''
operationId: get-contacts-from-the-act-on-contacts-list
parameters:
- name: accountId
in: path
description: The Act-On account Id for this request
schema:
type: string
required: true
- name: createdAfter
in: query
description: 'Optional filter for retrieving records created after the specified timestamp in seconds <p>Use Example Value: Unix Timestamp in seconds</p>'
schema:
type: string
- name: createdBefore
in: query
description: 'Optional filter for retrieving records created before the specified timestamp in seconds <p>Use Example Value: Unix Timestamp in seconds</p>'
schema:
type: string
- name: page
in: query
description: The page number to retrieve
schema:
type: integer
format: int32
default: 0
- name: pageSize
in: query
description: The number of records to retrieve per page
schema:
type: integer
format: int32
default: 50
- name: updatedAfter
in: query
description: 'Optional filter for retrieving records updated after the specified timestamp in seconds <p>Use Example Value: Unix Timestamp in seconds</p>'
schema:
type: string
- name: updatedBefore
in: query
description: 'Optional filter for retrieving records updated before the specified timestamp in seconds <p>Use Example Value: Unix Timestamp in seconds</p>'
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'406':
description: '406'
content:
text/plain:
examples:
Result:
value: ''
'415':
description: '415'
content:
text/plain:
examples:
Result:
value: ''
deprecated: false
tags:
- Ucl
post:
summary: Add a single contact to the Act-On Contacts List
description: ''
operationId: add-a-single-contact-to-the-act-on-contacts-list
parameters:
- name: accountId
in: path
description: The Act-On account Id for this request
schema:
type: string
required: true
- name: createContactMethod
in: query
description: The method used for creating a new contact
required: true
schema:
type: string
enum:
- EMAIL
- EXTERNAL_ID
requestBody:
content:
application/json:
schema:
type: object
properties:
actonPrimaryScore:
type: string
description: The contact's Act-On primary score
businessCity:
type: string
description: The contact's business city
businessCountry:
type: string
description: The contact's business country
businessFax:
type: string
description: The contact's business fax number
businessPhone:
type: string
description: The contact's business phone number
businessState:
type: string
description: The contact's business state
businessStreet:
type: string
description: The contact's business street address
businessWebsite:
type: string
description: The contact's business website
businessZip:
type: string
description: The contact's business zip code
company:
type: string
description: The contact's company name
createdDate:
type: string
description: The contact's created date
customFields:
type: object
description: Custom field data by column index
properties: {}
dateOfBirth:
type: string
description: The contact's Act-On date of birth in format YYY-MM-DD
department:
type: string
description: The contact's department
email:
type: string
description: The contact's email address
externalId:
type: string
description: The external system id of the contact
fir
# --- truncated at 32 KB (122 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/act-on/refs/heads/main/openapi/act-on-ucl-api-openapi.yml