curl --request GET \
--url https://api.aioka.io/v1/integrations/zapier/signal \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.aioka.io/v1/integrations/zapier/signal"
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.aioka.io/v1/integrations/zapier/signal', 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.aioka.io/v1/integrations/zapier/signal",
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.aioka.io/v1/integrations/zapier/signal"
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.aioka.io/v1/integrations/zapier/signal")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aioka.io/v1/integrations/zapier/signal")
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{
"btc_price": 77882,
"confidence": 76.8,
"dark_pool": 65,
"ema_200": 76196,
"ghost_status": "WAITING",
"id": "a1b2c3d4e5f6a7b8",
"readable_time": "24 Apr 2026, 10:00 CEST",
"regime": "LOW_VOLATILITY",
"rsi": 49.5,
"timestamp": "2026-04-24T10:00:00+02:00",
"verdict": "ACCUMULATE"
}Zapier / n8n Signal
Compact signal payload for Zapier and n8n automation workflows.
curl --request GET \
--url https://api.aioka.io/v1/integrations/zapier/signal \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.aioka.io/v1/integrations/zapier/signal"
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.aioka.io/v1/integrations/zapier/signal', 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.aioka.io/v1/integrations/zapier/signal",
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.aioka.io/v1/integrations/zapier/signal"
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.aioka.io/v1/integrations/zapier/signal")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aioka.io/v1/integrations/zapier/signal")
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{
"btc_price": 77882,
"confidence": 76.8,
"dark_pool": 65,
"ema_200": 76196,
"ghost_status": "WAITING",
"id": "a1b2c3d4e5f6a7b8",
"readable_time": "24 Apr 2026, 10:00 CEST",
"regime": "LOW_VOLATILITY",
"rsi": 49.5,
"timestamp": "2026-04-24T10:00:00+02:00",
"verdict": "ACCUMULATE"
}Overview
The Zapier / n8n signal endpoint delivers a compact, flat JSON payload designed for automation platform polling. Use it to build Zaps or n8n workflows that trigger on new AIOKA verdicts β without writing any code. Tier: Basic ($49/mo) π Cache TTL: 60 seconds (server-side) Rate limit: Basic 1,000/day, 30/min. Pro 10,000/day, 100/min.Response Fields
| Field | Type | Description |
|---|---|---|
id | string | SHA-256[:16] of ruling:ruled_at. Changes every time the verdict changes β use this as Zapierβs deduplication key |
verdict | string | Judiciary ruling: STRONG_BUY / BUY / ACCUMULATE / HOLD / REDUCE / SELL / STRONG_SELL / PENDING |
confidence | float | Judiciary composite confidence 0β100 |
regime | string | Current HMM market regime |
dark_pool | int | Dark Pool composite score 0β100 |
rsi | float | BTC 1H RSI(14). 0 if unavailable |
ema_200 | float | BTC 1H EMA(200). 0 if unavailable |
btc_price | float | Live BTC spot price. 0 if unavailable |
ghost_status | string | Ghost Trader status: WAITING or IN_POSITION |
timestamp | string | ISO 8601 datetime with Prague timezone offset, e.g. 2026-04-24T10:00:00+02:00 |
readable_time | string | Human-readable Prague CEST/CET time, e.g. 24 Apr 2026, 10:00 CEST |
Zapier Quick Start
Get your API key
POST /v1/keys/generate or upgrade at aioka.io/pricing.Create a Schedule trigger
Add HTTP Request action
- Method:
GET - URL:
https://api.aioka.io/v1/integrations/zapier/signal - Headers:
X-API-Key: YOUR_KEY
Add a Filter for new verdicts
- Only continue if
iddoes not equal the previousid
id in a Zapier Storage by Zapier step or use the built-in
deduplication on the id field β it changes every time the verdict changes.Post to Slack or Telegram
- Message body:
AIOKA Verdict: {{verdict}} ({{confidence}}% confidence) β {{readable_time}}
n8n Quick Start
Import the ready-made n8n workflow template:- Download n8n-workflow.json
- Open n8n β Workflows β Import from File
- Set the
X-API-Keycredential in the HTTP Request node - Activate the workflow
Example Response
{
"id": "a1b2c3d4e5f6a7b8",
"verdict": "ACCUMULATE",
"confidence": 76.8,
"regime": "LOW_VOLATILITY",
"dark_pool": 65,
"rsi": 49.5,
"ema_200": 76196.0,
"btc_price": 77882.0,
"ghost_status": "WAITING",
"timestamp": "2026-04-24T10:00:00+02:00",
"readable_time": "24 Apr 2026, 10:00 CEST"
}
Deduplication Strategy
Theid field is a SHA-256[:16] fingerprint of f"{ruling}:{ruled_at}". It is stable
across the 60-second cache window and changes the instant a new verdict is issued.
Zapier: Set up a Filter action that compares id to the previous stored value.
Only continue when they differ.
n8n: Use the built-in IF node with ={{$json.id}} !== {{$node["Set"].json.lastId}}.
Error Responses
| Status | Error | Cause |
|---|---|---|
401 | missing_api_key | No X-API-Key header |
401 | invalid_api_key | Key not found or inactive |
403 | tier_required | Free tier key β Basic or higher required |
429 | daily_limit_exceeded | Daily quota exhausted |
429 | rate_limit_exceeded | Per-minute burst exceeded |
Authorizations
Your AIOKA Intelligence API key (format: aik_{tier}_{random})
Response
Latest AIOKA signal bundle for automation workflows.
Signal payload for Zapier and n8n automation workflows.
Key differences from the Pine Script endpoint (Sprint 229):
idβ SHA-256 fingerprint of verdict+timestamp; changes on every new ruling, enabling Zapier deduplication.timestampβ ISO 8601 with Prague TZ offset (e.g. +02:00) rather than Unix epoch, so Zapier can display the time directly.readable_timeβ Human-readable Prague CEST/CET string for Telegram / Slack message bodies, e.g. "24 Apr 2026, 10:00 CEST".
SHA-256[:16] fingerprint of ruling+ruled_at. Changes each time the verdict changes β use this as Zapier's deduplication key.
Judiciary ruling (STRONG_BUY / BUY / ACCUMULATE / HOLD / REDUCE / SELL / STRONG_SELL / PENDING).
Judiciary composite confidence 0-100.
Current market regime (BULL_TRENDING / HIGH_VOLATILITY / LOW_VOLATILITY / ...).
Dark Pool composite score 0-100.
BTC 1H RSI(14). 0 if unavailable.
BTC 1H EMA(200). 0 if unavailable.
Live BTC spot price. 0 if unavailable.
Ghost Trader status (WAITING / IN_POSITION).
ISO 8601 datetime with Prague timezone offset, e.g. '2026-04-24T10:00:00+02:00'.
Human-readable Prague CEST/CET time, e.g. '24 Apr 2026, 10:00 CEST'.