Skip to content
cursareDocs
Sign inGet started
Documentation
  • Overview
  • Index2
  • Organization17
  • Sales6
  • Insights8
  • Reports and safety7
  • Minor accounts8
  • Minor safety3
  • Offers11
  • Media1
  • Contents10
  • Learner delivery1
  • Learner runtime5
  • Learners12
  • Cohorts12
  • Intake forms5
  • Campaigns4
  • Teams8
  • Affiliates7
  • Links7
  • Reviews1
  • Integrations26
  • MCP2
  • Webhooks6

Integrations

Marketing, messaging, tracking, video, payments and assistants.

26 endpoints

Get the four organization integration capabilities

GET/integrations

Returns secret-free status for Payments, Video, WhatsApp, and Google analytics. This is the only aggregate integration status operation. MCP, native affiliates, transactional email, API keys, and webhooks are separate platform capabilities.

Responses

200Get the four organization integration capabilities.
401Missing, invalid or revoked API key.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "analytics": {
      "active": true,
      "connected": true,
      "grantedCapabilities": {
        "analyticsRead": true,
        "tagManagerManage": true,
        "tagManagerRead": true
      },
      "identityEmail": "string",
      "issueCode": "authorization_revoked",
      "managedGtm": {
        "catalogVersion": 0,
        "destination": {
          "accountId": "string",
          "accountName": "string",
          "publicId": "string",
          "resourceId": "string",
          "resourceName": "string"
        },
        "fingerprint": "string",
        "preview": [
          {
            "action": "create",
            "kind": "tag",
            "name": "string"
          }
        ],
        "publishedAt": "2026-01-31T12:00:00.000Z"
      },
      "method": "direct_ga4",
      "reporting": {
        "connected": true,
        "issueCode": "authorization_revoked",
        "resource": {
          "accountId": "string",
          "accountName": "string",
          "publicId": "string",
          "resourceId": "string",
          "resourceName": "string"
        },
        "revision": "string"
      },
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "serverDelivery": {
        "configured": true,
        "issueCode": "credentials_rejected",
        "measurementId": "string"
      },
      "state": "not_connected"
    },
    "payments": {
      "accountId": "string",
      "checkoutUrl": "https://example.com",
      "connected": true,
      "id": "string",
      "name": "string",
      "provider": "stripe",
      "state": "not_connected"
    },
    "video": {
      "accountId": "string",
      "connected": true,
      "provider": "string",
      "state": "not_connected"
    },
    "whatsapp": {
      "connected": true,
      "notifyNumbers": [
        "string"
      ],
      "phoneNumber": "string",
      "state": "not_connected",
      "templateLanguage": "string",
      "templateName": "string"
    }
  }
}

Get Google integration status

GET/integrations/google

Returns the safe Google identity, chosen delivery method, named resource, activation state, granted capabilities, and actionable issue code. Tokens are never returned.

Responses

200Get Google integration status.
401Missing, invalid or revoked API key.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "active": true,
    "connected": true,
    "grantedCapabilities": {
      "analyticsRead": true,
      "tagManagerManage": true,
      "tagManagerRead": true
    },
    "identityEmail": "string",
    "issueCode": "authorization_revoked",
    "managedGtm": {
      "catalogVersion": 0,
      "destination": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "fingerprint": "string",
      "preview": [
        {
          "action": "create",
          "kind": "tag",
          "name": "string"
        }
      ],
      "publishedAt": "2026-01-31T12:00:00.000Z"
    },
    "method": "direct_ga4",
    "reporting": {
      "connected": true,
      "issueCode": "authorization_revoked",
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "revision": "string"
    },
    "resource": {
      "accountId": "string",
      "accountName": "string",
      "publicId": "string",
      "resourceId": "string",
      "resourceName": "string"
    },
    "serverDelivery": {
      "configured": true,
      "issueCode": "credentials_rejected",
      "measurementId": "string"
    },
    "state": "not_connected"
  }
}

Disconnect Google

DELETE/integrations/google

Deletes the encrypted refresh token, identity, selections, managed drafts, and public tracking projection. It does not change Google resources. Organization administrator only.

