This process will be divided into two sections;
Pulling Text with API calls
Pulling media from Actimo via Pre-signed Cookies
You will need to have an API key provided by Actimo in order to complete the steps in this article. Reach out to your CSM or Actimo Support if you do not have one or if you are unsure of what your API key is.
In these examples, I will be using the tool Postman for making API calls, but it should work the same on any tool. Also, I will make reference to Python & Windows PowerShell for scripting in order to pull multiple media files at the same time.
Pulling Text with API calls
In order to pull text from messages with API calls, we can first go to our Actimo List of API calls which can be found here.
We will be making an API GET Call which will simply pull content from your platform.
Navigate to the messages section and find Get messages by ID. We can then select the drop down arrow on the right hand side to expand it.
Once expanded, select Try It Out and proceed to fill in your API key and the message ID from where you want to pull the content, followed by execute. You will then receive an API endpoint which can be seen at the bottom of the screenshot below:
Your generated API endpoint will look something like this:
https://app.actimo.com/api/v1/messages/[messageID]
[You will need to add app to the endpoint like so: https://app.actimo...]
Copy this endpoint. You will need it to make the GET API call.
Within the tool you are using to make API calls, add your API key to the appropriate field and then add your API endpoint as a GET call.
In the example below, I have added my API key into the authorization field and I have added my API endpoint to the API Call text box specifying it is a GET call:
Once done, select Send or Send & Download or its equivalent on the tool you are using.
You should receive the entire JSON breakdown of the message including text and media links.
Important Note: The next section will explain how to access media links as they cannot be accessed directly using the links in the API response. They are hosted in AWS and require pre-signed cookies in order to access them.
If you are not receiving the 200 OK successful API call response:
Wrong URL / path
Typos in the host or path (
/api/v1/messagevs/api/v1/messages).Using the wrong domain (
appl.actimo.cominstead ofapp.actimo.com), which often gives 403/404.
Missing or bad authentication
No API key / bearer token / cookie where one is required → 401 Unauthorized.
Token expired or malformed → 401/403.
Insufficient permissions
Auth is valid, but your user/key doesn’t have access to that resource (e.g. wrong workspace/client) → 403 Forbidden.
Resource doesn’t exist or wrong ID
Message/contact/file ID is wrong, deleted, or belongs to another tenant → 404 Not Found.
Accessing Media via Pre-Signed Cookies
When pulling the content from messages using a GET call as described above, you will often see media links included. Trying to access those URLs will give you an access denied error. This is because media files in Actimo are stored within AWS S3 and are behind an extra layer of security.
In order to gain access to these files, we will need to use Pre-Signed Cookies.
In order to use pre-signed cookies, you will need to first sign-in to your platform as an Admin or Editor.
GET Media From Individual Messages
As described in the previous section, the media links will appear in the API response when making the specified GET call to a particular message ID.
Search for the PNG (or JPEG etc) image link in the response, which looks like the link below (each x will be replaced by numbers and letters). Ensure to copy it.
Now, we need to generate a pre-signed cookie in order to make an API call and access this link.
Sign into your Actimo Editor and go to the message ID you have been using in the steps above. Right click anywhere on the screen and click Inspect:
3 important steps now:
Select the Network tab.
Toggle on Disable Cache
Type cloud into the search bar.
Nothing will appear at first, so we need to then refresh the webpage as normal:
Now we should see all images from this webpage appear in our Network tab. In the example below, I only have one image in this message. Single click the image you want to pull via API. (Double clicking here should download the image to your local device)
Once clicked, the Headers tab should be open by default. The first thing we see will be a media URL which will look similar to the one we copied in our original response.(https://a.actimo.com/cloudfront/clients/xxxx/xxxxxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx.png)
[The prefix will be slightly different: a.actimo instead of app.actimo. We should always make API calls with app.actimo]
Scroll down until you find Cookie.
Beside Cookie, you will have a very long key-code (I have only shown a small section of it in the example below for security reasons). This is your Pre-Signed Cookie. Copy all of it.
Now, within your API tool, you just need two things:
The Pre-Signed Cookie ("CloudFront-Key-Pair-Id=xxxxxxxxxxx; CloudFront-Signature...")
Make a GET call to the Image URL and add your Pre-Signed Cookie to your Header and press Send or Send & Download. You should get a 200 OK response with your image appearing in the response window (and downloading if specified):
Important Note: The Pre-Signed Cookies generated in the process above are temporary so it is always advisable to sign in and remain signed in every time you want to carry out these steps.
GET All Media
This process is a combination of the two previous sections: Pulling Text with API Calls & Get Media from Individual Messages. The process here is to make a GET API call to the media section of your platform and retrieve all media links from the response. Then, using a Pre-Signed Cookie as described in the section above, we can run a script that automatically downloads all those links, while we are signed into the app and the Pre-Signed Cookie is still active.
Firstly, using your API key, make a GET call to the following endpoint:
The result will be a response which contains all the media Cloudfront links, which will look like the one in the previous section. (Example: https://app.actimo.com/cloudfront/clients/xxxx/xxxxxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx.png)
Using AI (or any programme of your choice), take your entire response and have all media links pulled out and put into a standard text file called cdn_urls file like so:
We recommend to create a folder on your desktop called CDN_URLs to store this file.
Now, for the script, I have used Python but feel free to use whatever is easier for you. I have created a script which will do the following:
Read
cdn_urls.txt(one URL per line)Ignore any non‑URL text.
Convert
https://actimo.com/...→https://app.actimo.com/...(so you don’t getAccessDenied)Download each file using your CloudFront + Actimo cookies.
Save them into a
cdn_downloadsfolder which will automatically be created.
In the script below, you will need to swap out the INSERT COOKIE HERE with your own Pre-Signed Cookie which can be seen at the beginning of the code.
(Ensure not to change the triple quotation on either side)
import os
import pathlib
from urllib.parse import urlparse
import requests
# 1) Your full Cookie header value (exactly as from DevTools, no extra quotes)
COOKIE = """INSERT COOKIE HERE"""
INPUT_FILE = "cdn_urls.txt" # your URL file
OUTPUT_DIR = "cdn_downloads" # where files will be saved
os.makedirs(OUTPUT_DIR, exist_ok=True)
headers = {
"Cookie": COOKIE,
"Accept": "*/*",
"User-Agent": "cdn-export-script"
}
# Collect and normalise URLs
urls = []
with open(INPUT_FILE, encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line or not line.startswith("http"):
continue
# Normalise actimo.com → a.actimo.com (avoids AccessDenied)
if line.startswith("https://actimo.com/"):
line = line.replace("https://actimo.com/", "https://app.actimo.com/", 1)
urls.append(line)
print(f"Found {len(urls)} URLs")
for url in urls:
print(f"Downloading {url} ...")
try:
resp = requests.get(url, headers=headers, stream=True, timeout=30)
except Exception as e:
print(f" -> request failed: {e}")
continue
if resp.status_code != 200:
print(f" -> HTTP {resp.status_code}, skipping")
continue
path = urlparse(url).path
name = pathlib.Path(path).name or "file"
out_path = os.path.join(OUTPUT_DIR, name)
with open(out_path, "wb") as out:
for chunk in resp.iter_content(8192):
if chunk:
out.write(chunk)
print(f" -> saved {out_path}")
Save it in the same folder on your desktop where you saved the cdn_url.txt file and name it download_cdn (In my case, I will save it as a python file so it will appear in the folder as download_cdn.py).
Now, we should have our script above and our cdn_url.txt file in the same folder.
Using a simple script execution tool like Windows Powershell, navigate to the desktop folder that contains your files:
PS C:\Users\User_Name> cd desktop
PS C:\Users\User_Name\desktop> cd 'CDN URLs'
Once there, simply run the following two commands:
pip install requests
And then:
python download_cdn.py
This should download each URL from your text file and store them in a newly created folder at the same location as your text and script files:
Important Note: If your script won't run, ensure you still have a valid Pre-Signed Cookie. If your login session has expired, login again to retrieve the new Cookie, and add it to your script file.












