Keystone Developers
Open Keystone
API reference

Console API

Social posts

13 endpoints.

GET/api/v1/admin/businesses/{business_id}/social_posts

List social posts for a business

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
statusquerystring

Status filter: all|draft|queued|published|failed

default "all"
platformquerystring

Platform filter: all|facebook|instagram

default "all"
searchquerystring | null

Search post content

cursorquerystring | null
directionquerystring

Pagination direction: next|prev

default "next"
limitqueryintegerdefault 30
from_datequerystring | null

Optional scheduled/published lower bound as YYYY-MM-DD

to_datequerystring | null

Optional scheduled/published upper bound as YYYY-MM-DD

authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_list_SocialPostListItemData__
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialPostListItemData[]
SocialPostListItemData[] fields
FieldTypeDescription
idrequiredstring
business_idrequiredstring
content_previewrequiredstring
statusrequiredenumone of "draft", "queued", "publishing", "published", "failed"
originstringdefault "keystone"
scheduled_atinteger | null
timezonestring | null
published_atinteger | null
photo_idsstring[]
string[] fields

Nested object (not expanded)

media_statusstring | null
thumbnail_photo_idstring | null
thumbnail_urlstring | null
primary_profile_namestring | null
primary_profile_usernamestring | null
platformsSocialPostPlatformSummary[]
SocialPostPlatformSummary[] fields

Nested object (not expanded)

engagementSocialEngagementData
SocialEngagementData fields

SocialEngagementData (not expanded)

last_engagement_synced_atinteger | null
has_external_changesbooleandefault false
external_change_kindstring | null
removed_externallybooleandefault false
created_atrequiredinteger
updated_atrequiredinteger
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.

POST/api/v1/admin/businesses/{business_id}/social_posts

Create a social post

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
authorizationheaderstring | null

Request bodyrequired

application/jsonSocialPostWriteBody
FieldTypeDescription
content_markdownrequiredstringmax length 5000
link_urlstring | null
photo_idsstring[]max items 10
string[] fields
target_profile_idsstring[]
string[] fields
target_formatsSocialPostTargetFormatBody[]
SocialPostTargetFormatBody[] fields

SocialPostTargetFormatBody, expanded above.

publish_modeenumone of "draft", "publish_now", "schedule" · default "draft"
scheduled_atinteger | null
timezonestring | null
workflow_run_idstring | null
thread_idstring | null
media_statusstring | null

Responses

201Successful Response
application/jsonSuccessResponse_SocialPostData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialPostData
SocialPostData fields

SocialPostData, 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.

GET/api/v1/admin/businesses/{business_id}/social_posts/{social_post_id}

Get a social post

Parameters

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

Responses

200Successful Response
application/jsonSuccessResponse_SocialPostData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialPostData
SocialPostData fields
FieldTypeDescription
idrequiredstring
business_idrequiredstring
workflow_run_idstring | null
thread_idstring | null
content_markdownrequiredstring
link_urlstring | null
photo_idsstring[]
string[] fields
media_statusstring | null
statusrequiredenumone of "draft", "queued", "publishing", "published", "failed"
originstringdefault "keystone"
scheduled_atinteger | null
timezonestring | null
published_atinteger | null
kairos_schedule_idstring | null
kairos_schedule_statusstring | null
engagementSocialEngagementData
SocialEngagementData fields
FieldTypeDescription
likesinteger | null
commentsinteger | null
sharesinteger | null
viewsinteger | null
reachinteger | null
savedinteger | null
last_engagement_synced_atinteger | null
mediaSocialPostPreviewMediaData[]
SocialPostPreviewMediaData[] fields

SocialPostPreviewMediaData (not expanded)

targetsSocialPostTargetData[]
SocialPostTargetData[] fields

SocialPostTargetData (not expanded)

available_profilesSocialProfileData[]
SocialProfileData[] fields

SocialProfileData (not expanded)

has_external_changesbooleandefault false
created_atrequiredinteger
updated_atrequiredinteger
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.

PUT/api/v1/admin/businesses/{business_id}/social_posts/{social_post_id}

Update a social post

Parameters

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

Request bodyrequired

application/jsonSocialPostWriteBody

SocialPostWriteBody, expanded above.

Responses

200Successful Response
application/jsonSuccessResponse_SocialPostData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialPostData
SocialPostData fields

SocialPostData, 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}/social_posts/{social_post_id}

Delete a social post

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
social_post_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}/social_posts/{social_post_id}/preview

Preview a social post

Parameters

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

Request bodyrequired

application/jsonSocialPostPreviewBody
FieldTypeDescription
surfacerequiredenumone of "facebook_feed", "facebook_carousel", "instagram_feed", "instagram_carousel"

Responses

200Successful Response
application/jsonSuccessResponse_SocialPostPreviewData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialPostPreviewData
SocialPostPreviewData fields
FieldTypeDescription
surfacerequiredenumone of "facebook_feed", "facebook_carousel", "instagram_feed", "instagram_carousel"
profile_namerequiredstring
profile_usernamestring | null
profile_avatar_urlstring | null
captionrequiredstring
link_urlstring | null
photo_idsstring[]
string[] fields
mediaSocialPostPreviewMediaData[]
SocialPostPreviewMediaData[] fields