Responses

200Disconnect Google.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google \
  --request DELETE \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "deleted": true
  }
}

Start Google authorization

POST/integrations/google/authorize

Starts session-bound Google OAuth with PKCE for either read-only Google Analytics discovery or read-only Tag Manager discovery. Must be opened from the active organization browser session. Organization administrator only.

Request body

methodenumrequired

The exclusive delivery method being configured.

direct_ga4gtm

Responses

200Start Google authorization.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/authorize \
  --request POST \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "method": "direct_ga4"
}'
{
  "data": {
    "authorizationUrl": "https://example.com"
  }
}

Reconnect or replace the Google identity

POST/integrations/google/reconnect

Starts a new PKCE authorization for the selected method. A different Google identity clears prior resource selections before it can be activated. Organization administrator only.

Request body

methodenumrequired

direct_ga4gtm

Responses

200Reconnect or replace the Google identity.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/reconnect \
  --request POST \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "method": "direct_ga4"
}'
{
  "data": {
    "authorizationUrl": "https://example.com"
  }
}

List accessible Google resources

GET/integrations/google/resources

Discovers human-readable GA4 web streams or GTM web containers available to the connected identity. Raw identifiers cannot be submitted without appearing in this result. Organization administrator only.

Query parameters

methodenumrequired

direct_ga4gtm

Responses

200List accessible Google resources.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/resources \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": [
    {
      "accountId": "string",
      "accountName": "string",
      "publicId": "string",
      "resourceId": "string",
      "resourceName": "string"
    }
  ]
}

Select a discovered Google resource

PUT/integrations/google/resource

Re-discovers provider resources and accepts only a resource the connected identity can currently access. Selection does not activate tracking. Organization administrator only.

Request body

methodenumrequired

direct_ga4gtm

resourceIdstringrequired

Provider resource path returned by discovery.

Responses

200Select a discovered Google resource.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/resource \
  --request PUT \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "method": "direct_ga4",
  "resourceId": "string"
}'
{
  "data": {
    "active": true,
    "connected": true,
    "grantedCapabilities": {
      "analyticsRead": true,
      "tagManagerManage": true,
      "tagManagerRead": true
    },
    "identityEmail": "string",
    "issueCode": "authorization_revoked",
    "managedGtm": {
      "catalogVersion": 0,
      "destination": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "fingerprint": "string",
      "preview": [
        {
          "action": "create",
          "kind": "tag",
          "name": "string"
        }
      ],
      "publishedAt": "2026-01-31T12:00:00.000Z"
    },
    "method": "direct_ga4",
    "reporting": {
      "connected": true,
      "issueCode": "authorization_revoked",
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "revision": "string"
    },
    "resource": {
      "accountId": "string",
      "accountName": "string",
      "publicId": "string",
      "resourceId": "string",
      "resourceName": "string"
    },
    "serverDelivery": {
      "configured": true,
      "issueCode": "credentials_rejected",
      "measurementId": "string"
    },
    "state": "not_connected"
  }
}

Activate the selected Google delivery method

POST/integrations/google/activate

Activates exactly one selected GA4 or GTM resource for eligible public tenant pages. Consent still controls whether the script loads. Organization administrator only.

Responses

200Activate the selected Google delivery method.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/activate \
  --request POST \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "active": true,
    "connected": true,
    "grantedCapabilities": {
      "analyticsRead": true,
      "tagManagerManage": true,
      "tagManagerRead": true
    },
    "identityEmail": "string",
    "issueCode": "authorization_revoked",
    "managedGtm": {
      "catalogVersion": 0,
      "destination": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "fingerprint": "string",
      "preview": [
        {
          "action": "create",
          "kind": "tag",
          "name": "string"
        }
      ],
      "publishedAt": "2026-01-31T12:00:00.000Z"
    },
    "method": "direct_ga4",
    "reporting": {
      "connected": true,
      "issueCode": "authorization_revoked",
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "revision": "string"
    },
    "resource": {
      "accountId": "string",
      "accountName": "string",
      "publicId": "string",
      "resourceId": "string",
      "resourceName": "string"
    },
    "serverDelivery": {
      "configured": true,
      "issueCode": "credentials_rejected",
      "measurementId": "string"
    },
    "state": "not_connected"
  }
}

