Marketing, messaging, tracking, video, payments and assistants.
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"
}
}
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
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
}
}