#!/bin/bash # Keitaro API CLI Helper # Makes it easier to interact with Keitaro API from command line set -e # Load credentials from .env if it exists if [ -f "$(dirname "$0")/.env" ]; then export $(grep -v '^#' "$(dirname "$0")/.env" | xargs) fi # Check for required environment variables if [ -z "$KEITARO_DOMAIN" ] || [ -z "$KEITARO_API_KEY" ]; then echo "Error: KEITARO_DOMAIN and KEITARO_API_KEY must be set" echo "Either set them as environment variables or create a .env file" exit 1 fi BASE_URL="https://${KEITARO_DOMAIN}/admin_api/v1" # Helper function to make API requests keitaro_request() { local method=$1 local endpoint=$2 local data=$3 if [ -n "$data" ]; then response=$(curl -s -w "\n%{http_code}" -X "$method" \ -H "Api-Key: $KEITARO_API_KEY" \ -H "Content-Type: application/json" \ -d "$data" \ "${BASE_URL}${endpoint}") else response=$(curl -s -w "\n%{http_code}" -X "$method" \ -H "Api-Key: $KEITARO_API_KEY" \ "${BASE_URL}${endpoint}") fi http_code=$(echo "$response" | tail -n1) body=$(echo "$response" | sed '$d') if [ "$http_code" -ge 200 ] && [ "$http_code" -lt 300 ]; then echo "$body" | jq . 2>/dev/null || echo "$body" else echo "Error $http_code:" >&2 echo "$body" | jq . 2>/dev/null || echo "$body" >&2 return 1 fi } # Command dispatcher case "$1" in # Affiliate Networks "networks:list") keitaro_request GET "/affiliate_networks" ;; "networks:get") [ -z "$2" ] && echo "Usage: $0 networks:get " && exit 1 keitaro_request GET "/affiliate_networks/$2" ;; "networks:create") [ -z "$2" ] && echo "Usage: $0 networks:create [postback_url]" && exit 1 data="{\"name\":\"$2\"" [ -n "$3" ] && data="$data,\"postback_url\":\"$3\"" data="$data}" keitaro_request POST "/affiliate_networks" "$data" ;; "networks:delete") [ -z "$2" ] && echo "Usage: $0 networks:delete " && exit 1 keitaro_request DELETE "/affiliate_networks/$2" ;; # Offers "offers:list") keitaro_request GET "/offers" ;; "offers:get") [ -z "$2" ] && echo "Usage: $0 offers:get " && exit 1 keitaro_request GET "/offers/$2" ;; "offers:create") [ -z "$2" ] && echo "Usage: $0 offers:create ''" && exit 1 keitaro_request POST "/offers" "$2" ;; "offers:clone") [ -z "$2" ] || [ -z "$3" ] && echo "Usage: $0 offers:clone " && exit 1 keitaro_request POST "/offers/$2/clone" "{\"name\":\"$3\"}" ;; # Campaigns "campaigns:list") keitaro_request GET "/campaigns?offset=0&limit=100" ;; "campaigns:get") [ -z "$2" ] && echo "Usage: $0 campaigns:get " && exit 1 keitaro_request GET "/campaigns/$2" ;; "campaigns:create") [ -z "$2" ] || [ -z "$3" ] && echo "Usage: $0 campaigns:create " && exit 1 keitaro_request POST "/campaigns" "{\"name\":\"$2\",\"alias\":\"$3\"}" ;; "campaigns:enable") [ -z "$2" ] && echo "Usage: $0 campaigns:enable " && exit 1 keitaro_request POST "/campaigns/$2/enable" ;; "campaigns:disable") [ -z "$2" ] && echo "Usage: $0 campaigns:disable " && exit 1 keitaro_request POST "/campaigns/$2/disable" ;; "campaigns:streams") [ -z "$2" ] && echo "Usage: $0 campaigns:streams " && exit 1 keitaro_request GET "/campaigns/$2/streams" ;; # Domains "domains:list") keitaro_request GET "/domains" ;; "domains:get") [ -z "$2" ] && echo "Usage: $0 domains:get " && exit 1 keitaro_request GET "/domains/$2" ;; "domains:create") [ -z "$2" ] && echo "Usage: $0 domains:create " && exit 1 keitaro_request POST "/domains" "{\"name\":\"$2\",\"state\":\"active\"}" ;; "domains:check") [ -z "$2" ] && echo "Usage: $0 domains:check " && exit 1 keitaro_request POST "/domains/$2/check" ;; "domains:ip") keitaro_request GET "/domains/ip" ;; # Landing Pages "landings:list") keitaro_request GET "/landing_pages" ;; "landings:get") [ -z "$2" ] && echo "Usage: $0 landings:get " && exit 1 keitaro_request GET "/landing_pages/$2" ;; # Statistics "stats:clicks") [ -z "$2" ] && echo "Usage: $0 stats:clicks ''" && exit 1 keitaro_request POST "/clicks/log" "$2" ;; "stats:conversions") [ -z "$2" ] && echo "Usage: $0 stats:conversions ''" && exit 1 keitaro_request POST "/conversions/log" "$2" ;; # Bot List "botlist:get") keitaro_request GET "/botlist" ;; "botlist:add") [ -z "$2" ] && echo "Usage: $0 botlist:add ''" && exit 1 keitaro_request POST "/botlist/add" "{\"ips\":$2}" ;; "botlist:remove") [ -z "$2" ] && echo "Usage: $0 botlist:remove ''" && exit 1 keitaro_request POST "/botlist/exclude" "{\"ips\":$2}" ;; # Groups "groups:list") [ -z "$2" ] && echo "Usage: $0 groups:list (campaigns|offers|landings|domains)" && exit 1 keitaro_request GET "/groups?type=$2" ;; "groups:create") [ -z "$2" ] || [ -z "$3" ] && echo "Usage: $0 groups:create " && exit 1 keitaro_request POST "/groups" "{\"name\":\"$2\",\"type\":\"$3\"}" ;; # Integrations "fb:list") keitaro_request GET "/integrations/facebook" ;; "fb:get") [ -z "$2" ] && echo "Usage: $0 fb:get " && exit 1 keitaro_request GET "/integrations/facebook/$2" ;; # Help "help"|"--help"|"-h"|"") cat << EOF Keitaro API CLI Helper Usage: $0 [arguments] Affiliate Networks: networks:list - List all affiliate networks networks:get - Get network by ID networks:create [url] - Create network networks:delete - Delete network Offers: offers:list - List all offers offers:get - Get offer by ID offers:create '' - Create offer (pass JSON) offers:clone - Clone offer Campaigns: campaigns:list - List all campaigns campaigns:get - Get campaign by ID campaigns:create - Create campaign campaigns:enable - Enable campaign campaigns:disable - Disable campaign campaigns:streams - Get campaign streams Domains: domains:list - List all domains domains:get - Get domain by ID domains:create - Create domain domains:check - Check domain status domains:ip - Get server IP Landing Pages: landings:list - List all landing pages landings:get - Get landing page by ID Statistics: stats:clicks '' - Query click statistics stats:conversions '' - Query conversions Bot List: botlist:get - Get bot list botlist:add '' - Add IPs to bot list botlist:remove '' - Remove IPs from bot list Groups: groups:list - List groups by type groups:create - Create group Integrations: fb:list - List Facebook integrations fb:get - Get Facebook integration Examples: $0 networks:create "MaxBounty" "https://maxbounty.com/postback" $0 campaigns:create "Summer Sale" "summer-sale" $0 offers:clone 123 "New Offer Name" $0 stats:clicks '{"range":{"from":"2026-01-01","to":"2026-01-31","timezone":"UTC"},"columns":["clicks"],"metrics":["clicks"]}' Configuration: Set KEITARO_DOMAIN and KEITARO_API_KEY environment variables Or create a .env file in the skill directory EOF ;; *) echo "Unknown command: $1" echo "Run '$0 help' for usage information" exit 1 ;; esac