Keystone Developers
Open Keystone
API reference

Console API

Ads sets

7 endpoints.

GET/api/v1/admin/businesses/{business_id}/ads/ad-sets/{ad_set_id}

Get an ad set

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
ad_set_idrequiredpathstring (uuid)
authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_AdSetData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredAdSetData
AdSetData fields
FieldTypeDescription
idrequiredstring (uuid)
namerequiredstring
facebookPagestringdefault ""
facebookPageIdstring | null
destinationenumone of "website", "facebook-native", "instant_form" · default "website"
websiteUrlstringdefault ""
dailyBudgetstringdefault ""
dailyBudgetMinorinteger | null
locationstringdefault ""
radiusstringdefault ""
radiusMetersinteger | null
unitsAdUnitData[]
AdUnitData[] fields

AdUnitData (not expanded)

currencyCodestringdefault "USD"
isDraftbooleandefault false
externalPlatformAdsetIdstring | null
metadataResponseMetadata | null
ResponseMetadata fields
FieldTypeDescription
paginationPaginationMetadata | null
PaginationMetadata fields
FieldTypeDescription
limitrequiredinteger
next_cursorstring | null
prev_cursorstring | null
has_morerequiredboolean
has_prevbooleandefault false
total_countinteger | null
status_countsobject | null
object | null fields

Map of string to integer

lifecycle_countsLifecycleCounts | null
LifecycleCounts fields
FieldTypeDescription
leadintegerdefault 0
prospectintegerdefault 0
customerintegerdefault 0
former_customerintegerdefault 0
classification_countsClassificationCounts | null
ClassificationCounts fields
FieldTypeDescription
signalobject
object fields

Nested object (not expanded)

touchobject
object fields

Nested object (not expanded)

stageobject
object fields

Nested object (not expanded)

metaResponseMeta | null
ResponseMeta fields
FieldTypeDescription
totalinteger | null
total_countinteger | null
pageinteger | null
per_pageinteger | null
  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

PATCH/api/v1/admin/businesses/{business_id}/ads/ad-sets/{ad_set_id}

Patch ad set fields (mutable; audit-logged)

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
ad_set_idrequiredpathstring (uuid)
authorizationheaderstring | null

Request bodyrequired

application/jsonAdSetPatchBody
FieldTypeDescription
namestring | null
facebookPageIdstring | null
destinationenum | null
destinationUrlstring | null
dailyBudgetMinorinteger | null
addressLinestring | null
latnumber | null
lngnumber | null
radiusMetersinteger | null

Responses

200Successful Response
application/jsonSuccessResponse_AdSetData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredAdSetData
AdSetData fields

AdSetData, expanded above.

metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

DELETE/api/v1/admin/businesses/{business_id}/ads/ad-sets/{ad_set_id}

Soft-delete ad set

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
ad_set_idrequiredpathstring (uuid)
authorizationheaderstring | null

Responses

204Successful Response
  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

POST/api/v1/admin/businesses/{business_id}/ads/ad-sets/{ad_set_id}/generate-ad-copy

DEPRECATED: LLM-generate ad copy (use the unit-level generate-copy)

DEPRECATED (KS-2013): copy is per-ad. Delegates to the set's FIRST unit; 409 ``AD_SET_HAS_NO_UNITS`` when the set has none. Use ``POST /businesses/{b}/ads/units/{unit_id}/generate-copy`` instead.

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
ad_set_idrequiredpathstring (uuid)
authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_AdCopyGenerationData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredAdCopyGenerationData
AdCopyGenerationData fields
FieldTypeDescription
adCopyrequiredstring
metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

GET/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}/ad-sets

List ad sets in a campaign

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
campaign_idrequiredpathstring (uuid)
authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_list_AdSetData__
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredAdSetData[]
AdSetData[] fields

AdSetData, expanded above.

metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

POST/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}/ad-sets

Create an ad set

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
campaign_idrequiredpathstring (uuid)
authorizationheaderstring | null

Request bodyrequired

application/jsonAdSetCreateBody
FieldTypeDescription
namestring | null
facebookPageIdstring | null
destinationenumone of "website", "facebook-native", "instant_form" · default "website"
destinationUrlstring | null
dailyBudgetMinorinteger | null
addressLinestring | null
latnumber | null
lngnumber | null
radiusMetersinteger | null
currencyCodestringdefault "USD"

Responses

200Successful Response
application/jsonSuccessResponse_AdSetData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredAdSetData
AdSetData fields

AdSetData, expanded above.

metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

POST/api/v1/admin/businesses/{business_id}/ads/generate-ad-copy

LLM-generate ad copy from wizard local state (no persistence)

Pre-draft variant of ``generate-ad-copy``. Used by the New Campaign wizard before any ad set row exists — same generation logic, same business-profile grounding, just sourced from the request body instead of a DB read. No row writes.

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
authorizationheaderstring | null

Request bodyrequired

application/jsonAdCopyPreDraftBody
FieldTypeDescription
destinationenum | null
destinationUrlstring | null
addressLinestring | null
latnumber | null
lngnumber | null
radiusMetersinteger | null
dailyBudgetMinorinteger | null
currencyCodestring | null
campaignNamestring | null
userPromptstring | null

Responses

200Successful Response
application/jsonSuccessResponse_AdCopyGenerationData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredAdCopyGenerationData
AdCopyGenerationData fields

AdCopyGenerationData, expanded above.

metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.