Destinations

Create, list, retrieve, update, and delete destinations in the Ours Privacy REST API, discover supported destination types, and configure destination-specific settings through the shared settings object.

Use this page to create, list, retrieve, update, and delete destinations in your account.

Where this fits in the dispatch flow

Destinations are the last stop:

Configuration changes at any stage take effect once you publish a new version.

A destination only receives an event if (1) an allowed event lists it on destinationIds, (2) no data-governance category stops dispatch, and (3) a mapping on this destination matches. Configuring a destination here without setting up the upstream stages will leave it idle.

Every destination's per-type configuration lives under the polymorphic settings object on both reads and writes.

Discover destination types

Before you create a destination, use the destination-type discovery endpoints to see which type values are available and which settings keys each one accepts.

These endpoints are read-only and account-agnostic. Use them to populate a destination picker in your UI or to generate infrastructure-as-code against the destinations API.

POST /destinations creates event-dispatch destinations only. Some warehouse and cloud-storage destination types may appear on read responses or in the broader platform, but they are not creatable through this REST POST surface.

Settings entries with type: Alert are informational messages displayed in the UI. Do not include their key in POST or PATCH settings.

Configuring a destination

POST and PATCH accept the configuration under settings.<key>:

curl -X POST "$BASE/rest/v1/destinations" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My Klaviyo",
    "type": "Klaviyo",
    "settings": { "projectAPIKey": "pk_live_..." }
  }'

GET returns the same shape — populated configuration is always under settings:

{
  "id": "885d88b9-...",
  "name": "My Klaviyo",
  "type": "Klaviyo",
  "status": "Enabled",
  "settings": { "projectAPIKey": "******" },
}

Secret-typed settings are masked as ****** in read responses. To rotate a secret, send a new value on PATCH; sending the masked value back preserves the stored secret.

Destination updates follow the standard API PATCH behavior documented in the API Overview. The destination-specific rule is that per-type configuration keys always live under settings.

POST and PATCH both return the full destination entity (the same shape as GET /rest/v1/destinations/{id}), so a follow-up GET to confirm a write is no longer required.

GET
/rest/v1/destinations
AuthorizationBearer <token>

Ours Privacy API key

In: header

Query Parameters

limit?|

Maximum number of items to return. Defaults to 25; values below 1 are clamped to 1 and values above 100 are clamped to 100.

cursor?string

Opaque pagination cursor from pagination.nextCursor in the previous response. Do not decode or modify it. Malformed cursors return 400 Bad Request.

status?string

Filter destinations by status.

Value in"Disabled" | "Enabled"
type?string

Filter destinations by destination type.

Value in"AWSEventBridge" | "AWSKinesis" | "AWSLambda" | "AWSS3" | "AWSSNS" | "ActiveCampaignApi" | "Admitad" | "AdobeAnalytics" | "AmazonDSP" | "Amplitude" | "AppLovin" | "ArtsAI" | "Attentive" | "Audiohook" | "AzureBlob" | "BasisPostback" | "BeeswaxPostback" | "BingAds" | "BingAdsWeb" | "Braze" | "ConvertABTestingEvent" | "Customerio" | "DomoWarehouse" | "Everflow" | "Facebook" | "FloodlightSGTM" | "FullContact" | "G4Analytics" | "GA4MeasurementProtocol" | "GA4ServerProxy" | "Google" | "GoogleAds360" | "GoogleAdsServerContainer" | "GoogleBigQuery" | "GoogleBigQueryWarehouse" | "GoogleDataManagerEventIngest" | "GooglePubSub" | "GoogleStorage" | "HTTPCustomRequest" | "HTTPDestination" | "Hubspot" | "IHeartMediaMagellan" | "Impact" | "Iterable" | "Klaviyo" | "LinkedInAdsCAPI" | "LiveIntent" | "LiveRampWarehouse" | "Mailchimp" | "Mixpanel" | "NextdoorAds" | "OursSyntheticData" | "Partnerize" | "Pinterest" | "Plausible" | "Podscribe" | "PostHog" | "QuantcastCAPI" | "QuoraAds" | "Reddit" | "RokuCAPI" | "SnapchatAdsCapi" | "Spotify" | "StackAdaptAPI" | "Taboola" | "Tatari" | "TheTradeDesk" | "TikTok" | "UniversalAds" | "VWO" | "Viant" | "ViantCAPI" | "Vibe" | "Woopra" | "XAds" | "Zendesk" | "ZoomInfo"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://app.oursprivacy.com/rest/v1/destinations"
{
  "entities": [
    {
      "id": "string",
      "name": "string",
      "type": "AWSEventBridge",
      "status": "Disabled",
      "createdAt": "string",
      "updatedAt": "string",
      "settings": {},
      "limitedToSourceIds": [
        "string"
      ],
      "hashingSalt": "string"
    }
  ],
  "pagination": {
    "nextCursor": "string",
    "hasMore": true
  }
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
POST
/rest/v1/destinations
*object
AuthorizationBearer <token>

Ours Privacy API key

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://app.oursprivacy.com/rest/v1/destinations" \  -H "Content-Type: application/json" \  -d '{    "type": "Audiohook"  }'
{
  "id": "string",
  "name": "string",
  "type": "AWSEventBridge",
  "status": "Disabled",
  "createdAt": "string",
  "updatedAt": "string",
  "settings": {},
  "limitedToSourceIds": [
    "string"
  ],
  "hashingSalt": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
GET
/rest/v1/destinations/types
AuthorizationBearer <token>

Ours Privacy API key

In: header

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://app.oursprivacy.com/rest/v1/destinations/types"
{
  "entities": [
    {
      "id": "Audiohook",
      "label": "string",
      "status": "deprecated",
      "capabilities": {
        "oauth": true,
        "listsAccounts": true,
        "supportsRenamedEvents": true
      },
      "settings": [
        {
          "key": "string",
          "type": "Alert",
          "label": "string"
        }
      ]
    }
  ]
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
GET
/rest/v1/destinations/{id}
AuthorizationBearer <token>

Ours Privacy API key

In: header

Path Parameters

id*string

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://app.oursprivacy.com/rest/v1/destinations/string"
{
  "id": "string",
  "name": "string",
  "type": "AWSEventBridge",
  "status": "Disabled",
  "createdAt": "string",
  "updatedAt": "string",
  "settings": {},
  "limitedToSourceIds": [
    "string"
  ],
  "hashingSalt": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
PATCH
/rest/v1/destinations/{id}
*object
AuthorizationBearer <token>

Ours Privacy API key

In: header

Path Parameters

id*string

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://app.oursprivacy.com/rest/v1/destinations/string" \  -H "Content-Type: application/json" \  -d '{}'
{
  "id": "string",
  "name": "string",
  "type": "AWSEventBridge",
  "status": "Disabled",
  "createdAt": "string",
  "updatedAt": "string",
  "settings": {},
  "limitedToSourceIds": [
    "string"
  ],
  "hashingSalt": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
DELETE
/rest/v1/destinations/{id}
AuthorizationBearer <token>

Ours Privacy API key

In: header

Path Parameters

id*string

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://app.oursprivacy.com/rest/v1/destinations/string"
true
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}
{
  "error": "string",
  "details": "string"
}

How is this guide?