Keystone Developers
Open Keystone
API reference

Console API

Ads units

5 endpoints.

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

Create an ad unit (creative + unit row, single transaction)

Parameters

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

Request bodyrequired

application/jsonAdUnitCreateBody
FieldTypeDescription
photoIdsstring (uuid)[] | null
string (uuid)[] | null fields
photoIdstring (uuid) | null
enabledbooleandefault true
displayIndexinteger | null
namestring | null
primaryTextstring | null
headlinestring | null
descriptionstring | null
destinationUrlstring | null
callToActionTypestring | null
urlParamsstring | null

Responses

200Successful Response
application/jsonSuccessResponse_AdUnitData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredAdUnitData
AdUnitData fields
FieldTypeDescription
idrequiredstring (uuid)
namerequiredstring
primaryTextstring | null
headlinestring | null
descriptionstring | null
destinationUrlstring | null
callToActionTypestring | null
urlParamsstring | null
effectiveHeadlinestringdefault ""
effectivePrimaryTextstringdefault ""
effectiveDescriptionstringdefault ""
effectiveCtastringdefault "SHOP_NOW"
effectiveLinkstringdefault ""
imageUrlsstring[]
string[] fields
statusenumone of "leading", "neutral", "lagging", "off" · default "neutral"
enabledbooleandefault true
isDraftbooleandefault false
externalPlatformAdIdstring | 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/units/{unit_id}

Toggle, swap photos, reorder

Parameters

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

Request bodyrequired

application/jsonAdUnitPatchBody
FieldTypeDescription
enabledboolean | null
photoIdsstring (uuid)[] | null
string (uuid)[] | null fields
photoIdstring (uuid) | null
displayIndexinteger | null
namestring | null
primaryTextstring | null
headlinestring | null
descriptionstring | null
destinationUrlstring | null
callToActionTypestring | null
urlParamsstring | null

Responses

200Successful Response
application/jsonSuccessResponse_AdUnitData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredAdUnitData
AdUnitData fields

AdUnitData, 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/units/{unit_id}

Soft-delete an ad unit

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
unit_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/units/{unit_id}/duplicate

Duplicate an ad unit (photos + copy overrides; clone starts disabled)

Parameters

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

Responses

201Successful Response
application/jsonSuccessResponse_AdUnitData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredAdUnitData
AdUnitData fields

AdUnitData, 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/units/{unit_id}/generate-copy

LLM-generate primary text for one ad unit (KS-2013 per-ad copy)

Unit-scoped successor of ``POST /ad-sets/{id}/generate-ad-copy``: grounded in the unit's creative (existing primary text, CTA, link) plus its set/campaign/business context. Same response shape — the FE drops the text into the unit's primary-text field.

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
unit_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.