Retrieve an Ad
Retrieves a single ad with stats over the requested window.
Query parameters
Start of the stats window.
End of the stats window.
IANA timezone the stats window is interpreted in. Defaults to UTC.
Attribution model the conversion stats count under (defaults to last_touch). Under both models a journey with any whop ad touch attributes to whop; the model picks which whop touch credits the entity and which non-whop source wins otherwise.
Response
ad retrieved
Example response
{
"ad_campaign": {
"id": "adcamp_xxxxxxxxxxxxxx"
},
"ad_group": {
"id": "adcamp_xxxxxxxxxxxxxx"
},
"added_to_cart_value": 1850,
"added_to_carts": 74,
"call_to_action": "learn_more",
"click_through_rate": 0.0261,
"clicks": 1337,
"completed_registration_value": 95,
"completed_registrations": 19,
"contact_value": 175,
"contacts": 27,
"cost_per_added_to_cart": 6.515675675675676,
"cost_per_click": 0.36,
"cost_per_completed_registration": 25.37684210526316,
"cost_per_contact": 17.85777777777778,
"cost_per_lead": 3.984793388429752,
"cost_per_mille": 9.42,
"cost_per_purchase": 12.68842105263158,
"cost_per_result": 7.653333333333333,
"cost_per_schedule": 10.48173913043478,
"cost_per_submitted_application": 40.18,
"cost_per_unique_click": 0.48,
"cost_per_viewed_content": 0.2253084112149533,
"created_at": "2026-01-01T12:00:00.000Z",
"creatives": [
{
"crop": {
"height": 1000,
"width": 1000,
"x": 40
},
"format": "vertical",
"id": "file_xxxxxxxxxxxxxx",
"media_type": "image",
"url": "https://whop-assets-example.s3.amazonaws.com/uploads/image/2026-01-01/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
],
"custom_conversions": 63,
"custom_event_counts": {
"booked_detail": 63
},
"custom_event_values": {
"booked_detail": 4820
},
"delivery_status": "paused",
"descriptions": [
{
"language": "en",
"text": "Austin's mobile detailers"
}
],
"existing_post_id": "xxxxxxxxxxxxxxxx_98765",
"headlines": [
{
"language": "en",
"text": "Austin's mobile detailers"
}
],
"id": "ad_xxxxxxxxxxxxxx",
"impressions": 51204,
"issues": [
{
"id": "adiss_xxxxxxxxxxxxxx",
"message": "Your ad was rejected for unacceptable business practices. Edit the ad's content and resubmit.",
"resource_id": "ad_xxxxxxxxxxxxxx",
"resource_type": "ad"
}
],
"lead_form": {
"completion": {
"button_text": "See our work",
"button_type": "website",
"description": "We book coatings two days out, so pick a slot when we ring.",
"headline": "Thanks — we will call you today",
"url": "https://shinetime.example/gallery"
},
"disclaimer": {
"body": "Ceramic coating requires the vehicle for two days.",
"checkboxes": [
{
"key": "consent_1",
"required": true,
"text": "I agree"
}
],
"title": "Before you submit"
},
"form_type": "higher_intent",
"intro": {
"description": "Tell us about your vehicle and we will send a fixed price.",
"headline": "Get a ceramic coating quote"
},
"name": "Ceramic coating quote requests",
"phone_verification": true,
"privacy_policy": {
"link_text": "Shine Time privacy policy",
"url": "https://shinetime.example/privacy"
},
"questions": [
{
"format": "multiple_choice",
"label": "What vehicle are we detailing?",
"options": [
{
"key": "ceramic_coating",
"logic": {
"action": "go_to_question",
"target_question_index": 3
},
"value": "Ceramic coating"
}
],
"type": "custom"
}
]
},
"lead_form_id": "1037724182084885",
"lead_value": 1180,
"leads": 121,
"link_clicks": 1071,
"messaging_config": {
"keyword": "Book an interior deep clean",
"message": "Hi! Tell us your vehicle and ZIP and we will send an interior deep clean quote."
},
"multi_advertiser_ads": true,
"platform": "meta",
"post_id": "xxxxxxxxxxxxxxxx_98765",
"post_source": "facebook",
"post_thumbnail_url": "https://whop-assets-example.s3.amazonaws.com/uploads/image/2026-01-01/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"primary_texts": [
{
"language": "en",
"text": "Austin's mobile detailers"
}
],
"purchase_value": 9462,
"purchases": 38,
"result_event": "custom",
"result_event_name": "booked_detail",
"results": 63,
"return_on_ad_spend": 19.62419113987058,
"schedule_value": 640,
"schedules": 46,
"social_accounts": [
{
"id": "adcamp_xxxxxxxxxxxxxx"
}
],
"spend": 482.16,
"spend_currency": "usd",
"status": "paused",
"submitted_application_value": 300,
"submitted_applications": 12,
"title": "Ceramic coating — new ad group",
"translations": {
"automatic_languages": [
"fr"
],
"source_language": "en"
},
"unique_clicks": 1012,
"updated_at": "2026-01-01T12:00:00.000Z",
"url": "https://shinetime.example/ceramic-coating",
"url_parameters": {},
"viewed_contents": 2140
}Changes
Changed in 12 of the 74 revisions of this API.11429
- ▲
the
/response's property type changed fromstringtoobjectfor statusresponse-property-type-changed
- ▲
the
/response's property type changed fromstringtoobjectfor statusresponse-property-type-changed
- ▲
the
/response's property type changed fromstringtoobjectfor statusresponse-property-type-changed
- ○
added the optional property
to the response with the statusresponse-optional-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ▲
- ●
added the new
googleenum value to theresponse property for the response statusresponse-property-enum-value-added
- ○
added the required property
//////////to the response with the statusresponse-required-property-added
- ○
added the required property
//////////to the response with the statusresponse-required-property-added
- ○
added the required property
//////////to the response with the statusresponse-required-property-added
This revision also has 1 change that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog
- ●
- ●
added the new
in_appealenum value to theresponse property for the response statusresponse-property-enum-value-added
- ●
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
- ○
added the optional property
to the response with the statusresponse-optional-property-added
- ○
- ○
added the required property
to the response with the statusresponse-required-property-added
This revision also has 2 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog
- ○
- ○
added the required property
to the response with the statusresponse-required-property-added
This revision also has 6 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog
- ○
- ●
added the new
scheduledenum value to theresponse property for the response statusresponse-property-enum-value-added
- ●
- ●
added the new
messaging_conversationenum value to theresponse property for the response statusresponse-property-enum-value-added
This revision also has 1 change that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog
- ●
- ○
added the optional property
/to the response with the statusresponse-optional-property-added
This revision also has 9 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog
- ○
Of the 74 revisions, 1 has no diff computed.