curl --request GET \
--url https://api.athenahq.ai/api/v1/activity \
--header 'x-api-key: <api-key>'import requests
url = "https://api.athenahq.ai/api/v1/activity"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.athenahq.ai/api/v1/activity', 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.athenahq.ai/api/v1/activity",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.athenahq.ai/api/v1/activity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.athenahq.ai/api/v1/activity")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.athenahq.ai/api/v1/activity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"activity": [
{
"id": "6f1c2a3e-5b7d-4e8f-9a0b-1c2d3e4f5a6b",
"occurred_at": "2026-09-20T08:14:03.512Z",
"website_id": "3b9d1e2f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"entity_type": "prompt",
"change_type": "created",
"entity_ids": [
"a1f0b2c3-d4e5-4f60-8172-839405a6b7c8"
],
"actor": {
"type": "user",
"api_key_id": null,
"api_key_name": null,
"user": {
"id": "5e7a0000-0000-4000-8000-000000000001",
"email": "ada@example.com"
}
}
},
{
"id": "7a44b5c6-d7e8-4f90-a1b2-c3d4e5f6a7b8",
"occurred_at": "2026-09-20T08:15:41.007Z",
"website_id": "3b9d1e2f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"entity_type": "prompt",
"change_type": "deleted",
"entity_ids": [
"c2d1e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
"c2d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f"
],
"actor": {
"type": "user",
"api_key_id": null,
"api_key_name": null,
"user": {
"id": "5e7a0000-0000-4000-8000-000000000001",
"email": "ada@example.com"
}
}
},
{
"id": "8b90c1d2-e3f4-4a5b-9c6d-7e8f9a0b1c2d",
"occurred_at": "2026-09-20T09:02:10.220Z",
"website_id": "9e07f1a2-b3c4-4d5e-8f60-718293a4b5c6",
"entity_type": "topic",
"change_type": "updated",
"entity_ids": [
"d5510000-0000-4000-8000-000000000001"
],
"actor": {
"type": "user",
"api_key_id": null,
"api_key_name": null,
"user": {
"id": "5e7a0000-0000-4000-8000-000000000001",
"email": "ada@example.com"
}
}
},
{
"id": "9c12d3e4-f5a6-4b7c-8d9e-0f1a2b3c4d5e",
"occurred_at": "2026-09-20T11:30:00.918Z",
"website_id": "9e07f1a2-b3c4-4d5e-8f60-718293a4b5c6",
"entity_type": "prompt",
"change_type": "updated",
"entity_ids": null,
"actor": {
"type": "api_key",
"api_key_id": "a8f20000-0000-4000-8000-000000000002",
"api_key_name": "Production integration",
"user": null
}
}
],
"pagination": {
"page_num": 0,
"page_size": 100,
"has_more": true
}
}Lister l’activité
Renvoie les changements des prompts, sujets et étiquettes dans l’organisation, du plus récent au plus ancien par défaut. Chaque entrée indique site, type d’entité, changement (created, updated, deleted, restored, paused, unpaused), ID concernés et auteur. Permet de comprendre les changements sans relister tous les sites.
entity_ids vaut null si l’ensemble est inconnu (import groupé, par exemple) ; relistez les prompts du site avec GET /api/v1/prompts. Une entrée topic ou prompt_tag peut modifier topic_name ou tags des prompts : relistez aussi le site. Les changements par clé portent son ID et nom dans actor pour ignorer vos propres écritures. Ceux de l’application portent ID et e-mail dans actor.user. Une clé limitée aux sites ne voit que l’identité de leurs membres ; les autres sont user: null. Les sites provisionnés par POST /api/v1/websites/provision n’apparaissent pas ici ; listez-les une fois après création.
Pour répliquer les données, fixez une fenêtre par synchronisation : since = until précédent, until = maintenant moins une minute, order=asc, puis parcourez page_num jusqu’à pagination.has_more égal à false. Conservez ce until pour la suite. since exclusif et until inclusif évitent chevauchement et omission. Sans since, tout l’historique est parcouru ; order=asc sans bornes donne un export complet. La pagination anticipe page_size + 1, sans total.
Clé API partenaire requise. Les clés limitées ne voient que leurs sites.
curl --request GET \
--url https://api.athenahq.ai/api/v1/activity \
--header 'x-api-key: <api-key>'import requests
url = "https://api.athenahq.ai/api/v1/activity"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.athenahq.ai/api/v1/activity', 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.athenahq.ai/api/v1/activity",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.athenahq.ai/api/v1/activity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.athenahq.ai/api/v1/activity")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.athenahq.ai/api/v1/activity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"activity": [
{
"id": "6f1c2a3e-5b7d-4e8f-9a0b-1c2d3e4f5a6b",
"occurred_at": "2026-09-20T08:14:03.512Z",
"website_id": "3b9d1e2f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"entity_type": "prompt",
"change_type": "created",
"entity_ids": [
"a1f0b2c3-d4e5-4f60-8172-839405a6b7c8"
],
"actor": {
"type": "user",
"api_key_id": null,
"api_key_name": null,
"user": {
"id": "5e7a0000-0000-4000-8000-000000000001",
"email": "ada@example.com"
}
}
},
{
"id": "7a44b5c6-d7e8-4f90-a1b2-c3d4e5f6a7b8",
"occurred_at": "2026-09-20T08:15:41.007Z",
"website_id": "3b9d1e2f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"entity_type": "prompt",
"change_type": "deleted",
"entity_ids": [
"c2d1e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
"c2d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f"
],
"actor": {
"type": "user",
"api_key_id": null,
"api_key_name": null,
"user": {
"id": "5e7a0000-0000-4000-8000-000000000001",
"email": "ada@example.com"
}
}
},
{
"id": "8b90c1d2-e3f4-4a5b-9c6d-7e8f9a0b1c2d",
"occurred_at": "2026-09-20T09:02:10.220Z",
"website_id": "9e07f1a2-b3c4-4d5e-8f60-718293a4b5c6",
"entity_type": "topic",
"change_type": "updated",
"entity_ids": [
"d5510000-0000-4000-8000-000000000001"
],
"actor": {
"type": "user",
"api_key_id": null,
"api_key_name": null,
"user": {
"id": "5e7a0000-0000-4000-8000-000000000001",
"email": "ada@example.com"
}
}
},
{
"id": "9c12d3e4-f5a6-4b7c-8d9e-0f1a2b3c4d5e",
"occurred_at": "2026-09-20T11:30:00.918Z",
"website_id": "9e07f1a2-b3c4-4d5e-8f60-718293a4b5c6",
"entity_type": "prompt",
"change_type": "updated",
"entity_ids": null,
"actor": {
"type": "api_key",
"api_key_id": "a8f20000-0000-4000-8000-000000000002",
"api_key_name": "Production integration",
"user": null
}
}
],
"pagination": {
"page_num": 0,
"page_size": 100,
"has_more": true
}
}Paramètres de requête
Horodatage ISO 8601. Uniquement les modifications strictement postérieures à cet instant. Omettez pour commencer au début de l’historique de l’organisation.
Horodatage ISO 8601 : changements jusqu’à cet instant inclus. Fixez-le par synchronisation pour stabiliser les pages pendant la pagination.
desc, par défaut, liste les changements récents d’abord. asc exporte/synchronise dans l’ordre chronologique.
desc, asc Limite à un site. Omettez pour toute l’organisation. Un site hors périmètre de la clé ou hors organisation renvoie 403.
Liste des types d’entités à inclure, séparés par des virgules. Omettez pour tous les inclure.
prompt, topic, prompt_tag Types de changement à inclure, séparés par virgules. Omettez pour tous.
created, updated, deleted, restored, paused, unpaused Numéro de page commençant à zéro.
x >= 0Nombre d’entrées par page (1–100).
1 <= x <= 100Réponse
Réponse réussie avec la page de changements.
Cette page vous a-t-elle été utile ?