GetCAPI
OverviewContainersSignals GatewayDomainsCustom LoaderPower-upsTemplatesIntegrationsLogsEvent TesterData StoreConsent AnalyticsBetaAlerts
Help & SupportLove GetCAPI? Leave a review
Back to Help

Signals API Documentation

Learn how to send server-side events directly to ad platforms using the Signals Gateway API.

What is Signals Gateway?

Signals Gateway lets you send conversion events directly to ad platforms like Meta, TikTok, and Google without setting up server-side GTM. It's the fastest way to improve your attribution data.

Direct Integration

Send events via simple HTTP POST

Secure & Private

API key authentication, HTTPS only

Multi-Platform

One API, all major ad platforms

Quick Start
Get up and running in 3 simple steps
1

Get your API key

Create an API key from the Signals Gateway page. Keep it secure - you'll need it for authentication.

Create API Key
2

Connect your platforms

Link the ad platforms you want to send events to (Meta, TikTok, Google, etc.).

Connect Platforms
3

Send events

POST conversion events to our API endpoint. We'll route them to all connected platforms.

Authentication
All API requests require authentication

Include your API key in the X-API-Key header with every request. API keys start with 'capi_' and should be kept confidential.

X-API-Key: capi_xxxxxxxxxxxxxxxxxxxxxxxxxxxx

Keep your API key secret

Never expose your API key in client-side code. Always make API calls from your server.

API Endpoint
Send events to this endpoint
POSThttps://api.getcapi.co/api/v1/events

Headers

HeaderRequiredDescription
Content-TypeRequiredMust be application/json
X-API-KeyRequiredYour GetCapi API key
Request Body
JSON payload structure for sending events
FieldTypeRequiredDescription
event_namestringRequiredStandard event name (e.g., Purchase, Lead, PageView)
event_typestringRequiredEither 'conversion' or 'engagement'
container_idstringRequiredYour GetCapi container ID
payloadobjectRequiredEvent-specific data (value, currency, items, etc.)
user_dataobjectOptionalUser identifiers for matching (email, phone, etc.)
event_idstringOptionalUnique ID for deduplication
event_timenumberOptionalUnix timestamp in milliseconds
metadataobjectOptionalAdditional custom data

User Data Fields

FieldDescriptionExample
emailUser's email address (will be hashed)customer@example.com
phonePhone number in E.164 format+1234567890
external_idYour internal user IDuser_123
first_nameUser's first nameJohn
last_nameUser's last nameDoe
fbpFacebook browser pixel cookiefb.1.1234567890.1234567890
fbcFacebook click ID cookiefb.1.1234567890.AbCdEfGhIj
Code Examples
Copy these examples to get started quickly
curl -X POST https://api.getcapi.co/api/v1/events \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "event_name": "Purchase",
    "event_type": "conversion",
    "container_id": "YOUR_CONTAINER_ID",
    "payload": {
      "value": 99.99,
      "currency": "USD",
      "transaction_id": "txn_123456"
    },
    "user_data": {
      "email": "customer@example.com",
      "phone": "+1234567890",
      "external_id": "user_123"
    },
    "event_id": "evt_unique_123",
    "event_time": 1704067200000
  }'
Standard Event Types
Use these standard event names for best platform compatibility

PageView

User viewed a page

engagement

ViewContent

User viewed specific content/product

engagement

AddToCart

User added item to cart

engagement

InitiateCheckout

User started checkout process

conversion

Purchase

User completed a purchase

conversion

Lead

User submitted lead form

conversion

CompleteRegistration

User completed registration

conversion

Subscribe

User subscribed to service

conversion

Contact

User submitted contact form

conversion

Search

User performed a search

engagement
Response
What to expect from the API

Success Response (201 Created)

{
  "id": "evt_abc123",
  "event_name": "Purchase",
  "event_type": "conversion",
  "status": "success",
  "webhooks_triggered": 3,
  "created_at": "2024-01-01T12:00:00Z",
  "is_duplicate": false
}

Error Response

{
  "detail": "Container not found or you don't have access to it"
}
Status CodeDescription
201Event created successfully
200Duplicate event detected (already processed)
400Invalid request body or missing required fields
401Missing or invalid API key
403API key doesn't have access to container
404Container not found
429Rate limit exceeded
Rate Limiting

The API implements rate limiting to ensure fair usage. Check these headers in responses:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed per window
X-RateLimit-RemainingRequests remaining in current window
Retry-AfterSeconds to wait before retrying (on 429)

Default Limits

Free plan: 100 requests/minute. Pro plan: 1,000 requests/minute. Enterprise: Custom limits available.

Event Deduplication
Prevent duplicate events from being processed

We automatically deduplicate events based on the event_id field. If you send the same event_id twice within 48 hours, the second request will return 200 instead of 201, and the event won't be processed again.

Best Practice

Generate a unique event_id for each event. A good pattern is combining a timestamp with a random string:

event_id: `evt_${Date.now()}_${Math.random().toString(36).slice(2)}`
Testing Your Integration

Event Tester

Use our built-in Event Tester to send test events and see real-time results.

Open Event Tester

Event Logs

View all processed events and their status in the logs.

View Logs

Need Help?

Our support team is here to help you integrate.

Contact Support