Disable Google tracking

POST/integrations/google/disable

Stops public script delivery while preserving the identity, method, and resource so setup can be resumed. Organization administrator only.

Responses

200Disable Google tracking.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/disable \
  --request POST \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "active": true,
    "connected": true,
    "grantedCapabilities": {
      "analyticsRead": true,
      "tagManagerManage": true,
      "tagManagerRead": true
    },
    "identityEmail": "string",
    "issueCode": "authorization_revoked",
    "managedGtm": {
      "catalogVersion": 0,
      "destination": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "fingerprint": "string",
      "preview": [
        {
          "action": "create",
          "kind": "tag",
          "name": "string"
        }
      ],
      "publishedAt": "2026-01-31T12:00:00.000Z"
    },
    "method": "direct_ga4",
    "reporting": {
      "connected": true,
      "issueCode": "authorization_revoked",
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "revision": "string"
    },
    "resource": {
      "accountId": "string",
      "accountName": "string",
      "publicId": "string",
      "resourceId": "string",
      "resourceName": "string"
    },
    "serverDelivery": {
      "configured": true,
      "issueCode": "credentials_rejected",
      "measurementId": "string"
    },
    "state": "not_connected"
  }
}

Configure reliable GA4 server delivery

PUT/integrations/google/server-delivery

Encrypts an organization-owned GA4 Measurement Protocol secret for consent-linked server events. The secret is write-only and is never returned by status or API responses. Organization administrator only.

Request body

apiSecretstringrequired
measurementIdstringrequired

Responses

200Configure reliable GA4 server delivery.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/server-delivery \
  --request PUT \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "apiSecret": "string",
  "measurementId": "string"
}'
{
  "data": {
    "active": true,
    "connected": true,
    "grantedCapabilities": {
      "analyticsRead": true,
      "tagManagerManage": true,
      "tagManagerRead": true
    },
    "identityEmail": "string",
    "issueCode": "authorization_revoked",
    "managedGtm": {
      "catalogVersion": 0,
      "destination": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "fingerprint": "string",
      "preview": [
        {
          "action": "create",
          "kind": "tag",
          "name": "string"
        }
      ],
      "publishedAt": "2026-01-31T12:00:00.000Z"
    },
    "method": "direct_ga4",
    "reporting": {
      "connected": true,
      "issueCode": "authorization_revoked",
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "revision": "string"
    },
    "resource": {
      "accountId": "string",
      "accountName": "string",
      "publicId": "string",
      "resourceId": "string",
      "resourceName": "string"
    },
    "serverDelivery": {
      "configured": true,
      "issueCode": "credentials_rejected",
      "measurementId": "string"
    },
    "state": "not_connected"
  }
}

Disable reliable GA4 server delivery

DELETE/integrations/google/server-delivery

Deletes the encrypted Measurement Protocol secret and stops future server delivery without changing authoritative Cursare facts or browser tracking. Organization administrator only.

Responses

200Disable reliable GA4 server delivery.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/server-delivery \
  --request DELETE \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "active": true,
    "connected": true,
    "grantedCapabilities": {
      "analyticsRead": true,
      "tagManagerManage": true,
      "tagManagerRead": true
    },
    "identityEmail": "string",
    "issueCode": "authorization_revoked",
    "managedGtm": {
      "catalogVersion": 0,
      "destination": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "fingerprint": "string",
      "preview": [
        {
          "action": "create",
          "kind": "tag",
          "name": "string"
        }
      ],
      "publishedAt": "2026-01-31T12:00:00.000Z"
    },
    "method": "direct_ga4",
    "reporting": {
      "connected": true,
      "issueCode": "authorization_revoked",
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "revision": "string"
    },
    "resource": {
      "accountId": "string",
      "accountName": "string",
      "publicId": "string",
      "resourceId": "string",
      "resourceName": "string"
    },
    "serverDelivery": {
      "configured": true,
      "issueCode": "credentials_rejected",
      "measurementId": "string"
    },
    "state": "not_connected"
  }
}

