curl --request POST \
--url 'https://api.growthchannel.io/growth-channel-postback/' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: YOUR_API_KEY' \
--data '{
"ref_id": "abc123xyz",
"event_name": "user_converted",
"revenue": 123,
"conversion_data": {
"order_id": "order_98765",
"lead_source": "callrail"
}
}'
Public endpoints
Conversion Postback
Send server-side conversion events to Growth Channel.
POST
/
growth-channel-postback
/
curl --request POST \
--url 'https://api.growthchannel.io/growth-channel-postback/' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: YOUR_API_KEY' \
--data '{
"ref_id": "abc123xyz",
"event_name": "user_converted",
"revenue": 123,
"conversion_data": {
"order_id": "order_98765",
"lead_source": "callrail"
}
}'
This endpoint is protected and requires an agency API key for access.
curl --request POST \
--url 'https://api.growthchannel.io/growth-channel-postback/' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: YOUR_API_KEY' \
--data '{
"ref_id": "abc123xyz",
"event_name": "user_converted",
"revenue": 123,
"conversion_data": {
"order_id": "order_98765",
"lead_source": "callrail"
}
}'
Method
POSTEndpoint
/growth-channel-postback/Overview
Use this endpoint to send server-side conversion events to Growth Channel. The client should capture a unique tracking ID from the campaign landing URL and send it back when a conversion happens.Send
ref_id for every conversion. Add event_name, revenue, tracker_id, and conversion_data when you need more specific attribution or reporting metadata.Headers
string
required
The agency’s API key for authorization. Contact an admin to get one.
string
required
application/json. Form-encoded bodies are also accepted.Body
string
required
Unique tracking ID captured from the landing page URL.
string
Conversion tracker ID when the conversion should be attributed to a specific tracker.
string
Name of the conversion event, for example
user_converted or phone_call.number
Revenue amount for the conversion.
object
Additional metadata for the conversion, as key-value pairs. You can send any keys; values are sent as text. Empty values are ignored. The keys below are examples.
Setup Guide
1
Add a tracking ID to the landing URL
Add a tracking ID macro to the campaign landing URL.
https://example.com/track?ref_id={TRACKING_ID}
2
Capture the tracking ID
Capture and store
ref_id when the visitor lands on the site.3
Send the conversion
When the user converts, send
ref_id to this endpoint with optional event_name, revenue, and conversion_data.4
Use a tracker when needed
Use
tracker_id only when attribution should go to a specific conversion tracker.Example
{
"ref_id": "abc123xyz",
"event_name": "user_converted",
"revenue": 123,
"conversion_data": {
"order_id": "order_98765",
"lead_source": "callrail"
}
}
Responses
- 200 OK
- 400 Bad Request
- 401 Unauthorized
- 502 Bad Gateway
{
"status": "ok",
"provider_status": 200
}
string
ok when the conversion was accepted.integer
The HTTP status returned by the conversion provider.
Returned if the request body is invalid or
ref_id is missing. details.fields lists the problem for each field.{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid conversion postback payload",
"details": {
"fields": {
"ref_id": ["This field is required."]
}
},
"request_id": "..."
}
}
Returned if the
X-Api-Key header is missing or invalid.{
"error": {
"code": "UNAUTHORIZED",
"message": "X-Api-Key header required",
"details": {
"field": "X-Api-Key",
"issue": "missing"
},
"request_id": "..."
}
}
Returned if the conversion provider could not be reached. You can retry the request.Returned if the conversion provider rejected the conversion.
{
"error": {
"code": "CONVERSION_POSTBACK_UNREACHABLE",
"message": "Conversion postback provider is unreachable",
"details": {
"ref_id": "abc123xyz"
},
"request_id": "..."
}
}
{
"error": {
"code": "CONVERSION_POSTBACK_REJECTED",
"message": "Conversion postback provider rejected the request",
"details": {
"ref_id": "abc123xyz",
"provider_status": 400
},
"request_id": "..."
}
}
