Create an Ad
Creates an ad in an ad group.
Headers
A unique key that makes this request safe to retry. See Idempotent requests.
Request body
Example request
{
"ad_group": {
"ad_campaign_id": "adcamp_xxxxxxxxxxxxxx",
"budget_amount": 60,
"optimization_goal": "conversions",
"title": "Austin — ceramic coating buyers"
},
"ad_group_id": "adgrp_xxxxxxxxxxxxxx",
"call_to_action": "message_page",
"creatives": [
{
"crop": {
"height": 1000,
"width": 1000,
"x": 40
},
"format": "square",
"id": "file_xxxxxxxxxxxxxx"
}
],
"descriptions": [
"Two-stage paint correction included"
],
"existing_post_id": "1784512345678901",
"headlines": [
"Showroom shine, guaranteed"
],
"lead_form": {
"completion": {
"button_text": "See our work",
"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": "two_days",
"required": true,
"text": "I can leave my vehicle for two days"
}
],
"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": "sedan",
"logic": {
"action": "go_to_question",
"target_question_index": 3
},
"value": "Sedan or coupe"
}
],
"type": "phone"
}
]
},
"lead_form_id": "1037724182084885",
"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."
},
"post_source": "instagram",
"primary_texts": [
"Three-year ceramic coating, booked online in under a minute."
],
"social_accounts": [
{
"id": "sacc_xxxxxxxxxxxxxx"
}
],
"title": "Interior deep clean — DM us",
"url": "https://shinetime.example/ceramic-coating",
"url_parameters": {
"ref": "spring"
}
}Response
ad created from an existing post
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": [
"Paint correction included"
],
"existing_post_id": "xxxxxxxxxxxxxxxx_98765",
"headlines": [
"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",
"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,
"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": [
"Book a two-day ceramic coating and keep the shine for three years."
],
"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",
"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 8 of the 42 revisions of this API.8319
- ○
added the required property
link_clicksto the response with the200statusresponse-required-property-added
This revision also has 2 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog
- ○
- ●
removed the request property
post_idrequest-property-removed
- ○
added the new optional request property
existing_post_idnew-optional-request-property
- ○
added the required property
existing_post_idto the response with the200statusresponse-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 thedelivery_statusresponse property for the response status200response-property-enum-value-added
- ●
- ●
added the new
messaging_conversationenum value to theresult_eventresponse property for the response status200response-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 non-success response with the status
409response-non-success-status-added
- ○
- ○
added the optional property
error/codeto the response with the400statusresponse-optional-property-added
- ○
added the optional property
error/codeto the response with the404statusresponse-optional-property-added
This revision also has 9 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog
- ○
- ▲
the response property
lead_formbecame optional for the status200response-property-became-optional
- ▲
the response property
lead_form_idbecame optional for the status200response-property-became-optional
- ▲
the response property
messaging_configbecame optional for the status200response-property-became-optional
- ▲
the response property
multi_advertiser_adsbecame optional for the status200response-property-became-optional
- ▲
added
AdLeadFormsubschema #2to thelead_formresponse propertyoneOflist for the response status200response-property-one-of-added
- ▲
added
AdMessagingConfigsubschema #2to themessaging_configresponse propertyoneOflist for the response status200response-property-one-of-added
- ▲
the
lead_formresponse's property type/format changed fromobjectnull/to/for status200response-property-type-changed
- ▲
the
messaging_configresponse's property type/format changed fromobjectnull/to/for status200response-property-type-changed
- ○
added the new optional
headerrequest parameterIdempotency-Keynew-optional-request-parameter
- ○
added the required property
added_to_cart_valueto the response with the200statusresponse-required-property-added
- ○
added the required property
completed_registration_valueto the response with the200statusresponse-required-property-added
- ○
added the required property
contact_valueto the response with the200statusresponse-required-property-added
- ○
added the required property
cost_per_unique_clickto the response with the200statusresponse-required-property-added
- ○
added the required property
custom_event_valuesto the response with the200statusresponse-required-property-added
- ○
added the required property
lead_valueto the response with the200statusresponse-required-property-added
- ○
added the required property
schedule_valueto the response with the200statusresponse-required-property-added
- ○
added the required property
social_accounts/items/idto the response with the200statusresponse-required-property-added
- ○
added the required property
submitted_application_valueto the response with the200statusresponse-required-property-added
- ○
added the required property
viewed_content_valueto the response with the200statusresponse-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 required property
custom_event_countsto the response with the200statusresponse-required-property-added
- ○
added the required property
resultsto the response with the200statusresponse-required-property-added
- ○