Select the GA4 property used by Insights

PUT/integrations/google/reporting

Re-discovers accessible GA4 web streams and selects one for source-labeled acquisition reports. This capability is independent from browser and Measurement Protocol delivery. Organization administrator only.

Request body

resourceIdstringrequired

A GA4 web stream returned by resource discovery.

Responses

200Select the GA4 property used by Insights.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/reporting \
  --request PUT \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "resourceId": "string"
}'
{
  "data": {
    "active": true,
    "connected": true,
    "grantedCapabilities": {
      "analyticsRead": true,
      "tagManagerManage": true,
      "tagManagerRead": true
    },
    "identityEmail": "string",
    "issueCode": "authorization_revoked",
    "managedGtm": {
      "catalogVersion": 0,
      "destination": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "fingerprint": "string",
      "preview": [
        {
          "action": "create",
          "kind": "tag",
          "name": "string"
        }
      ],
      "publishedAt": "2026-01-31T12:00:00.000Z"
    },
    "method": "direct_ga4",
    "reporting": {
      "connected": true,
      "issueCode": "authorization_revoked",
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "revision": "string"
    },
    "resource": {
      "accountId": "string",
      "accountName": "string",
      "publicId": "string",
      "resourceId": "string",
      "resourceName": "string"
    },
    "serverDelivery": {
      "configured": true,
      "issueCode": "credentials_rejected",
      "measurementId": "string"
    },
    "state": "not_connected"
  }
}

Disconnect Google reports from Insights

DELETE/integrations/google/reporting

Clears the separately selected GA4 reporting property. Cursare's internal insights and Google delivery settings remain unchanged. Organization administrator only.

Responses

200Disconnect Google reports from Insights.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/reporting \
  --request DELETE \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "active": true,
    "connected": true,
    "grantedCapabilities": {
      "analyticsRead": true,
      "tagManagerManage": true,
      "tagManagerRead": true
    },
    "identityEmail": "string",
    "issueCode": "authorization_revoked",
    "managedGtm": {
      "catalogVersion": 0,
      "destination": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "fingerprint": "string",
      "preview": [
        {
          "action": "create",
          "kind": "tag",
          "name": "string"
        }
      ],
      "publishedAt": "2026-01-31T12:00:00.000Z"
    },
    "method": "direct_ga4",
    "reporting": {
      "connected": true,
      "issueCode": "authorization_revoked",
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "revision": "string"
    },
    "resource": {
      "accountId": "string",
      "accountName": "string",
      "publicId": "string",
      "resourceId": "string",
      "resourceName": "string"
    },
    "serverDelivery": {
      "configured": true,
      "issueCode": "credentials_rejected",
      "measurementId": "string"
    },
    "state": "not_connected"
  }
}

Authorize Google Analytics report access

POST/integrations/google/reporting/authorize

Starts incremental, session-bound OAuth consent for read-only Analytics reports without enabling Tag Manager management or changing the selected browser delivery method. Organization administrator only.

Responses

200Authorize Google Analytics report access.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/reporting/authorize \
  --request POST \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "authorizationUrl": "https://example.com"
  }
}

Resume Google setup after OAuth

GET/integrations/google/oauth-result

Returns the current safe status together with the browser callback outcome so an interrupted or completed wizard can resume from persisted setup state.

Query parameters

resultenumrequired

OAuth callback outcome.

connectedcancelledfailed

Responses

200Resume Google setup after OAuth.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/oauth-result \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "result": "connected",
    "status": {
      "active": true,
      "connected": true,
      "grantedCapabilities": {
        "analyticsRead": true,
        "tagManagerManage": true,
        "tagManagerRead": true
      },
      "identityEmail": "string",
      "issueCode": "authorization_revoked",
      "managedGtm": {
        "catalogVersion": 0,
        "destination": {
          "accountId": "string",
          "accountName": "string",
          "publicId": "string",
          "resourceId": "string",
          "resourceName": "string"
        },
        "fingerprint": "string",
        "preview": [
          {
            "action": "create",
            "kind": "tag",
            "name": "string"
          }
        ],
        "publishedAt": "2026-01-31T12:00:00.000Z"
      },
      "method": "direct_ga4",
      "reporting": {
        "connected": true,
        "issueCode": "authorization_revoked",
        "resource": {
          "accountId": "string",
          "accountName": "string",
          "publicId": "string",
          "resourceId": "string",
          "resourceName": "string"
        },
        "revision": "string"
      },
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "serverDelivery": {
        "configured": true,
        "issueCode": "credentials_rejected",
        "measurementId": "string"
      },
      "state": "not_connected"
    }
  }
}