SocialPostPreviewMediaData (not expanded)

engagementSocialEngagementData
SocialEngagementData fields

SocialEngagementData, expanded above.

created_atrequiredinteger
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}/social_posts/{social_post_id}/publish

Publish a social post immediately

Parameters

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

Request bodyrequired

application/jsonSocialPostPublishBody
FieldTypeDescription
target_profile_idsstring[]
string[] fields
target_formatsSocialPostTargetFormatBody[]
SocialPostTargetFormatBody[] fields
FieldTypeDescription
social_profile_idrequiredstring
formatrequiredenumone of "facebook_feed", "facebook_carousel", "instagram_feed", "instagram_carousel"

Responses

200Successful Response
application/jsonSuccessResponse_SocialPostPublishResult_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialPostPublishResult
SocialPostPublishResult fields
FieldTypeDescription
social_postrequiredSocialPostData
SocialPostData fields

SocialPostData, expanded above.

resultsrequiredSocialPostPublishTargetResult[]
SocialPostPublishTargetResult[] fields

SocialPostPublishTargetResult (not expanded)

successrequiredboolean
successful_countrequiredinteger
failed_countrequiredinteger
total_countrequiredinteger
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}/social_posts/{social_post_id}/sync

Sync one post from Meta now (targeted re-read — catches IG edits)

Parameters

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

Responses

200Successful Response
application/jsonSuccessResponse_SocialFeedSyncData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialFeedSyncData
SocialFeedSyncData fields

SocialFeedSyncData, 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}/social_posts/{social_post_id}/sync_engagement

Refresh engagement metrics for a published social post

Parameters

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

Responses

200Successful Response
application/jsonSuccessResponse_SocialEngagementSyncData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialEngagementSyncData
SocialEngagementSyncData fields
FieldTypeDescription
social_postrequiredSocialPostData
SocialPostData fields

SocialPostData, expanded above.

syncedrequiredinteger
failedrequiredinteger
skippedrequiredinteger
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}/social_posts/calendar_events

List social post calendar events

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
from_datequerystring | null

Optional lower bound as YYYY-MM-DD

to_datequerystring | null

Optional upper bound as YYYY-MM-DD

platformquerystring

Platform filter: all|facebook|instagram

default "all"
statusquerystring

Status filter: all|queued|published|failed

default "all"
cursorquerystring | null
limitqueryintegerdefault 200
authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_list_SocialPostCalendarEventData__
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialPostCalendarEventData[]
SocialPostCalendarEventData[] fields
FieldTypeDescription
idrequiredstring
post_idrequiredstring
target_idrequiredstring
social_post_idrequiredstring
social_post_target_idrequiredstring
social_profile_idrequiredstring
platformrequiredenumone of "facebook", "instagram"
statusrequiredenum
enum fields

Nested object (not expanded)

scheduled_atinteger | null
published_atinteger | null
titlerequiredstring
content_previewrequiredstring
profile_namestring | null
profile_usernamestring | null
thumbnail_photo_idstring | null
thumbnail_urlstring | null
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}/social_posts/full_sync

Admin: deep full sync of all feeds (re-reads every post, catches edits)

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_SocialFeedSyncData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialFeedSyncData
SocialFeedSyncData fields
FieldTypeDescription
statusrequiredstring
detailobject | null
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}/social_posts/generate

Generate editable social post content

Generate a caption -- through the workflow when it is enabled.

The workflow path persists the draft (and its photos) and returns it, so the console navigates into an existing post. The inline path returns a caption and nothing else, which is what it has always done.

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
Idempotency-Keyheaderstring | null
X-Workflow-Bypassheaderstring | null
authorizationheaderstring | null

Request bodyrequired

application/jsonSocialPostGenerateBody
FieldTypeDescription
promptstring | null
target_profile_idsstring[]
string[] fields
platformsenum[]
enum[] fields
providerstring | null

Responses

200Successful Response
application/jsonSuccessResponse_SocialPostGenerateData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialPostGenerateData
SocialPostGenerateData fields
FieldTypeDescription
content_markdownrequiredstring
media_briefsobject[]

Photo briefs for the workflow worker to resolve against the media library, in display order. Empty unless social_media_briefs_enabled is on. The inline (non-workflow) callers return them but never act on them.

object[] fields
metadatarequiredSocialPostGenerateMetadata
SocialPostGenerateMetadata fields
FieldTypeDescription
providerrequiredstring
modelrequiredstring
latency_msrequiredinteger
context_sourcesstring[]
string[] fields

Nested object (not expanded)

generation_statusstringdefault "completed"
workflow_run_idstring | null
thread_idstring | null
social_postSocialPostData | null
SocialPostData fields

SocialPostData, 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}/social_posts/sync

Sync all connected feeds now (incremental delta from Meta)

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_SocialFeedSyncData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredSocialFeedSyncData
SocialFeedSyncData fields

SocialFeedSyncData, 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.