Start forwarding the project's logs and traces over OTLP/HTTP (JSON) to one tool
curl --request POST \
--url https://app.hookie.ai/admin/api/projects/{pid}/telemetry \
--header 'Content-Type: application/json' \
--data '
{
"settings": {},
"secrets": {},
"enabled": true,
"replace": true
}
'const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({settings: {}, secrets: {}, enabled: true, replace: true})
};
fetch('https://app.hookie.ai/admin/api/projects/{pid}/telemetry', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.hookie.ai/admin/api/projects/{pid}/telemetry"
payload = {
"settings": {},
"secrets": {},
"enabled": True,
"replace": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"integration": {
"id": "<string>",
"vendor": "datadog",
"vendor_name": "<string>",
"signals": [
"logs"
],
"settings": {},
"secrets_set": [
"<string>"
],
"secrets_unreadable": true,
"endpoints": {
"logs": "<string>",
"traces": "<string>"
},
"enabled": true,
"created_by": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"status": {
"last_success_at": "<string>",
"last_error": "<string>",
"last_error_at": "<string>",
"exported_count": 123,
"failed_count": 123,
"dropped_count": 123,
"last_test_at": "<string>",
"last_test_ok": true
}
}
}{
"error": "<string>",
"code": "integration_exists",
"existing": {
"vendor": "<string>",
"vendor_name": "<string>"
}
}Broadcast Logs
Start forwarding the project's logs and traces over OTLP/HTTP (JSON) to one tool
A project has ONE integration. When one exists the request is refused with 409 unless replace is exactly true; a replace deletes the old integration (settings, credentials and counts) and is audited as replace_telemetry_integration. Endpoint URLs must be https, public hosts (no localhost, private, link-local or metadata addresses) and carry no credentials. Audited as create_telemetry_integration.
POST
/
admin
/
api
/
projects
/
{pid}
/
telemetry
Start forwarding the project's logs and traces over OTLP/HTTP (JSON) to one tool
curl --request POST \
--url https://app.hookie.ai/admin/api/projects/{pid}/telemetry \
--header 'Content-Type: application/json' \
--data '
{
"settings": {},
"secrets": {},
"enabled": true,
"replace": true
}
'const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({settings: {}, secrets: {}, enabled: true, replace: true})
};
fetch('https://app.hookie.ai/admin/api/projects/{pid}/telemetry', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.hookie.ai/admin/api/projects/{pid}/telemetry"
payload = {
"settings": {},
"secrets": {},
"enabled": True,
"replace": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"integration": {
"id": "<string>",
"vendor": "datadog",
"vendor_name": "<string>",
"signals": [
"logs"
],
"settings": {},
"secrets_set": [
"<string>"
],
"secrets_unreadable": true,
"endpoints": {
"logs": "<string>",
"traces": "<string>"
},
"enabled": true,
"created_by": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"status": {
"last_success_at": "<string>",
"last_error": "<string>",
"last_error_at": "<string>",
"exported_count": 123,
"failed_count": 123,
"dropped_count": 123,
"last_test_at": "<string>",
"last_test_ok": true
}
}
}{
"error": "<string>",
"code": "integration_exists",
"existing": {
"vendor": "<string>",
"vendor_name": "<string>"
}
}Path Parameters
Body
application/json
Available options:
datadog, grafana_cloud, otel_collector, posthog, sentry Non-secret fields of the chosen vendor (see vendors[].fields).
Show child attributes
Show child attributes
Secret fields. On PATCH and on a test of the same vendor, a blank or missing secret keeps the stored value.
Show child attributes
Show child attributes
Must be true to replace an existing integration.
Response
Created (or replaced).
Show child attributes
Show child attributes