Authorize managed Tag Manager setup

POST/integrations/google/gtm/authorize

Starts incremental Google consent for Analytics discovery plus Tag Manager edit and publish access. The existing read-only connection remains usable if consent is cancelled. Organization administrator only.

Responses

200Authorize managed Tag Manager setup.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/gtm/authorize \
  --request POST \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "authorizationUrl": "https://example.com"
  }
}

Prepare and preview managed Tag Manager changes

PUT/integrations/google/gtm/preview

Creates or updates only Cursare-owned entities in an isolated workspace and returns their exact safe preview. The live container version is not changed. The GA4 destination must be a currently accessible discovered stream. Organization administrator only.

Request body

ga4ResourceIdstringrequired

Provider resource path of a GA4 web stream returned by discovery.

Responses

200Prepare and preview managed Tag Manager changes.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/gtm/preview \
  --request PUT \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "ga4ResourceId": "string"
}'
{
  "data": {
    "active": true,
    "connected": true,
    "grantedCapabilities": {
      "analyticsRead": true,
      "tagManagerManage": true,
      "tagManagerRead": true
    },
    "identityEmail": "string",
    "issueCode": "authorization_revoked",
    "managedGtm": {
      "catalogVersion": 0,
      "destination": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "fingerprint": "string",
      "preview": [
        {
          "action": "create",
          "kind": "tag",
          "name": "string"
        }
      ],
      "publishedAt": "2026-01-31T12:00:00.000Z"
    },
    "method": "direct_ga4",
    "reporting": {
      "connected": true,
      "issueCode": "authorization_revoked",
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "revision": "string"
    },
    "resource": {
      "accountId": "string",
      "accountName": "string",
      "publicId": "string",
      "resourceId": "string",
      "resourceName": "string"
    },
    "serverDelivery": {
      "configured": true,
      "issueCode": "credentials_rejected",
      "measurementId": "string"
    },
    "state": "not_connected"
  }
}

Publish reviewed managed Tag Manager changes

POST/integrations/google/gtm/publish

Creates and publishes a container version only when the submitted preview fingerprint still matches the saved Cursare workspace draft. Failed publication preserves the draft for retry. Organization administrator only.

Request body

fingerprintstringrequired

Fingerprint returned with the administrator-reviewed draft.

Responses

200Publish reviewed managed Tag Manager changes.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/google/gtm/publish \
  --request POST \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "fingerprint": "string"
}'
{
  "data": {
    "active": true,
    "connected": true,
    "grantedCapabilities": {
      "analyticsRead": true,
      "tagManagerManage": true,
      "tagManagerRead": true
    },
    "identityEmail": "string",
    "issueCode": "authorization_revoked",
    "managedGtm": {
      "catalogVersion": 0,
      "destination": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "fingerprint": "string",
      "preview": [
        {
          "action": "create",
          "kind": "tag",
          "name": "string"
        }
      ],
      "publishedAt": "2026-01-31T12:00:00.000Z"
    },
    "method": "direct_ga4",
    "reporting": {
      "connected": true,
      "issueCode": "authorization_revoked",
      "resource": {
        "accountId": "string",
        "accountName": "string",
        "publicId": "string",
        "resourceId": "string",
        "resourceName": "string"
      },
      "revision": "string"
    },
    "resource": {
      "accountId": "string",
      "accountName": "string",
      "publicId": "string",
      "resourceId": "string",
      "resourceName": "string"
    },
    "serverDelivery": {
      "configured": true,
      "issueCode": "credentials_rejected",
      "measurementId": "string"
    },
    "state": "not_connected"
  }
}

