{"openapi":"3.0.0","info":{"title":"ConversionLoop","description":"Connect any CRM to Google Ads, Meta CAPI, and OpenAI Ads. Track offline conversions server-side — no code required.\n\nGet your API key at https://conversion-loop.com/app/api-keys","version":"1.0.0"},"servers":[{"url":"https://conversion-loop.com","description":"Production"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"Get your key at https://conversion-loop.com/app/api-keys (format: clk_...)"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"integer"}}}}},"paths":{"/api/v1/tools/list_integrations":{"post":{"operationId":"list_integrations","summary":"List integrations","description":"Return all your ConversionLoop integrations with status, source platform, destination, and conversion counts.","tags":["Integrations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"list_integrations"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/get_integration":{"post":{"operationId":"get_integration","summary":"Get a single integration","description":"Return full details for one integration including event mappings and webhook URL.","tags":["Integrations"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"integration_id":{"type":"string","description":"The integration UUID"}},"required":["integration_id"]},"example":{"integration_id":"uuid-here"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"get_integration"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/create_integration":{"post":{"operationId":"create_integration","summary":"Create a new integration","description":"Create a fully configured integration end-to-end — source platform, ad destination, credentials, and event mappings. Returns the webhook URL to paste into the source platform. For OAuth platforms (Salesforce, Zoho, ServiceTitan) returns setup instructions.","tags":["Integrations"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Descriptive name, e.g. 'HubSpot → Google Ads'"},"source":{"type":"string","description":"Source platform. One of: hubspot, ghl, pabau, blvd, mindbody, marianatek, acuity, stripe, pipedrive, close, jobber, jane, salesforce, zoho, servicetitan","enum":["hubspot","ghl","pabau","blvd","mindbody","marianatek","acuity","stripe","pipedrive","close","jobber","jane","salesforce","zoho","servicetitan"]},"destination":{"type":"string","description":"Ad platform destination. One of: googleads, meta, openai","enum":["googleads","meta","openai"]},"credentials":{"type":"object","description":"Platform credentials as key-value pairs. HubSpot: {api_key}. GHL: {api_key}. Pabau: {api_key}. Stripe: {webhook_secret}. Pipedrive: {api_key}. Close: {api_key}. Jobber: {access_token}. Jane: {api_key, clinic_id}. Salesforce/Zoho/ServiceTitan: leave empty."},"destination_credentials":{"type":"object","description":"Ad platform credentials. Google Ads: {customer_id, conversion_label}. Meta CAPI: {pixel_id, access_token}. OpenAI Ads: {pixel_id}."},"event_mappings":{"type":"array","description":"Event mappings. If omitted, sensible defaults are applied for the source platform.","items":{"type":"object","properties":{"source_event":{"type":"string","description":"e.g. 'Deal: Closed Won'"},"dest_event":{"type":"string","description":"e.g. 'Purchase', 'Lead', 'Schedule'"},"dest_conversion_id":{"type":"string","description":"Google Ads conversion label or Meta event name (optional)"}},"required":["source_event","dest_event"]}}},"required":["name","source","destination"]},"example":{"name":"HubSpot → Google Ads","source":"hubspot","destination":"googleads","credentials":{"api_key":"pat-na1-..."}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"create_integration"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/pause_integration":{"post":{"operationId":"pause_integration","summary":"Pause an integration","description":"Pause an active integration to stop it from firing conversion events.","tags":["Integrations"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"integration_id":{"type":"string","description":"The integration UUID to pause"}},"required":["integration_id"]},"example":{"integration_id":"uuid-here"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"pause_integration"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/resume_integration":{"post":{"operationId":"resume_integration","summary":"Resume an integration","description":"Resume a paused integration.","tags":["Integrations"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"integration_id":{"type":"string","description":"The integration UUID to resume"}},"required":["integration_id"]},"example":{"integration_id":"uuid-here"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"resume_integration"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/delete_integration":{"post":{"operationId":"delete_integration","summary":"Delete an integration","description":"Permanently delete an integration and all its event history. Cannot be undone.","tags":["Integrations"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"integration_id":{"type":"string","description":"The integration UUID to delete"},"confirm":{"type":"boolean","description":"Must be true to confirm deletion"}},"required":["integration_id","confirm"]},"example":{"integration_id":"uuid-here","confirm":true}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"delete_integration"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/get_stats":{"post":{"operationId":"get_stats","summary":"Get dashboard stats","description":"Return dashboard statistics: total integrations, total conversions fired, match rate (% with GCLID/FBCLID), and 7-day conversion trend.","tags":["Analytics"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"get_stats"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/list_events":{"post":{"operationId":"list_events","summary":"List recent conversion events","description":"Return recent server-side conversion events with match quality, attribution signals (GCLID/FBCLID), and which ad platforms were fired.","tags":["Analytics"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Max events to return (default 20, max 100)"},"integration_id":{"type":"string","description":"Filter to a specific integration (optional)"}}},"example":{"limit":20}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"list_events"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/get_webhook_url":{"post":{"operationId":"get_webhook_url","summary":"Get webhook URL","description":"Return the webhook URL for an integration — paste this into the source platform (CRM, booking system, etc.) to start sending events.","tags":["Integrations"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"integration_id":{"type":"string","description":"The integration UUID"}},"required":["integration_id"]},"example":{"integration_id":"uuid-here"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"get_webhook_url"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/fire_test_event":{"post":{"operationId":"fire_test_event","summary":"Fire a test conversion event","description":"Send a test conversion through an integration to verify the webhook and destination routing are working end-to-end.","tags":["Testing"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"integration_id":{"type":"string","description":"The integration UUID to test"}},"required":["integration_id"]},"example":{"integration_id":"uuid-here"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"fire_test_event"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/create_event_mapping":{"post":{"operationId":"create_event_mapping","summary":"Add an event mapping","description":"Map a source platform event (e.g. invoice_paid) to a destination conversion event (e.g. Purchase).","tags":["Integrations"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"integration_id":{"type":"string","description":"The integration UUID"},"source_event":{"type":"string","description":"Source event name, e.g. 'Deal: Closed Won'"},"dest_event":{"type":"string","description":"Destination event name, e.g. 'Purchase', 'Lead', 'Schedule'"},"dest_conversion_id":{"type":"string","description":"Google Ads conversion label or Meta event name (optional)"}},"required":["integration_id","source_event","dest_event"]},"example":{"integration_id":"uuid-here","source_event":"Deal: Closed Won","dest_event":"Purchase"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"create_event_mapping"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/delete_event_mapping":{"post":{"operationId":"delete_event_mapping","summary":"Remove an event mapping","description":"Remove a specific event mapping from an integration.","tags":["Integrations"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mapping_id":{"type":"string","description":"The event mapping UUID to delete"}},"required":["mapping_id"]},"example":{"mapping_id":"mapping-uuid-here"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"delete_event_mapping"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/list_sources":{"post":{"operationId":"list_sources","summary":"List supported source platforms","description":"Return all 15 supported source platforms (CRMs, booking systems, payment processors) with their auth type and category.","tags":["Discovery"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"list_sources"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tools/list_destinations":{"post":{"operationId":"list_destinations","summary":"List ad platform destinations","description":"Return all supported ad platform destinations: Google Ads (offline conversions via GCLID), Meta CAPI (server-side via FBCLID), and OpenAI Ads (server-side CAPI).","tags":["Discovery"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"tool":{"type":"string","example":"list_destinations"},"result":{"type":"object","description":"Tool-specific result data"}}}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"tags":[{"name":"Integrations","description":"Create and manage source→destination integrations"},{"name":"Analytics","description":"Conversion event data and match quality stats"},{"name":"Testing","description":"Test and validate your integrations"},{"name":"Discovery","description":"Discover supported platforms and destinations"}]}