curl --request POST \
--url https://api.aisa.one/apis/v1/apollo/tasks/bulk_create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_ids": [
"66e34b81740c50074e3d1bd4",
"66e34b81740c50074e3d1bd5",
"66e34b81740c50074e3d1bd6"
],
"due_at": "2025-02-15T10:00:00Z",
"status": "scheduled",
"type": "call",
"user_id": "66302798d03b9601c7934ebf"
}
'import requests
url = "https://api.aisa.one/apis/v1/apollo/tasks/bulk_create"
payload = {
"contact_ids": ["66e34b81740c50074e3d1bd4", "66e34b81740c50074e3d1bd5", "66e34b81740c50074e3d1bd6"],
"due_at": "2025-02-15T10:00:00Z",
"status": "scheduled",
"type": "call",
"user_id": "66302798d03b9601c7934ebf"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_ids: [
'66e34b81740c50074e3d1bd4',
'66e34b81740c50074e3d1bd5',
'66e34b81740c50074e3d1bd6'
],
due_at: '2025-02-15T10:00:00Z',
status: 'scheduled',
type: 'call',
user_id: '66302798d03b9601c7934ebf'
})
};
fetch('https://api.aisa.one/apis/v1/apollo/tasks/bulk_create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/apollo/tasks/bulk_create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'contact_ids' => [
'66e34b81740c50074e3d1bd4',
'66e34b81740c50074e3d1bd5',
'66e34b81740c50074e3d1bd6'
],
'due_at' => '2025-02-15T10:00:00Z',
'status' => 'scheduled',
'type' => 'call',
'user_id' => '66302798d03b9601c7934ebf'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/apollo/tasks/bulk_create"
payload := strings.NewReader("{\n \"contact_ids\": [\n \"66e34b81740c50074e3d1bd4\",\n \"66e34b81740c50074e3d1bd5\",\n \"66e34b81740c50074e3d1bd6\"\n ],\n \"due_at\": \"2025-02-15T10:00:00Z\",\n \"status\": \"scheduled\",\n \"type\": \"call\",\n \"user_id\": \"66302798d03b9601c7934ebf\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aisa.one/apis/v1/apollo/tasks/bulk_create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact_ids\": [\n \"66e34b81740c50074e3d1bd4\",\n \"66e34b81740c50074e3d1bd5\",\n \"66e34b81740c50074e3d1bd6\"\n ],\n \"due_at\": \"2025-02-15T10:00:00Z\",\n \"status\": \"scheduled\",\n \"type\": \"call\",\n \"user_id\": \"66302798d03b9601c7934ebf\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/apollo/tasks/bulk_create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contact_ids\": [\n \"66e34b81740c50074e3d1bd4\",\n \"66e34b81740c50074e3d1bd5\",\n \"66e34b81740c50074e3d1bd6\"\n ],\n \"due_at\": \"2025-02-15T10:00:00Z\",\n \"status\": \"scheduled\",\n \"type\": \"call\",\n \"user_id\": \"66302798d03b9601c7934ebf\"\n}"
response = http.request(request)
puts response.read_body{
"tasks": [
"<string>"
]
}Bulk Create Tasks
Create several tasks in one call.
curl --request POST \
--url https://api.aisa.one/apis/v1/apollo/tasks/bulk_create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_ids": [
"66e34b81740c50074e3d1bd4",
"66e34b81740c50074e3d1bd5",
"66e34b81740c50074e3d1bd6"
],
"due_at": "2025-02-15T10:00:00Z",
"status": "scheduled",
"type": "call",
"user_id": "66302798d03b9601c7934ebf"
}
'import requests
url = "https://api.aisa.one/apis/v1/apollo/tasks/bulk_create"
payload = {
"contact_ids": ["66e34b81740c50074e3d1bd4", "66e34b81740c50074e3d1bd5", "66e34b81740c50074e3d1bd6"],
"due_at": "2025-02-15T10:00:00Z",
"status": "scheduled",
"type": "call",
"user_id": "66302798d03b9601c7934ebf"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_ids: [
'66e34b81740c50074e3d1bd4',
'66e34b81740c50074e3d1bd5',
'66e34b81740c50074e3d1bd6'
],
due_at: '2025-02-15T10:00:00Z',
status: 'scheduled',
type: 'call',
user_id: '66302798d03b9601c7934ebf'
})
};
fetch('https://api.aisa.one/apis/v1/apollo/tasks/bulk_create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/apollo/tasks/bulk_create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'contact_ids' => [
'66e34b81740c50074e3d1bd4',
'66e34b81740c50074e3d1bd5',
'66e34b81740c50074e3d1bd6'
],
'due_at' => '2025-02-15T10:00:00Z',
'status' => 'scheduled',
'type' => 'call',
'user_id' => '66302798d03b9601c7934ebf'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/apollo/tasks/bulk_create"
payload := strings.NewReader("{\n \"contact_ids\": [\n \"66e34b81740c50074e3d1bd4\",\n \"66e34b81740c50074e3d1bd5\",\n \"66e34b81740c50074e3d1bd6\"\n ],\n \"due_at\": \"2025-02-15T10:00:00Z\",\n \"status\": \"scheduled\",\n \"type\": \"call\",\n \"user_id\": \"66302798d03b9601c7934ebf\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aisa.one/apis/v1/apollo/tasks/bulk_create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact_ids\": [\n \"66e34b81740c50074e3d1bd4\",\n \"66e34b81740c50074e3d1bd5\",\n \"66e34b81740c50074e3d1bd6\"\n ],\n \"due_at\": \"2025-02-15T10:00:00Z\",\n \"status\": \"scheduled\",\n \"type\": \"call\",\n \"user_id\": \"66302798d03b9601c7934ebf\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/apollo/tasks/bulk_create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contact_ids\": [\n \"66e34b81740c50074e3d1bd4\",\n \"66e34b81740c50074e3d1bd5\",\n \"66e34b81740c50074e3d1bd6\"\n ],\n \"due_at\": \"2025-02-15T10:00:00Z\",\n \"status\": \"scheduled\",\n \"type\": \"call\",\n \"user_id\": \"66302798d03b9601c7934ebf\"\n}"
response = http.request(request)
puts response.read_body{
"tasks": [
"<string>"
]
}https://mcp.aisa.one/mcp — Claude
Code, Codex, Cursor, VS Code and the rest. Authorization is OAuth: the client
opens a browser, you click Allow once, and there is no key to paste. Your
agent then reaches every endpoint through a few meta tools: search,
list_categories, get_details and batch_quote are free, batch_use is
billed per call. Setup per client is in
Connect via MCP; the live tool list and what each call
costs are on aisa.one/mcp.Request contract
- Method and path: POST /apis/v1/apollo/tasks/bulk_create
- Availability: enabled
- Request URL template: https://api.aisa.one/apis/v1/apollo/tasks/bulk_create
- Runtime facts: 9ab7612cf2d53be794cbf1d65d4a257f986ac6783e53c7c3a5d868e4593061c3
{
"operationId": "post_apollo_tasks_bulk_create",
"method": "POST",
"path": "/apis/v1/apollo/tasks/bulk_create",
"servers": [
{
"url": "https://api.aisa.one"
}
],
"parameters": [],
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"content": {
"application/json": {
"examples": {
"Create call tasks for multiple contacts": {
"value": {
"contact_ids": [
"66e34b81740c50074e3d1bd4",
"66e34b81740c50074e3d1bd5",
"66e34b81740c50074e3d1bd6"
],
"due_at": "2025-02-15T10:00:00Z",
"note": "Follow up on demo request.",
"priority": "high",
"status": "scheduled",
"type": "call",
"user_id": "66302798d03b9601c7934ebf"
}
}
},
"schema": {
"properties": {
"contact_ids": {
"description": "The Apollo IDs for the contacts that you want to be on the receiving end of the action. <br><br>If you add multiple contact IDs, individual tasks will be created for each of the contacts using the same task type, due date, and other details. <br><br>To find contact IDs, call the <a href=\"https://docs.apollo.io/reference/search-for-contacts\" target=\"_blank\">search for contacts endpoint</a> and identify the `id` value for the contact. <br><br>Example: `66e34b81740c50074e3d1bd4`",
"items": {
"type": "string"
},
"type": "array"
},
"due_at": {
"description": "The full date and time when the task will be due. <br><br>Your entry should adhere to the <a href=\"https://www.rfc-editor.org/rfc/rfc3339#section-5.6\" target=\"_blank\">ISO 8601 date-time format</a>. Apollo uses Greenwich Mean Time (GMT) by default. If you do not account for time zone differences, you could add a task due date that falls on a different day than you intended. <br><br>The value you enter can either adhere to GMT, or you can adjust the time manually by specifying in hours and minutes how much you want to offset GMT.<br><br>Example: `2025-02-15T08:10:30Z`; `2025-03-25T10:15:30+05:00`",
"format": "date-time",
"type": "string"
},
"note": {
"description": "Add a description for the task. This should be a human-readable message. <br><br>This parameter is not required, but it is recommended as it provides the task owner with more context on the action they need to take. <br><br>Example: `This contact expressed interest in the Sequences feature specifically. Be prepared to discuss.`",
"type": "string"
},
"priority": {
"default": "medium",
"description": "Assign a priority to the task you are creating: <ul> <li> `high` </li> <li> `medium` </li> <li> `low` </li> </ul>",
"type": "string"
},
"status": {
"description": "The status of the task being created. For future-facing tasks, you should use the `scheduled` status. <br><br>For tasks that are already completed, you can use `completed` or `skipped`. <br><br>Example: `scheduled`",
"type": "string"
},
"type": {
"description": "Set the task to be 1 of the following task types. This enables the task owner to know the type of action they need to take. <ul> <li> `call`: Call the contacts. </li> <li> `outreach_manual_email`: Email the contacts. </li> <li> `linkedin_step_connect`: Send a LinkedIn invitation to connect with the contacts. </li> <li> `linkedin_step_message`: Send a direct message to the contacts' LinkedIn profiles. </li> <li> `linkedin_step_view_profile`: View the contacts' LinkedIn profiles. </li> <li> `linkedin_step_interact_post`: Interact with the contacts' recent LinkedIn posts. </li> <li> `action_item`: Take generic action for the contacts. If you use this task type, Apollo recommends using the `note` parameter too. </li> </ul>",
"type": "string"
},
"user_id": {
"description": "The ID for the task owner within your team's Apollo account. This is the user that will take action on the contacts. <br><br>Use the <a href=\"https://docs.apollo.io/reference/get-a-list-of-users\" target=\"_blank\">get a list of users endpoint</a> to retrieve IDs for all of the users within your Apollo account. <br><br>Example: `66302798d03b9601c7934ebf`",
"type": "string"
}
},
"required": [
"user_id",
"contact_ids",
"type",
"status",
"due_at"
],
"type": "object"
}
}
},
"required": true
},
"x-aisa-status": "enabled",
"x-aisa-pricing": {
"cost_contract": "fixed_success",
"customer_pricing": "fixed_success",
"default_request_estimate_usd": 0.012,
"estimate_source": "profile_seed",
"evidence_source": "request_snapshot"
},
"components": {
"securitySchemes": {
"bearerAuth": {
"scheme": "bearer",
"type": "http"
}
}
}
}
Cost and request rules
Published reference price: $0.012 USD per successful request. Account-specific pricing and final settlement may differ. Published reference values are not an account-specific quote or a settled charge. For endpoints supporting X-AISA-Cost-Mode: quote, obtain a free quote for your exact request before execution; reconcile the settled cost with response metadata and Usage Logs. USD amounts use 1,000,000 integer micro-USD per dollar.- Default request reference estimate (USD): 0.012
- Cost contract: fixed_success
- Settlement evidence source: request_snapshot
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The Apollo IDs for the contacts that you want to be on the receiving end of the action.
If you add multiple contact IDs, individual tasks will be created for each of the contacts using the same task type, due date, and other details.
To find contact IDs, call the search for contacts endpoint and identify the id value for the contact.
Example: 66e34b81740c50074e3d1bd4
The full date and time when the task will be due.
Your entry should adhere to the ISO 8601 date-time format. Apollo uses Greenwich Mean Time (GMT) by default. If you do not account for time zone differences, you could add a task due date that falls on a different day than you intended.
The value you enter can either adhere to GMT, or you can adjust the time manually by specifying in hours and minutes how much you want to offset GMT.
Example: 2025-02-15T08:10:30Z; 2025-03-25T10:15:30+05:00
The status of the task being created. For future-facing tasks, you should use the scheduled status.
For tasks that are already completed, you can use completed or skipped.
Example: scheduled
Set the task to be 1 of the following task types. This enables the task owner to know the type of action they need to take.
-
call: Call the contacts. -
outreach_manual_email: Email the contacts. -
linkedin_step_connect: Send a LinkedIn invitation to connect with the contacts. -
linkedin_step_message: Send a direct message to the contacts' LinkedIn profiles. -
linkedin_step_view_profile: View the contacts' LinkedIn profiles. -
linkedin_step_interact_post: Interact with the contacts' recent LinkedIn posts. -
action_item: Take generic action for the contacts. If you use this task type, Apollo recommends using thenoteparameter too.
The ID for the task owner within your team's Apollo account. This is the user that will take action on the contacts.
Use the get a list of users endpoint to retrieve IDs for all of the users within your Apollo account.
Example: 66302798d03b9601c7934ebf
Add a description for the task. This should be a human-readable message.
This parameter is not required, but it is recommended as it provides the task owner with more context on the action they need to take.
Example: This contact expressed interest in the Sequences feature specifically. Be prepared to discuss.
Assign a priority to the task you are creating:
-
high -
medium -
low
Response
Successful response
Created tasks (when returned).