Connect or replace WhatsApp credentials

PUT/integrations/whatsapp

Validates and stores the organization's WhatsApp Cloud API credentials. Secrets are write-only. Organization administrator only.

Request body

accessTokenstringrequired
notifyNumbersstring[]required
phoneNumberIdstringrequired
templateLanguagestring | null
templateNamestring | null

Responses

200Connect or replace WhatsApp credentials.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/whatsapp \
  --request PUT \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "accessToken": "string",
  "notifyNumbers": [
    "string"
  ],
  "phoneNumberId": "string",
  "templateLanguage": "string",
  "templateName": "string"
}'
{
  "data": {
    "connected": true,
    "notifyNumbers": [
      "string"
    ],
    "phoneNumber": "string",
    "state": "not_connected",
    "templateLanguage": "string",
    "templateName": "string"
  }
}

Disconnect WhatsApp

DELETE/integrations/whatsapp

Removes the WhatsApp connection and stops operational notifications without changing the Meta account. Organization administrator only.

Responses

200Disconnect WhatsApp.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/whatsapp \
  --request DELETE \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "deleted": true
  }
}

Replace WhatsApp credentials

PUT/integrations/whatsapp/credentials

Validates and replaces the phone identity and encrypted access token without changing notification recipients or template settings. Organization administrator only.

Request body

accessTokenstringrequired
phoneNumberIdstringrequired

Responses

200Replace WhatsApp credentials.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/whatsapp/credentials \
  --request PUT \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "accessToken": "string",
  "phoneNumberId": "string"
}'
{
  "data": {
    "connected": true,
    "notifyNumbers": [
      "string"
    ],
    "phoneNumber": "string",
    "state": "not_connected",
    "templateLanguage": "string",
    "templateName": "string"
  }
}

Update WhatsApp notification settings

PATCH/integrations/whatsapp/settings

Changes operational recipients and the approved template without asking for credentials again. Organization administrator only.

Request body

notifyNumbersstring[]required
templateLanguagestring | null
templateNamestring | null

Responses

200Update WhatsApp notification settings.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/whatsapp/settings \
  --request PATCH \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "notifyNumbers": [
    "string"
  ],
  "templateLanguage": "string",
  "templateName": "string"
}'
{
  "data": {
    "connected": true,
    "notifyNumbers": [
      "string"
    ],
    "phoneNumber": "string",
    "state": "not_connected",
    "templateLanguage": "string",
    "templateName": "string"
  }
}

Send a real WhatsApp test notification

POST/integrations/whatsapp/test

Sends a real message to the configured recipients and reports provider failures. Organization administrator only.

Responses

200Send a real WhatsApp test notification.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/whatsapp/test \
  --request POST \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "sent": true
  }
}

Disconnect Cloudflare Stream

DELETE/integrations/video

Removes credentials for new uploads. Existing Cloudflare videos remain untouched. Organization administrator only.

Responses

200Disconnect Cloudflare Stream.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/video \
  --request DELETE \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "deleted": true
  }
}

Create a direct Cloudflare Stream upload

POST/integrations/video/uploads

Creates a one-time direct-upload URL. Video bytes travel from the browser to Cloudflare and never pass through Cursare.

Request body

maxDurationSecondsinteger

Responses

201Create a direct Cloudflare Stream upload.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/video/uploads \
  --request POST \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "maxDurationSeconds": 0
}'
{
  "data": {
    "uid": "string",
    "uploadURL": "https://example.com"
  }
}

Disconnect payments

DELETE/integrations/payments

Removes the active payment connection. Paid checkout stops until a new provider is connected. Organization administrator only.

Responses

200Disconnect payments.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/integrations/payments \
  --request DELETE \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "deleted": true
  }
}

Your privacy choices

The technical Tag Manager container is required to apply your choices. Analytics and marketing cookies and storage remain optional and stay off until you authorize them. Privacy Policy.

Sign-in, security, core functions and consent enforcement.

Audience measurement such as Google Analytics.

Marketing storage, campaign attribution and optional tags.