{"ok":true,"encryption":true,"connectors":[{"provider":"assistant","label":"Assistente AI (tono di voce)","category":"AI","description":"Istruzioni e tono di voce dell'assistente che risponde ai messaggi (WhatsApp/chat). Lascia vuoto per il default. I FATTI (prodotti, prezzi, consegne) vanno nei Documenti KB, non qui.","fields":[{"key": "system_prompt", "type": "textarea", "label": "Istruzioni / tono di voce", "is_secret": false, "placeholder": "Es: Sei l'assistente clienti IHDRA. Tono cordiale e professionale, dai del tu, max 3 frasi. Non inventare prezzi/tempi: usa solo la Conoscenza. Se non sai, proponi di scrivere a info@ihdra.it. Firma: Team IHDRA."}],"status":"configured","configured_count":1,"total_fields":1},{"provider":"anthropic","label":"Anthropic Claude","category":"AI","description":"Modello principale · ragionamento e codice","fields":[{"key": "api_key", "label": "API Key", "is_secret": true, "placeholder": "sk-ant-api03-..."}, {"key": "model", "label": "Modello", "default": "claude-sonnet-4-6", "is_secret": false}],"status":"configured","configured_count":2,"total_fields":2},{"provider":"gemini","label":"Google Gemini","category":"AI","description":"Free tier 1500/giorno · 1M token context · STT multimodal","fields":[{"key": "api_key", "label": "API Key", "is_secret": true, "placeholder": "AIza..."}, {"key": "model", "label": "Modello (text)", "default": "gemini-2.0-flash", "is_secret": false}, {"key": "stt_model", "label": "Modello (STT multimodal)", "default": "gemini-2.5-flash", "is_secret": false}],"status":"configured","configured_count":3,"total_fields":3},{"provider":"voyage","label":"Voyage AI Embeddings","category":"AI","description":"Provider embeddings per RAG semantica · raccomandato da Anthropic","fields":[{"key": "api_key", "label": "API Key", "is_secret": true, "placeholder": "pa-..."}, {"key": "model", "label": "Modello", "default": "voyage-3-large", "is_secret": false}],"status":"configured","configured_count":2,"total_fields":2},{"provider":"google_tts","label":"Google Cloud Text-to-Speech","category":"AI","description":"Sintesi vocale per Android Vocale (it-IT Neural2, MP3)","fields":[{"key": "api_key", "label": "API Key", "is_secret": true, "placeholder": "AIza..."}, {"key": "voice", "label": "Voice", "default": "it-IT-Neural2-A", "is_secret": false}],"status":"configured","configured_count":2,"total_fields":2},{"provider":"higgsfield","label":"Higgsfield (Image/Video AI)","category":"AI","description":"Generazione immagini/video AI per i post del calendario editoriale. Il Hub chiama DIRETTAMENTE la REST API di Higgsfield (platform.higgsfield.ai) dall'endpoint /api/admin/editorial/{id}/generate-visual usando api_key + api_secret: image via Soul (con la bustina prodotto come image_reference quando disponibile), video image-to-video via DoP. Le generazioni consumano i crediti del tuo piano Higgsfield. Le coppie API Key (UUID) + API Secret si generano nel dashboard Higgsfield, sezione API.","fields":[{"key": "api_key", "label": "API Key (UUID)", "is_secret": true, "placeholder": "123e4567-e89b-12d3-a456-426614174000"}, {"key": "api_secret", "label": "API Secret", "is_secret": true, "placeholder": "il secret abbinato alla key"}, {"key": "base_url", "label": "Base URL", "default": "https://platform.higgsfield.ai", "is_secret": false}, {"key": "default_image_model", "label": "Modello immagine (info)", "default": "higgsfield-ai/soul/standard", "is_secret": false}, {"key": "n8n_webhook_url", "label": "n8n Webhook URL (modalità via-n8n, opzionale/legacy)", "is_secret": false, "placeholder": "https://n8n.../webhook/ihdra-higgsfield-trigger"}],"status":"partial","configured_count":4,"total_fields":5},{"provider":"amazon","label":"Amazon SP-API","category":"Marketplace","description":"Ordini · Inventario · ASIN","fields":[{"key": "client_id", "label": "LWA Client ID", "is_secret": false, "placeholder": "amzn1.application-oa2-client..."}, {"key": "client_secret", "label": "LWA Client Secret", "is_secret": true}, {"key": "refresh_token", "label": "Refresh Token", "is_secret": true, "placeholder": "Atzr|..."}, {"key": "marketplace_id", "label": "Marketplace ID", "default": "APJ6JRA9NG5V4", "is_secret": false}],"status":"configured","configured_count":4,"total_fields":4},{"provider":"woocommerce","label":"WooCommerce","category":"Marketplace","description":"Sito ihdra.it · prodotti e ordini","fields":[{"key": "site_url", "label": "Site URL", "default": "https://ihdra.it", "is_secret": false}, {"key": "consumer_key", "label": "Consumer Key", "is_secret": true, "placeholder": "ck_..."}, {"key": "consumer_secret", "label": "Consumer Secret", "is_secret": true, "placeholder": "cs_..."}],"status":"configured","configured_count":3,"total_fields":3},{"provider":"tiktok_shop","label":"TikTok Shop (Partner API)","category":"Marketplace","description":"TikTok Shop · ordini + catalogo prodotti. Auth con app_key/secret + access_token (24h, refresh via refresh_token). HMAC-SHA256 signing su ogni request.","fields":[{"key": "app_key", "label": "App Key", "is_secret": false, "placeholder": "6abc1234def..."}, {"key": "app_secret", "label": "App Secret", "is_secret": true}, {"key": "access_token", "label": "Access Token (24h)", "is_secret": true, "placeholder": "ROW_..."}, {"key": "refresh_token", "label": "Refresh Token", "is_secret": true, "placeholder": "ROW_..."}, {"key": "shop_id", "label": "Shop ID", "is_secret": false, "placeholder": "7012345678901234567"}, {"key": "shop_cipher", "label": "Shop Cipher", "is_secret": false, "placeholder": "GCP_xxx..."}, {"key": "region", "label": "Region (eu/us/sg)", "default": "eu", "is_secret": false}],"status":"not_configured","configured_count":0,"total_fields":7},{"provider":"paypal","label":"PayPal","category":"Payments","description":"Pagamenti e gestione dispute","fields":[{"key": "client_id", "label": "Client ID", "is_secret": false}, {"key": "client_secret", "label": "Client Secret", "is_secret": true}, {"key": "env", "label": "Environment", "default": "live", "is_secret": false}, {"key": "webhook_id", "label": "Webhook ID (per verificare la firma dei webhook: crea un webhook su developer.paypal.com verso https://hub.srv1583095.hstgr.cloud/api/paypal/webhook con evento PAYMENT.CAPTURE.COMPLETED e incolla qui l'ID)", "is_secret": false, "placeholder": "WH-xxxxxxxx"}],"status":"partial","configured_count":3,"total_fields":4},{"provider":"stripe","label":"Stripe","category":"Payments","description":"Pagamenti e dispute carte","fields":[{"key": "secret_key", "label": "Secret Key", "is_secret": true, "placeholder": "sk_live_..."}, {"key": "publishable_key", "label": "Publishable Key", "is_secret": false, "placeholder": "pk_live_..."}, {"key": "webhook_secret", "label": "Webhook Secret", "is_secret": true}],"status":"configured","configured_count":3,"total_fields":3},{"provider":"spedizioni_prime","label":"Spedizioni Prime","category":"Logistics","description":"Etichette spedizione multi-corriere via spedisci.online API v2 (https://{subdomain}.spedisci.online/api/v2). Crea spedizioni dagli ordini (pulsante '📦 Crea spedizione' nel pannello Ordini): genera tracking + etichetta PDF, imposta lo stato a 'spedito' e notifica il cliente su WhatsApp. carrier_code/contract_code di default si trovano nel pannello spedisci.online (sezione Corrieri/Contratti). Il mittente è l'indirizzo di partenza stampato sull'etichetta. Misure colli in cm, peso in kg.","fields":[{"key": "api_key", "label": "API Key", "is_secret": true, "placeholder": "chiave API da spedisci.online → Impostazioni → API"}, {"key": "subdomain", "label": "Subdomain (https://SUB.spedisci.online)", "default": "ecommerceitalia", "is_secret": false}, {"key": "carrier_code", "label": "Corriere di default (carrierCode)", "is_secret": false, "placeholder": "es. brt, gls, poste"}, {"key": "contract_code", "label": "Contratto di default (contractCode)", "is_secret": false, "placeholder": "es. brt-STANDARD"}, {"key": "tracking_url_template", "label": "Template URL tracking (usa {tracking} come segnaposto)", "is_secret": false, "placeholder": "https://www.17track.net/it/track?nums={tracking}"}, {"key": "list_path", "label": "Path API elenco spedizioni (avanzato: override auto-discovery, es. /orders)", "is_secret": false, "placeholder": "/orders"}, {"key": "list_method", "label": "Metodo HTTP elenco (avanzato: GET o POST, def. POST)", "is_secret": false, "placeholder": "POST"}, {"key": "list_body", "label": "Body JSON elenco (avanzato: filtri per POST, es. {\"page\":1})", "is_secret": false, "placeholder": "{}"}, {"key": "woo_tracking_meta", "label": "WooCommerce: meta-key del tracking (avanzato, override auto-rilevamento)", "is_secret": false, "placeholder": "es. _tracking_number"}, {"key": "woo_carrier_meta", "label": "WooCommerce: meta-key del corriere (avanzato)", "is_secret": false, "placeholder": "es. _tracking_provider"}, {"key": "woo_tracking_url_meta", "label": "WooCommerce: meta-key dell'URL tracking (avanzato)", "is_secret": false, "placeholder": "es. _tracking_url"}, {"key": "mittente_nome", "label": "Mittente · Nome", "is_secret": false, "placeholder": "IHDRA"}, {"key": "mittente_azienda", "label": "Mittente · Azienda", "is_secret": false, "placeholder": "Cuore Nero Caffè"}, {"key": "mittente_indirizzo", "label": "Mittente · Indirizzo", "is_secret": false, "placeholder": "Via Roma 1"}, {"key": "mittente_citta", "label": "Mittente · Città", "is_secret": false, "placeholder": "Napoli"}, {"key": "mittente_provincia", "label": "Mittente · Provincia (sigla)", "is_secret": false, "placeholder": "NA"}, {"key": "mittente_cap", "label": "Mittente · CAP", "is_secret": false, "placeholder": "80100"}, {"key": "mittente_paese", "label": "Mittente · Paese (ISO2)", "default": "IT", "is_secret": false}, {"key": "mittente_telefono", "label": "Mittente · Telefono", "is_secret": false, "placeholder": "+39..."}, {"key": "mittente_email", "label": "Mittente · Email", "is_secret": false, "placeholder": "info@ihdra.it"}, {"key": "collo_peso", "label": "Collo default · Peso (kg)", "default": "1", "is_secret": false}, {"key": "collo_lung", "label": "Collo default · Lunghezza (cm)", "default": "20", "is_secret": false}, {"key": "collo_larg", "label": "Collo default · Larghezza (cm)", "default": "15", "is_secret": false}, {"key": "collo_alt", "label": "Collo default · Altezza (cm)", "default": "10", "is_secret": false}],"status":"partial","configured_count":16,"total_fields":24},{"provider":"packlink","label":"Packlink PRO","category":"Logistics","description":"Spedizioni multi-corriere","fields":[{"key": "api_key", "label": "API Key", "is_secret": true}],"status":"configured","configured_count":1,"total_fields":1},{"provider":"whatsapp","label":"WhatsApp Business","category":"Messaging","description":"WhatsApp Business Cloud API (Meta) – Messaggi omnicanale. Webhook nativo: GET/POST /api/messaging/whatsapp/webhook (verifica + inbound). Outbound: Graph API diretta (phone_number_id+access_token) o n8n_outbound_webhook.","fields":[{"key": "phone_number_id", "label": "Phone Number ID", "is_secret": false, "placeholder": "123456789"}, {"key": "access_token", "label": "Access Token", "is_secret": true, "placeholder": "EAA..."}, {"key": "verify_token", "label": "Verify Token (webhook handshake Meta)", "is_secret": true, "placeholder": "my_verify_token"}, {"key": "app_secret", "label": "App Secret (firma X-Hub-Signature-256, opzionale)", "is_secret": true, "placeholder": ""}, {"key": "business_account_id", "label": "Business Account ID", "is_secret": false, "placeholder": "987654321"}, {"key": "api_version", "label": "Graph API Version", "default": "v21.0", "is_secret": false}, {"key": "n8n_outbound_webhook", "label": "n8n Outbound Webhook URL (opzionale: fallback se manca Graph)", "is_secret": false, "placeholder": "https://n8n.../webhook/ihdra-wa-outbound"}, {"key": "notify_orders", "label": "Notifica clienti su WhatsApp (conferma ordine all'arrivo; tracking alla spedizione è sempre attivo). Metti 'true' per attivare", "is_secret": false, "placeholder": "true"}, {"key": "notify_text_only", "label": "Notifiche conferma/tracking come TESTO SEMPLICE (salta i template Meta; fuori finestra 24h Meta rifiuta comunque → copre l'email). 'true'/'false'", "is_secret": false, "placeholder": "true"}, {"key": "tmpl_conferma", "label": "Template conferma ordine (segnaposto: {nome} {ordine} {mittente})", "is_secret": false, "placeholder": "Ciao {nome}, abbiamo ricevuto il tuo ordine {ordine} ✅ — {mittente}"}, {"key": "tmpl_spedizione", "label": "Template spedizione (segnaposto: {nome} {ordine} {corriere} {tracking} {mittente})", "is_secret": false, "placeholder": "Il tuo ordine {ordine} è stato spedito! Tracking: {tracking} — {mittente}"}, {"key": "tmpl_conferma_name", "label": "Nome TEMPLATE Meta approvato per conferma ordine (obbligatorio per scrivere per primi al cliente)", "is_secret": false, "placeholder": "ordine_confermato"}, {"key": "tmpl_conferma_lang", "label": "Lingua template conferma (es. it)", "is_secret": false, "placeholder": "it"}, {"key": "tmpl_conferma_params", "label": "Parametri body template conferma, in ordine (es. nome,ordine)", "is_secret": false, "placeholder": "nome,ordine"}, {"key": "tmpl_spedizione_name", "label": "Nome TEMPLATE Meta approvato per spedizione", "is_secret": false, "placeholder": "ordine_spedito"}, {"key": "tmpl_spedizione_lang", "label": "Lingua template spedizione (es. it)", "is_secret": false, "placeholder": "it"}, {"key": "tmpl_spedizione_params", "label": "Parametri body template spedizione, in ordine (es. nome,ordine,tracking)", "is_secret": false, "placeholder": "nome,ordine,tracking"}, {"key": "notify_recupero", "label": "Recupero ordini FALLITI: invia al cliente (via WhatsApp Web) un link PayPal per pagare lo stesso importo. Metti 'true' per attivare", "is_secret": false, "placeholder": "true"}, {"key": "tmpl_recupero", "label": "Messaggio recupero ordine fallito · WhatsApp (segnaposto: {nome} {ordine} {importo} {link} {mittente})", "is_secret": false, "placeholder": "Ciao {nome}, il pagamento dell'ordine {ordine} non è andato a buon fine. Completa qui ({importo}): {link} — {mittente}"}, {"key": "tmpl_recupero_email_subj", "label": "Recupero ordine fallito · OGGETTO email (usato quando il cliente non ha telefono; segnaposto {ordine} {mittente})", "is_secret": false, "placeholder": "Completa il pagamento del tuo ordine {ordine}"}, {"key": "notify_payment_immediate", "label": "Avviso IMMEDIATO agli admin ad ogni incasso PayPal recuperato ('true'). Di default OFF: gli incassi sono riepilogati nel report delle 18:00 (email + numeri report)", "is_secret": false, "placeholder": "true"}, {"key": "notify_recupero_since", "label": "Recupero falliti · invia solo agli ordini da questa data in poi (ISO, es. 2026-07-15T18:00:00). Impostata all'attivazione = solo i nuovi. Anticipala per contattare anche i falliti piu' vecchi (entro 14 giorni)", "is_secret": false, "placeholder": "2026-07-15T18:00:00"}, {"key": "inbound_secret", "label": "Inbound Secret (per /api/conversations/inbound da n8n)", "is_secret": true, "placeholder": "random32chars"}, {"key": "admin_numbers", "label": "Numeri admin (telecomando: comandi via WhatsApp, separati da virgola)", "is_secret": false, "placeholder": "393391534574"}, {"key": "auto_reply_min_confidence", "label": "Auto-risposta · soglia confidenza (0-1): sotto questa l'AI lascia BOZZA invece di inviare", "is_secret": false, "placeholder": "0.75"}, {"key": "auto_reply_escalate_intents", "label": "Auto-risposta · intenti da NON gestire da soli (bozza+escalation), separati da virgola", "is_secret": false, "placeholder": "LAMENTO_SPEDIZIONE,RESO,PAGAMENTO"}, {"key": "auto_reply_hours", "label": "Auto-risposta · fascia oraria (Europe/Rome, formato H-H, es. 9-19). Vuoto = sempre", "is_secret": false, "placeholder": "9-19"}, {"key": "auto_reply_hours_mode", "label": "Auto-risposta · modalità fascia: 'within' (solo dentro) o 'outside' (solo fuori)", "is_secret": false, "placeholder": "within"}, {"key": "ai_tone", "label": "Tono di voce AI (istruzioni di stile aggiunte alle risposte ai clienti; vuoto = voce IHDRA di default)", "is_secret": false, "placeholder": "Caloroso e diretto, dai del tu, niente formalismi, emoji con parsimonia."}, {"key": "escalation_notify", "label": "Notifica admin via WhatsApp quando un messaggio viene trattenuto per escalation ('on'/'off')", "is_secret": false, "placeholder": "on"}, {"key": "escalation_client_message", "label": "Casi sensibili (reclami/resi/pagamenti) · messaggio automatico al cliente (vuoto = testo predefinito 'segnalato al reparto, verrai ricontattato')", "is_secret": false, "placeholder": "Grazie, ho segnalato la richiesta al reparto: verrai ricontattato a breve."}, {"key": "tmpl_freeform_name", "label": "Template GENERICO Meta approvato (body = {{1}}): usato in automatico per i messaggi manuali fuori dalla finestra 24h", "is_secret": false, "placeholder": "messaggio_libero"}, {"key": "tmpl_freeform_lang", "label": "Lingua template generico (es. it)", "is_secret": false, "placeholder": "it"}, {"key": "daily_report_email", "label": "Report giornaliero problemi WhatsApp · email destinatario (vuoto = info@ihdra.it). Invio automatico ogni giorno alle 18:00", "is_secret": false, "placeholder": "info@ihdra.it"}, {"key": "daily_report_hours", "label": "Report giornaliero problemi WhatsApp · finestra in ore da analizzare (default 24)", "is_secret": false, "placeholder": "24"}, {"key": "daily_report_number", "label": "Report giornaliero problemi WhatsApp · numeri WhatsApp destinatari (stesso riepilogo, ore 18:00; più numeri separati da virgola). Default 393391534574,393474448851", "is_secret": false, "placeholder": "393391534574,393474448851"}],"status":"partial","configured_count":10,"total_fields":36},{"provider":"whatsapp_web","label":"WhatsApp Web (WAHA)","category":"Messaging","description":"Transport NON ufficiale (WhatsApp Web via container WAHA): invia TESTO LIBERO senza template e senza finestra 24h. Richiede un numero DEDICATO (non quello della Cloud API ufficiale) e la scansione del QR. Rischio ban da Meta: usalo con volumi moderati per cortesie (benvenuto/tracking). L'email resta la rete di sicurezza.","fields":[{"key": "base_url", "label": "Base URL WAHA (es. http://waha:3000)", "is_secret": false, "placeholder": "http://waha:3000"}, {"key": "api_key", "label": "API Key WAHA (header X-Api-Key)", "is_secret": true, "placeholder": "chiave-condivisa"}, {"key": "session", "label": "Nome sessione WAHA", "is_secret": false, "placeholder": "default"}, {"key": "active", "label": "Usa WhatsApp Web per gli invii di testo ('true'/'false'). Se 'true' i messaggi partono dal numero Web (testo libero sempre); fallback alla Cloud API se WAHA non risponde", "is_secret": false, "placeholder": "false"}, {"key": "webhook_secret", "label": "Secret inbound (query ?secret= sul webhook WAHA → hub)", "is_secret": true, "placeholder": "random32chars"}],"status":"partial","configured_count":4,"total_fields":5},{"provider":"whatsapp_web2","label":"WhatsApp Web 2 (WAHA)","category":"Messaging","description":"SECONDA sessione WhatsApp Web sullo stesso container WAHA (riusa base_url/api_key di 'WhatsApp Web'). Numero DEDICATO diverso, QR proprio, inbox separata (canale whatsapp_web2). Utile per collegare un secondo numero o come sessione pulita di riserva.","fields":[{"key": "session", "label": "Nome sessione WAHA (default 'web2')", "is_secret": false, "placeholder": "web2"}, {"key": "active", "label": "Usa WhatsApp Web 2 per gli invii di testo ('true'/'false')", "is_secret": false, "placeholder": "false"}, {"key": "webhook_secret", "label": "Secret inbound (query ?secret= sul webhook WAHA → hub)", "is_secret": true, "placeholder": "random32chars"}],"status":"partial","configured_count":2,"total_fields":3},{"provider":"email_inbox","label":"Email Inbox","category":"Messaging","description":"Modulo email inbox con AI draft + learning loop. Le credenziali IMAP/SMTP delle caselle sono in tabella email_accounts (cifrate). Qui solo i secret di integrazione n8n.","fields":[{"key": "inbound_secret", "label": "Inbound Secret", "is_secret": true, "placeholder": "random32chars"}, {"key": "n8n_outbound_webhook", "label": "n8n Outbound Webhook URL", "is_secret": false, "placeholder": "https://n8n.../webhook/ihdra-email-outbound"}, {"key": "notify_orders", "label": "Email di benvenuto ai nuovi ordini ('true' per attivare; nessun vincolo Meta, parte sempre)", "is_secret": false, "placeholder": "true"}, {"key": "welcome_subject", "label": "Oggetto email benvenuto (segnaposto: {nome} {ordine} {mittente})", "is_secret": false, "placeholder": "Grazie {nome}! Abbiamo ricevuto il tuo ordine {ordine}"}, {"key": "welcome_body", "label": "Corpo email benvenuto (testo, segnaposto: {nome} {ordine} {mittente})", "is_secret": false, "placeholder": "Ciao {nome}, grazie per il tuo ordine {ordine}! Ti avviseremo appena spedito. — {mittente}"}],"status":"partial","configured_count":3,"total_fields":5},{"provider":"meta_messaging","label":"Messenger & Instagram DM","category":"Messaging","description":"Facebook Messenger + Instagram Direct (Meta Graph API) – conversazioni nel pannello Messaggi. Webhook nativo: GET/POST /api/messaging/meta/webhook (verifica + inbound, object=page/instagram). Outbound: Send API /{page_id}/messages con Page Access Token (permessi pages_messaging + instagram_basic + instagram_manage_messages; l'account Instagram deve essere professionale e collegato alla Pagina).","fields":[{"key": "page_id", "label": "Facebook Page ID", "is_secret": false, "placeholder": "123456789"}, {"key": "access_token", "label": "Page Access Token", "is_secret": true, "placeholder": "EAA..."}, {"key": "verify_token", "label": "Verify Token (webhook handshake Meta)", "is_secret": true, "placeholder": "my_verify_token"}, {"key": "app_secret", "label": "App Secret (firma X-Hub-Signature-256, opzionale)", "is_secret": true, "placeholder": ""}, {"key": "ig_account_id", "label": "Instagram Business Account ID (riferimento, opzionale)", "is_secret": false, "placeholder": "178414..."}, {"key": "api_version", "label": "Graph API Version", "default": "v21.0", "is_secret": false}],"status":"not_configured","configured_count":0,"total_fields":6},{"provider":"meta_marketing","label":"Meta Marketing API","category":"Marketing","description":"Facebook + Instagram Ads · campagne, ad set, insights, pause/resume/budget edit. System User long-lived token su Business Manager.","fields":[{"key": "access_token", "label": "System User Access Token", "is_secret": true, "placeholder": "EAAxxxxxxxxxxxx..."}, {"key": "ad_account_id", "label": "Ad Account ID", "is_secret": false, "placeholder": "act_123456789012345"}, {"key": "app_id", "label": "App ID", "is_secret": false, "placeholder": "123456789012345"}, {"key": "business_manager_id", "label": "Business Manager ID", "is_secret": false, "placeholder": "987654321"}, {"key": "api_version", "label": "Graph API Version", "default": "v21.0", "is_secret": false}],"status":"partial","configured_count":3,"total_fields":5},{"provider":"google_ads","label":"Google Ads API","category":"Marketing","description":"Google Ads · campaigns, ad groups, insights, pause/resume/budget. OAuth 2.0 + developer token.","fields":[{"key": "developer_token", "label": "Developer Token", "is_secret": true, "placeholder": "abcDEF1234567890"}, {"key": "client_id", "label": "OAuth Client ID", "is_secret": false, "placeholder": "123456789-abc.apps.googleusercontent.com"}, {"key": "client_secret", "label": "OAuth Client Secret", "is_secret": true, "placeholder": "GOCSPX-..."}, {"key": "refresh_token", "label": "OAuth Refresh Token", "is_secret": true, "placeholder": "1//0g..."}, {"key": "customer_id", "label": "Customer ID (no dashes)", "is_secret": false, "placeholder": "1234567890"}, {"key": "login_customer_id", "label": "Manager Customer ID (opzionale)", "is_secret": false, "placeholder": "9876543210"}, {"key": "api_version", "label": "API Version", "default": "v22", "is_secret": false}],"status":"partial","configured_count":6,"total_fields":7},{"provider":"amazon_ads","label":"Amazon Ads (Sponsored Products)","category":"Marketing","description":"Amazon Advertising · Sponsored Products: campagne, ad group, insights, pause/resume/budget. Stesso LWA OAuth di SP-API ma con scope advertising::campaign_management.","fields":[{"key": "client_id", "label": "LWA Client ID", "is_secret": false, "placeholder": "amzn1.application-oa2-client..."}, {"key": "client_secret", "label": "LWA Client Secret", "is_secret": true}, {"key": "refresh_token", "label": "Refresh Token (scope advertising::campaign_management)", "is_secret": true, "placeholder": "Atzr|..."}, {"key": "profile_id", "label": "Profile ID (Amazon-Advertising-API-Scope)", "is_secret": false, "placeholder": "1234567890123456"}, {"key": "region", "label": "Region (eu/na/fe)", "default": "eu", "is_secret": false}, {"key": "marketplace_id", "label": "Marketplace ID", "default": "APJ6JRA9NG5V4", "is_secret": false}],"status":"configured","configured_count":6,"total_fields":6},{"provider":"tiktok_ads","label":"TikTok Ads (Marketing API)","category":"Marketing","description":"TikTok for Business · campagne, ad group, insights, pause/resume/budget. OAuth long-lived access_token + advertiser_id.","fields":[{"key": "app_id", "label": "App ID", "is_secret": false, "placeholder": "701234567890123456"}, {"key": "secret", "label": "App Secret", "is_secret": true}, {"key": "access_token", "label": "Long-lived Access Token", "is_secret": true, "placeholder": "abc123..."}, {"key": "advertiser_id", "label": "Advertiser ID", "is_secret": false, "placeholder": "7012345678901234567"}, {"key": "api_version", "label": "API Version", "default": "v1.3", "is_secret": false}],"status":"not_configured","configured_count":0,"total_fields":5},{"provider":"tracking","label":"Tracking Pixels (Cross-Platform)","category":"Marketing","description":"Pixel/Tag injection cross-platform: Meta + GA4 + Google Ads + first-party HUB. Includere &lt;script src=\"https://hub.../tracker.js\"&gt; sul sito ihdra.it. Tracking events client-side + raccolta first-party nel HUB per attribuzione e retargeting.","fields":[{"key": "meta_pixel_id", "label": "Meta Pixel ID", "is_secret": false, "placeholder": "123456789012345"}, {"key": "ga4_measurement_id", "label": "GA4 Measurement ID", "is_secret": false, "placeholder": "G-XXXXXXXXXX"}, {"key": "gads_conversion_id", "label": "Google Ads Conversion ID", "is_secret": false, "placeholder": "AW-XXXXXXXXX"}, {"key": "gads_conversion_label", "label": "Google Ads Conversion Label", "is_secret": false, "placeholder": "abcDEF1234567890"}, {"key": "tiktok_pixel_id", "label": "TikTok Pixel ID (opzionale)", "is_secret": false, "placeholder": "C4XXXXXXXXXXXX"}, {"key": "allowed_origins", "label": "Origini consentite (CSV, vuoto = qualsiasi)", "is_secret": false, "placeholder": "https://ihdra.it,https://www.ihdra.it"}],"status":"partial","configured_count":1,"total_fields":6},{"provider":"hostinger","label":"Hostinger Public API","category":"Infrastructure","description":"VPS lifecycle (start/stop/restart/info) · DNS records · domini · billing. Personal Access Token da hPanel → API. Non dà shell access: per leggere file dentro la VPS serve SSH.","fields":[{"key": "api_token", "label": "Personal Access Token", "is_secret": true, "placeholder": "hpa_..."}, {"key": "base_url", "label": "Base URL", "default": "https://developers.hostinger.com", "is_secret": false}],"status":"not_configured","configured_count":0,"total_fields":2},{"provider":"editorial","label":"Editorial Calendar (n8n)","category":"Marketing","description":"Calendario editoriale multi-canale gestito via AI Agent in n8n. Cron 1° del mese genera draft per il mese successivo. n8n_generate_webhook viene triggerato dal pulsante 'Genera ora' (e dal cron). n8n_publish_webhook è chiamato quando un post approvato deve essere pubblicato. Le creative image/video dei post si generano dall'endpoint /api/admin/editorial/{id}/generate-visual che usa il connettore 'Higgsfield' (REST API diretta) — vedi quel provider per le credenziali.","fields":[{"key": "n8n_generate_webhook", "label": "n8n Generate Webhook URL", "is_secret": false, "placeholder": "https://n8n.../webhook/ihdra-marketing-pipeline"}, {"key": "n8n_publish_webhook", "label": "n8n Publish Webhook URL", "is_secret": false, "placeholder": "https://n8n.../webhook/ihdra-editorial-publish"}, {"key": "webhook_secret", "label": "Webhook Secret (auth verso n8n)", "is_secret": true, "placeholder": "random32chars"}],"status":"partial","configured_count":2,"total_fields":3},{"provider":"r2_backup","label":"Backup su Cloudflare R2","category":"Infrastructure","description":"Backup automatico giornaliero del database PostgreSQL su Cloudflare R2 (storage S3-compatibile, egress gratis). Crea su Cloudflare un bucket R2 e un API Token con permesso 'Object Read & Write': ottieni Access Key ID e Secret Access Key. L'Account ID è nell'endpoint https://<ACCOUNT_ID>.r2.cloudflarestorage.com. Il backup gira via job 'db_backup' (dump gzip → upload firmato SigV4).","fields":[{"key": "account_id", "label": "Account ID Cloudflare (dall'endpoint R2)", "is_secret": false, "placeholder": "a1b2c3d4e5f6..."}, {"key": "bucket", "label": "Nome bucket R2", "is_secret": false, "placeholder": "ihdra-hub-backup"}, {"key": "access_key_id", "label": "Access Key ID", "is_secret": false, "placeholder": "..."}, {"key": "secret_access_key", "label": "Secret Access Key", "is_secret": true, "placeholder": "..."}, {"key": "api_token", "label": "Token API R2 (opzionale, non necessario per il backup S3)", "is_secret": true, "placeholder": ""}, {"key": "backup_hour", "label": "Orario backup giornaliero (Europe/Rome, HH:MM — default 03:00)", "is_secret": false, "placeholder": "03:00"}, {"key": "retention_days", "label": "Giorni di ritenzione (info: impostare la regola lifecycle sul bucket R2)", "is_secret": false, "placeholder": "14"}, {"key": "exclude_media", "label": "Escludi la tabella media_files dal dump ('true' se i media pesano troppo)", "is_secret": false, "placeholder": "false"}],"status":"partial","configured_count":5,"total_fields":8},{"provider":"buffer","label":"Buffer (Social Publishing)","category":"Marketing","description":"Pubblicazione social via Buffer. Due API: (1) GraphQL (api.buffer.com) — pulsante '📤 Buffer' = invia il post come 'Idea' (usa access_token + organization_id + graphql_url). (2) REST legacy (api.bufferapp.com/1) — pulsante '📅 Programma su Buffer' = crea un post PROGRAMMATO su un canale, con l'immagine, alla data dell'item. Per la (2): crea un App Client su Buffer (developers), metti client_id + client_secret + redirect_uri (= l'URL del callback qui sotto), poi o incolli direttamente l'access token auto-generato dall'app in legacy_access_token, oppure apri https://bufferapp.com/oauth2/authorize?client_id=TUO_CLIENT_ID&redirect_uri=TUO_REDIRECT_URI&response_type=code e autorizzi (il callback salva il token da solo). channel_profiles: mappa canale->profileId Buffer in JSON, es. {\\\"instagram\\\":\\\"5abc\\\",\\\"facebook\\\":\\\"5def\\\"} (gli id sono in https://api.bufferapp.com/1/profiles.json?access_token=...).","fields":[{"key": "access_token", "label": "GraphQL Access Token (Idee)", "is_secret": true, "placeholder": "token Bearer (API key dashboard)"}, {"key": "organization_id", "label": "Organization ID", "is_secret": false, "placeholder": "69e0a1090be607735f96259b"}, {"key": "graphql_url", "label": "GraphQL Endpoint", "default": "https://api.buffer.com", "is_secret": false}, {"key": "client_id", "label": "App Client ID (REST legacy)", "is_secret": false, "placeholder": "da Buffer developers"}, {"key": "client_secret", "label": "App Client Secret (REST legacy)", "is_secret": true, "placeholder": "da Buffer developers"}, {"key": "redirect_uri", "label": "OAuth Redirect URI", "default": "https://hub.srv1583095.hstgr.cloud/api/webhooks/buffer/oauth-callback", "is_secret": false}, {"key": "legacy_access_token", "label": "REST legacy Access Token", "is_secret": true, "placeholder": "token auto-generato dall'app o riempito dall'OAuth callback"}, {"key": "legacy_base_url", "label": "REST legacy Base URL", "default": "https://api.bufferapp.com/1", "is_secret": false}, {"key": "channel_profiles", "label": "Canale -> Buffer profileId (JSON)", "is_secret": false, "placeholder": "{\"instagram\":\"5abc\",\"facebook\":\"5def\"}"}],"status":"partial","configured_count":8,"total_fields":9},{"provider":"brevo","label":"Brevo (Email Marketing)","category":"Marketing","description":"Email & marketing automation. Usato dai tool MCP brevo_account / brevo_contact (read-only). API key v3 da Brevo → SMTP &amp; API → API Keys. Header api-key, host api.brevo.com.","fields":[{"key": "api_key", "label": "API Key (v3)", "is_secret": true, "placeholder": "xkeysib-..."}],"status":"not_configured","configured_count":0,"total_fields":1},{"provider":"mailchimp","label":"Mailchimp (Email Marketing)","category":"Marketing","description":"Audience &amp; campagne email. Usato dai tool MCP mailchimp_lists / mailchimp_member (read-only). API key da Account → Extras → API keys; il datacenter (suffisso -usXX) viene estratto dalla key.","fields":[{"key": "api_key", "label": "API Key (con suffisso -usXX)", "is_secret": true, "placeholder": "xxxxxxxxxxxxxxxx-us21"}],"status":"not_configured","configured_count":0,"total_fields":1},{"provider":"ga4","label":"Google Analytics 4 (Data API)","category":"Analytics","description":"Report GA4 via Data API (tool MCP ga4_report, read-only). Crea un Service Account in Google Cloud, abilita 'Google Analytics Data API', condividi la proprietà GA4 con l'email del service account (ruolo Viewer). Property ID = numero della proprietà (GA4 → Amministrazione → Dettagli proprietà).","fields":[{"key": "property_id", "label": "GA4 Property ID", "is_secret": false, "placeholder": "123456789"}, {"key": "client_email", "label": "Service Account email", "is_secret": false, "placeholder": "xxx@yyy.iam.gserviceaccount.com"}, {"key": "private_key", "label": "Service Account private_key (PEM)", "is_secret": true, "placeholder": "-----BEGIN PRIVATE KEY-----..."}],"status":"not_configured","configured_count":0,"total_fields":3}]}