API reference
Console API
Everything the Keystone console does: businesses, contacts, website, ads, social, billing, agents.
The surface go.keystone.app is built on. Operations are scoped by the caller's console account and its business memberships; staff accounts see every business. This is the largest surface, grouped below by the resource each operation manages. Paths under /admin are the console's own; paths under /businesses and /ai are per-business agent and AI-provider controls.
434 endpoints in 59 groups.
Accounts
- POST
/api/v1/admin/account-user-invites/{invite_id}/acceptAccept a pending account invite for the authenticated user - GET
/api/v1/admin/accountsList admin account summaries - POST
/api/v1/admin/accountsCreate account - GET
/api/v1/admin/accounts/{business_id}/usersList account users and pending invites - POST
/api/v1/admin/accounts/{business_id}/usersInvite an account user (pending invite + email) - PATCH
/api/v1/admin/accounts/{business_id}/users/{entry_id}Update an account user or pending invite - DELETE
/api/v1/admin/accounts/{business_id}/users/{entry_id}Delete an account user link or pending invite - POST
/api/v1/admin/accounts/{business_id}/users/{entry_id}/resendRe-send the invitation email for a pending invite - POST
/api/v1/admin/accounts/from-websiteCreate account from a website URL (streamlined onboarding) - GET
/api/v1/admin/me/businessesList businesses linked to the authenticated user - POST
/api/v1/admin/me/businessesCreate the authenticated user's own business (self-serve onboarding)
Ads accounts
- GET
/api/v1/admin/businesses/{business_id}/ads/accountsList ad accounts for the business - GET
/api/v1/admin/businesses/{business_id}/ads/accounts/{ads_account_id}/pagesList Pages on a connected ad account (live) - POST
/api/v1/admin/businesses/{business_id}/ads/accounts/{ads_account_id}/revokeRevoke an ad-account link (soft). - POST
/api/v1/admin/businesses/{business_id}/ads/discovery/importDiscover ad accounts + pages from provider; upsert ads_accounts
Ads agent
Ads campaigns
- GET
/api/v1/admin/businesses/{business_id}/ads/campaignsList campaigns - POST
/api/v1/admin/businesses/{business_id}/ads/campaignsCreate a draft campaign - GET
/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}Get a campaign with embedded ad-sets and units - PATCH
/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}Patch campaign name (status changes use dedicated verbs) - POST
/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}/archiveArchive locally + cascade soft-delete children - POST
/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}/duplicateDeep-copy campaign + sets + units as a new draft - POST
/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}/launchValidate + push to provider + set Active - POST
/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}/pausePause on provider + locally - POST
/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}/resumeResume on provider + locally - POST
/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}/syncPull this one campaign's latest state from Meta and return it - POST
/api/v1/admin/businesses/{business_id}/ads/campaigns/agentTrigger the campaign-creation agent (workflow engine) - GET
/api/v1/admin/businesses/{business_id}/ads/campaigns/agent/messagesList campaign-agent chat transcript - POST
/api/v1/admin/businesses/{business_id}/ads/campaigns/agent/messagesSend a follow-up turn on an existing agent thread
Ads performance
Ads refresh recommendations
- GET
/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}/refresh-recommendationsList Refresh Recommendations - POST
/api/v1/admin/businesses/{business_id}/ads/refresh-recommendations/{recommendation_id}/acceptAccept Refresh Recommendation - POST
/api/v1/admin/businesses/{business_id}/ads/refresh-recommendations/{recommendation_id}/dismissDismiss Refresh Recommendation - POST
/api/v1/admin/businesses/{business_id}/ads/refresh-recommendations/{recommendation_id}/replace-draft-mediaReplace Refresh Draft Media
Ads sets
- GET
/api/v1/admin/businesses/{business_id}/ads/ad-sets/{ad_set_id}Get an ad set - PATCH
/api/v1/admin/businesses/{business_id}/ads/ad-sets/{ad_set_id}Patch ad set fields (mutable; audit-logged) - DELETE
/api/v1/admin/businesses/{business_id}/ads/ad-sets/{ad_set_id}Soft-delete ad set - POST
/api/v1/admin/businesses/{business_id}/ads/ad-sets/{ad_set_id}/generate-ad-copyDEPRECATED: LLM-generate ad copy (use the unit-level generate-copy) - GET
/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}/ad-setsList ad sets in a campaign - POST
/api/v1/admin/businesses/{business_id}/ads/campaigns/{campaign_id}/ad-setsCreate an ad set - POST
/api/v1/admin/businesses/{business_id}/ads/generate-ad-copyLLM-generate ad copy from wizard local state (no persistence)
Ads sync
Ads units
- POST
/api/v1/admin/businesses/{business_id}/ads/ad-sets/{ad_set_id}/unitsCreate an ad unit (creative + unit row, single transaction) - PATCH
/api/v1/admin/businesses/{business_id}/ads/units/{unit_id}Toggle, swap photos, reorder - DELETE
/api/v1/admin/businesses/{business_id}/ads/units/{unit_id}Soft-delete an ad unit - POST
/api/v1/admin/businesses/{business_id}/ads/units/{unit_id}/duplicateDuplicate an ad unit (photos + copy overrides; clone starts disabled) - POST
/api/v1/admin/businesses/{business_id}/ads/units/{unit_id}/generate-copyLLM-generate primary text for one ad unit (KS-2013 per-ad copy)
AI providers
- GET
/api/v1/admin/ai/providersList AI provider configs - GET
/api/v1/admin/ai/providers/{name}Get AI provider config by name - PATCH
/api/v1/admin/ai/providers/{name}Update AI provider config - GET
/api/v1/ai/providersList AI provider configs - GET
/api/v1/ai/providers/{name}Get AI provider config by name - PATCH
/api/v1/ai/providers/{name}Update AI provider config
Billing
- GET
/api/v1/admin/billing/{business_id}/auto-reloadGet a business's auto-reload config - PUT
/api/v1/admin/billing/{business_id}/auto-reloadSave a business's auto-reload config - GET
/api/v1/admin/billing/{business_id}/balanceGet a business's credit balance (used-of-total) - POST
/api/v1/admin/billing/{business_id}/checkout-sessionMint a subscription Checkout session URL - POST
/api/v1/admin/billing/{business_id}/grantsGrant credits to a subscribed business (platform admin) - POST
/api/v1/admin/billing/{business_id}/onboard-freePut a business on the $0 free plan (platform admin) - GET
/api/v1/admin/billing/{business_id}/plansList the self-serve plan catalogue - POST
/api/v1/admin/billing/{business_id}/portal-sessionMint a Customer Portal session URL - POST
/api/v1/admin/billing/{business_id}/reactivation-linkMint the reactivation payment link for a delinquent subscription - POST
/api/v1/admin/billing/{business_id}/recharge-sessionMint a one-time credit-recharge Checkout session URL - GET
/api/v1/admin/billing/{business_id}/statusGet a business's billing/entitlement status
Blog agent
Blog auto schedule
Blog posts
- GET
/api/v1/admin/businesses/{business_id}/blog_postsList blog posts for a business - POST
/api/v1/admin/businesses/{business_id}/blog_postsCreate a blog post - GET
/api/v1/admin/businesses/{business_id}/blog_posts/{blog_post_id}Get a single blog post - PUT
/api/v1/admin/businesses/{business_id}/blog_posts/{blog_post_id}Update a blog post - DELETE
/api/v1/admin/businesses/{business_id}/blog_posts/{blog_post_id}Delete a blog post - POST
/api/v1/admin/businesses/{business_id}/blog_posts/generateGenerate a blog post using AI - GET
/api/v1/admin/businesses/{business_id}/blog_posts/generate/streamStream blog generation status events (SSE)
Business
- POST
/api/v1/admin/businessesCreate business - GET
/api/v1/admin/businesses/{business_id}Get business details - PATCH
/api/v1/admin/businesses/{business_id}Update specific fields of business profile - GET
/api/v1/admin/businesses/{business_id}/api-keyGet business public API credentials (URL + key) - GET
/api/v1/admin/businesses/{business_id}/dashboardGet dashboard info for a specific business - GET
/api/v1/admin/businesses/dashboard[Deprecated] Dashboard info for authenticated user's business — use /businesses/{business_id}/dashboard
Business claims
- GET
/api/v1/admin/businesses/{business_id}/claimWho holds this business, and whether the caller can claim or extend - PUT
/api/v1/admin/businesses/{business_id}/claimClaim a business nobody holds, for 24 hours - POST
/api/v1/admin/businesses/{business_id}/claim/extendExtend the caller's claim once, by another 24 hours
Contacts
- GET
/api/v1/admin/businesses/{business_id}/contactsList contacts - POST
/api/v1/admin/businesses/{business_id}/contactsCreate contact - GET
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}Get contact detail - PATCH
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}Update contact - DELETE
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}Delete contact - PATCH
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/classificationOverride contact classification - GET
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/classification-historyGet classification history - POST
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/classifyManually classify a contact (legacy POST alias) - GET
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/conversationGet this contact's conversation - GET
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/emailsList contact emails - POST
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/emailsAdd email to contact - PATCH
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/emails/{email_id}Update contact email - DELETE
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/emails/{email_id}Remove email from contact - POST
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/emails/{email_id}/set-primarySet primary email - GET
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/insightsList contact insights - GET
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/insights/{insight_id}Get a contact insight - POST
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/insights/{insight_id}/dismissDismiss a contact insight - DELETE
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/needs-attentionResolve contact needs-attention overlay - POST
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/opt-inRecord opt-in - POST
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/opt-outRecord opt-out - GET
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/phonesList contact phones - POST
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/phonesAdd phone to contact - PATCH
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/phones/{phone_id}Update contact phone - DELETE
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/phones/{phone_id}Remove phone from contact - POST
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/phones/{phone_id}/set-primarySet primary phone - GET
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/preferencesGet preferences - POST
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/reassessTrigger a fresh AI classification pass - GET
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/score-historyGet engagement score history - GET
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/sourcesList sources - POST
/api/v1/admin/businesses/{business_id}/contacts/{contact_id}/sourcesAdd source - GET
/api/v1/admin/businesses/{business_id}/contacts/exportExport contacts as CSV - POST
/api/v1/admin/businesses/{business_id}/contacts/lookupLookup contact by email/phone - POST
/api/v1/admin/businesses/{business_id}/contacts/mergeMerge contacts - GET
/api/v1/admin/businesses/{business_id}/contacts/needs-attentionList contacts needing attention - GET
/api/v1/admin/businesses/{business_id}/contacts/pipeline-summaryGet pipeline summary - GET
/api/v1/admin/businesses/{business_id}/contacts/searchSearch contacts - GET
/api/v1/admin/businesses/{business_id}/contacts/statsGet classification stats - PUT
/api/v1/admin/businesses/{business_id}/contacts/upsertUpsert contact - GET
/api/v1/admin/businesses/{business_id}/duplicate-reviewsList duplicate reviews - GET
/api/v1/admin/businesses/{business_id}/duplicate-reviews/{review_id}Get duplicate review - POST
/api/v1/admin/businesses/{business_id}/duplicate-reviews/{review_id}/dismissDismiss duplicate pair - POST
/api/v1/admin/businesses/{business_id}/duplicate-reviews/{review_id}/mergeMerge duplicate pair - GET
/api/v1/admin/businesses/{business_id}/identity-reviewsList identity reviews - GET
/api/v1/admin/businesses/{business_id}/identity-reviews/{review_id}Get identity review - POST
/api/v1/admin/businesses/{business_id}/identity-reviews/{review_id}/resolveResolve identity review
Contacts agent
Contexts
- PUT
/api/v1/admin/businesses/{business_id}/contexts/{context_type}Save business context as new version - GET
/api/v1/admin/businesses/{business_id}/contexts/{context_type}/currentGet current business context - GET
/api/v1/admin/businesses/{business_id}/contexts/{context_type}/versionsList business context versions - GET
/api/v1/admin/businesses/{business_id}/contexts/{context_type}/versions/{version_id}Get business context version detail - POST
/api/v1/admin/businesses/{business_id}/contexts/{context_type}/versions/{version_id}/restoreRestore business context version - POST
/api/v1/admin/businesses/{business_id}/contexts/business/generate-outlineGenerate business context outline
Conversations
- GET
/api/v1/admin/conversationsList conversations - POST
/api/v1/admin/conversationsCreate or fetch conversation for a contact (idempotent) - GET
/api/v1/admin/conversations/{conversation_id}Get conversation - PATCH
/api/v1/admin/conversations/{conversation_id}Update conversation - GET
/api/v1/admin/conversations/{conversation_id}/messagesList messages in a conversation - POST
/api/v1/admin/conversations/{conversation_id}/messagesSend outbound message - DELETE
/api/v1/admin/conversations/{conversation_id}/messages/{message_id}Delete a DRAFT message (ASSIST-mode reject) - POST
/api/v1/admin/conversations/{conversation_id}/messages/{message_id}/retryRetry a FAILED or PENDING outbound message - POST
/api/v1/admin/conversations/{conversation_id}/messages/{message_id}/sendApprove and send a DRAFT (e.g. AI-authored) message - POST
/api/v1/admin/conversations/{conversation_id}/readMark conversation as read (zero unread_count) - GET
/api/v1/admin/conversations/configsList all conversations config versions (newest first) - POST
/api/v1/admin/conversations/configsCreate a new conversations config version - GET
/api/v1/admin/conversations/configs/{version}Get a conversations config by version - GET
/api/v1/admin/conversations/configs/activeGet the active conversations config - GET
/api/v1/admin/global-conversationsList conversations across all businesses (admin)
Conversations agent
Current user
FAQ
- GET
/api/v1/admin/businesses/{business_id}/faqsGet all FAQs - POST
/api/v1/admin/businesses/{business_id}/faqsCreate FAQ - GET
/api/v1/admin/businesses/{business_id}/faqs/{faq_id}Get FAQ details - PUT
/api/v1/admin/businesses/{business_id}/faqs/{faq_id}Update FAQ - DELETE
/api/v1/admin/businesses/{business_id}/faqs/{faq_id}Delete FAQ - PUT
/api/v1/admin/businesses/{business_id}/faqs/reorderReorder FAQs
Forms
- GET
/api/v1/admin/businesses/{business_id}/form_submissionsList all form submissions - GET
/api/v1/admin/businesses/{business_id}/form_submissions/{submission_id}Get form submission details - DELETE
/api/v1/admin/businesses/{business_id}/form_submissions/{submission_id}Delete form submission - GET
/api/v1/admin/businesses/{business_id}/formsList forms - POST
/api/v1/admin/businesses/{business_id}/formsCreate a custom form - GET
/api/v1/admin/businesses/{business_id}/forms/{form_id}Get form details - PUT
/api/v1/admin/businesses/{business_id}/forms/{form_id}Update form - GET
/api/v1/admin/businesses/{business_id}/forms/{form_id}/submissionsList submissions for a form
Front desk
- GET
/api/v1/admin/businesses/{business_id}/front-deskFront Desk status for a business - POST
/api/v1/admin/businesses/{business_id}/front-desk/disableTurn Front Desk off (releases the phone number right away) - POST
/api/v1/admin/businesses/{business_id}/front-desk/enableTurn Front Desk on (auto-provisions a phone number)
Global agent
Import data
- GET
/api/v1/admin/businesses/{business_id}/import-data/custom-importsList custom import runs - POST
/api/v1/admin/businesses/{business_id}/import-data/custom-importsCreate a custom import run - GET
/api/v1/admin/businesses/{business_id}/import-data/custom-imports/{import_run_id}Get a custom import run - POST
/api/v1/admin/businesses/{business_id}/import-data/custom-imports/{import_run_id}/extractRe-run extraction on stored custom import content - GET
/api/v1/admin/businesses/{business_id}/import-data/custom-imports/{import_run_id}/extractionGet the latest custom import extraction payload - GET
/api/v1/admin/businesses/{business_id}/import-data/custom-imports/{import_run_id}/filesList files attached to a custom import run - GET
/api/v1/admin/businesses/{business_id}/import-data/custom-imports/{import_run_id}/files/{file_id}/downloadDownload a stored custom import file - POST
/api/v1/admin/businesses/{business_id}/import-data/custom-imports/{import_run_id}/mergeApply a selected subset of a custom import into the business record - GET
/api/v1/admin/businesses/{business_id}/import-data/custom-imports/{import_run_id}/reviewGet the merged review view for a custom import run - GET
/api/v1/admin/businesses/{business_id}/import-data/website-scrapesList website scrape runs - POST
/api/v1/admin/businesses/{business_id}/import-data/website-scrapesStart a website scrape run - GET
/api/v1/admin/businesses/{business_id}/import-data/website-scrapes/{scrape_run_id}Get a website scrape run - GET
/api/v1/admin/businesses/{business_id}/import-data/website-scrapes/{scrape_run_id}/assetsList stored crawl assets for a website scrape - POST
/api/v1/admin/businesses/{business_id}/import-data/website-scrapes/{scrape_run_id}/extractRe-run extraction on stored website scrape pages - GET
/api/v1/admin/businesses/{business_id}/import-data/website-scrapes/{scrape_run_id}/extractionGet the latest website scrape extraction payload - POST
/api/v1/admin/businesses/{business_id}/import-data/website-scrapes/{scrape_run_id}/mergeApply a selected subset of extracted data into the business record - GET
/api/v1/admin/businesses/{business_id}/import-data/website-scrapes/{scrape_run_id}/pagesList stored crawl pages for a website scrape - GET
/api/v1/admin/businesses/{business_id}/import-data/website-scrapes/{scrape_run_id}/pages/{page_id}Get a stored crawl page - GET
/api/v1/admin/businesses/{business_id}/import-data/website-scrapes/{scrape_run_id}/reviewGet the merged review view for a website scrape
Industry
- GET
/api/v1/admin/businesses/{business_id}/industriesGet business's primary and secondary industry - PATCH
/api/v1/admin/businesses/{business_id}/industriesUpdate primary and/or secondary industry of business - GET
/api/v1/admin/industriesList all industries - POST
/api/v1/admin/industriesCreate industry - GET
/api/v1/admin/industries/{industry_id}Get industry by industry ID - PATCH
/api/v1/admin/industries/{industry_id}Update industry details
Integrations status
Jobs
- GET
/api/v1/admin/businesses/{business_id}/job_postingsGet all job postings - POST
/api/v1/admin/businesses/{business_id}/job_postingsCreate job posting - GET
/api/v1/admin/businesses/{business_id}/job_postings/{job_posting_id}Get job posting details - PUT
/api/v1/admin/businesses/{business_id}/job_postings/{job_posting_id}Update job posting - DELETE
/api/v1/admin/businesses/{business_id}/job_postings/{job_posting_id}Delete job posting - GET
/api/v1/admin/businesses/{business_id}/job_postings/{job_posting_id}/applicationsList job applications for a posting - POST
/api/v1/admin/businesses/{business_id}/job_postings/reorderReorder job postings
Listing accounts
- POST
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/keystone-invite/retryRetry accepting the Keystone location-manager invite for a listing - PATCH
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/mappingMap or unmap a listing to an internal SOR location - GET
/api/v1/admin/businesses/{business_id}/listings/accountsList listing provider accounts - POST
/api/v1/admin/businesses/{business_id}/listings/discovery/importDiscover and import provider accounts + listings for a business - GET
/api/v1/admin/businesses/{business_id}/listings/locationsList provider listing locations for this business - PATCH
/api/v1/admin/businesses/{business_id}/listings/selectionReplace which listings are managed for this business
Listing reviews
- GET
/api/v1/admin/businesses/{business_id}/listing-reviewsList listing reviews (optionally scoped to one listing) - GET
/api/v1/admin/businesses/{business_id}/listing-reviews/{review_id}Get one listing review - PATCH
/api/v1/admin/businesses/{business_id}/listing-reviews/{review_id}Update listing review (e.g. featured flag) - GET
/api/v1/admin/businesses/{business_id}/listing-reviews/{review_id}/repliesList replies for a listing review - PUT
/api/v1/admin/businesses/{business_id}/listing-reviews/{review_id}/replyCreate or update owner reply for a listing review - DELETE
/api/v1/admin/businesses/{business_id}/listing-reviews/{review_id}/replyDelete owner reply for a listing review
Listings
- GET
/api/v1/admin/businesses/{business_id}/listingsList managed GBP listings grouped by internal location - GET
/api/v1/admin/businesses/{business_id}/listings/{listing_id}Get managed listing detail (overview from GBP Business Information) - GET
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/photosList photos linked to a managed GBP listing - POST
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/photosAdd a library photo to a GBP listing (uploads to GBP then links) - DELETE
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/photos/{photo_id}Remove a photo from the listing (association soft-delete only) - POST
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/photos/syncEnqueue GBP listing media import for one managed listing - POST
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/photos/sync-logs/{sync_log_id}/resumeResume or retry a PARTIAL/FAILED GBP listing media sync log (background) - GET
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/reviewsList provider reviews stored for a managed listing - POST
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/reviews/syncEnqueue provider review sync for one managed listing - POST
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/reviews/sync-logs/{sync_log_id}/resumeResume or retry a PARTIAL/FAILED listing review sync log - POST
/api/v1/admin/listings/gbp/refresh-allRe-fetch overview + platform metadata for EVERY GBP listing (all businesses)
Listings agent
Locations
- GET
/api/v1/admin/businesses/{business_id}/locationsGet all locations - POST
/api/v1/admin/businesses/{business_id}/locationsCreate location - GET
/api/v1/admin/businesses/{business_id}/locations/{location_id}Get location details - PUT
/api/v1/admin/businesses/{business_id}/locations/{location_id}Update location - DELETE
/api/v1/admin/businesses/{business_id}/locations/{location_id}Delete location - PUT
/api/v1/admin/businesses/{business_id}/locations/reorderReorder locations
Maps
- GET
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/maps/performancePer-listing Performance tab: 30-day metrics, keywords, tracked queries - GET
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/maps/profile-dataPer-listing Profile data tab: the audit inventory with rule hints - GET
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/maps/readinessPer-listing Readiness tab: score, categories, recommendations - POST
/api/v1/admin/businesses/{business_id}/listings/{listing_id}/maps/refreshPopulate Maps analytics for one listing now (audit → performance → quality → score) - GET
/api/v1/admin/businesses/{business_id}/maps/summaryMaps performance across all managed listings of a business
Meta Conversions API
- GET
/api/v1/admin/businesses/{business_id}/integrations/meta/capiGet Meta CAPI config for a business - PUT
/api/v1/admin/businesses/{business_id}/integrations/meta/capiSet Meta CAPI config (pixel id, enable, test event code) - GET
/api/v1/admin/businesses/{business_id}/integrations/meta/capi/pixelsDiscover Meta pixels on a business' connected ad account - POST
/api/v1/admin/businesses/{business_id}/integrations/meta/capi/testFire a test CAPI event (validate sender via Events Manager Test Events)
OAuth connections
- GET
/api/v1/admin/businesses/{business_id}/connectionsList active OAuth connections for a business - DELETE
/api/v1/admin/businesses/{business_id}/connections/{connection_id}Disconnect an OAuth connection - POST
/api/v1/admin/businesses/{business_id}/connections/oauth/{provider}/startStart OAuth for an authority (e.g. Google) - GET
/api/v1/admin/connections/oauth/{provider}/callbackOAuth callback (browser redirect target)
Offers
- PUT
/api/v1/admin/businesses/{business_id}/offers/{offer_id}Update an offer - POST
/api/v1/admin/businesses/{business_id}/packages/{package_id}/offersAttach a new offer to a package - DELETE
/api/v1/admin/businesses/{business_id}/packages/{package_id}/offers/{offer_id}Detach an offer from a package - POST
/api/v1/admin/businesses/{business_id}/service-items/{service_item_id}/offersAttach a new offer to a service item - DELETE
/api/v1/admin/businesses/{business_id}/service-items/{service_item_id}/offers/{offer_id}Detach an offer from a service item
Packages
- GET
/api/v1/admin/businesses/{business_id}/packagesGet all packages - POST
/api/v1/admin/businesses/{business_id}/packagesCreate package - GET
/api/v1/admin/businesses/{business_id}/packages/{package_id}Get package details - PUT
/api/v1/admin/businesses/{business_id}/packages/{package_id}Update package - DELETE
/api/v1/admin/businesses/{business_id}/packages/{package_id}Delete package - PUT
/api/v1/admin/businesses/{business_id}/packages/{package_id}/service-itemsSet package member service items - POST
/api/v1/admin/businesses/{business_id}/packages/{package_id}/service-items/{service_item_id}Add service item to package - DELETE
/api/v1/admin/businesses/{business_id}/packages/{package_id}/service-items/{service_item_id}Remove service item from package - PUT
/api/v1/admin/businesses/{business_id}/packages/reorderReorder packages
Photos
- GET
/api/v1/admin/businesses/{business_id}/generatedList generated photos for a business - GET
/api/v1/admin/businesses/{business_id}/generated/{generated_photo_id}Serve generated photo file from GCS - GET
/api/v1/admin/businesses/{business_id}/photosGet business photo library - GET
/api/v1/admin/businesses/{business_id}/photos/{photo_id}Get photo metadata - DELETE
/api/v1/admin/businesses/{business_id}/photos/{photo_id}Delete photo from library - POST
/api/v1/admin/businesses/{business_id}/photos/generateGenerate photos - GET
/api/v1/admin/businesses/{business_id}/photos/generate/{job_id}Get photo generation job status - GET
/api/v1/admin/businesses/{business_id}/photos/get/{photo_id}Serve photo file from GCS - POST
/api/v1/admin/businesses/{business_id}/photos/import-from-galleryImport photos from industry gallery - POST
/api/v1/admin/businesses/{business_id}/photos/import-from-unsplashImport photos from Unsplash - POST
/api/v1/admin/businesses/{business_id}/photos/import-generatedImport from generated photos - GET
/api/v1/admin/businesses/{business_id}/photos/industry-galleryGet industry gallery photos - GET
/api/v1/admin/businesses/{business_id}/photos/industry-gallery/get/{photo_id}Serve industry gallery photo file from GCS - GET
/api/v1/admin/businesses/{business_id}/photos/search-unsplashSearch Unsplash - POST
/api/v1/admin/businesses/{business_id}/photos/uploadUpload photo to business library - GET
/api/v1/admin/industries/{industry_id}/generatedList generated photos for an industry - GET
/api/v1/admin/industries/{industry_id}/generated/{generated_photo_id}Serve generated photo file from GCS - GET
/api/v1/admin/industries/{industry_id}/photosList photos for an industry - DELETE
/api/v1/admin/industries/{industry_id}/photosDelete industry gallery photos by id - POST
/api/v1/admin/industries/{industry_id}/photos/deleteDelete industry gallery photos (POST; use if DELETE body is stripped) - POST
/api/v1/admin/industries/{industry_id}/photos/generateGenerate photos - GET
/api/v1/admin/industries/{industry_id}/photos/generate/{job_id}Get photo generation job status - POST
/api/v1/admin/industries/{industry_id}/photos/import-from-unsplashImport photos from Unsplash into industry gallery - POST
/api/v1/admin/industries/{industry_id}/photos/import-generatedImport from generated photos - GET
/api/v1/admin/industries/{industry_id}/photos/search-unsplashSearch Unsplash - GET
/api/v1/admin/industries/{industry_id}/photos/template-defaultsList template default photos per website slot - PUT
/api/v1/admin/industries/{industry_id}/photos/template-defaultsSet or clear one template default photo slot - POST
/api/v1/admin/industries/{industry_id}/photos/uploadUpload photo to industry gallery
Platform admins
- POST
/api/v1/admin/platform-admin-invites/{invite_id}/acceptAccept a pending Keystone Admin invite for the authenticated user - GET
/api/v1/admin/usersList Keystone Admins and pending admin invites - POST
/api/v1/admin/usersInvite a Keystone Admin (pending invite + email) - PATCH
/api/v1/admin/users/{entry_id}Update a Keystone Admin or pending admin invite - DELETE
/api/v1/admin/users/{entry_id}Remove pending admin invite or demote a Keystone Admin
Pricing
- GET
/api/v1/admin/pricing/booksList price books (platform admin) - GET
/api/v1/admin/pricing/books/{book_id}/versionsList a price book's versions (platform admin) - POST
/api/v1/admin/pricing/books/{book_id}/versionsPublish a price book version (platform admin) - GET
/api/v1/admin/pricing/dimensionsList rating dimensions (platform admin) - GET
/api/v1/admin/pricing/ratesList vendor rate sheets (platform admin) - POST
/api/v1/admin/pricing/ratesSchedule a vendor rate sheet (platform admin) - PUT
/api/v1/admin/pricing/rates/{rates_id}Edit the scheduled rate sheet (platform admin)
Promos
- GET
/api/v1/admin/promos/couponsList coupons (platform admin) - POST
/api/v1/admin/promos/couponsCreate a coupon (platform admin) - GET
/api/v1/admin/promos/coupons/{coupon_id}One coupon with its codes (platform admin) - DELETE
/api/v1/admin/promos/coupons/{coupon_id}Delete a coupon (platform admin) - POST
/api/v1/admin/promos/coupons/{coupon_id}/promotion-codesIssue a code, or add businesses to one (platform admin) - GET
/api/v1/admin/promos/plansPlans a coupon can be restricted to (platform admin) - PATCH
/api/v1/admin/promos/promotion-codes/{promotion_code_id}Activate, deactivate, or list a promotion code (platform admin) - GET
/api/v1/admin/promos/redemptionsWho redeemed what (platform admin)
Reviews
- GET
/api/v1/admin/businesses/{business_id}/reviewsList reviews - POST
/api/v1/admin/businesses/{business_id}/reviewsCreate review - GET
/api/v1/admin/businesses/{business_id}/reviews/{review_id}Get review details - PUT
/api/v1/admin/businesses/{business_id}/reviews/{review_id}Update review - DELETE
/api/v1/admin/businesses/{business_id}/reviews/{review_id}Delete review
SEO
- GET
/api/v1/admin/businesses/{business_id}/seo/actionsThe site's prioritized SEO action list - GET
/api/v1/admin/businesses/{business_id}/seo/blog/overviewBlog overview: search totals across every post, tracked keywords, per-post views - GET
/api/v1/admin/businesses/{business_id}/seo/blog/posts/{blog_post_id}Per-post performance: traffic, search, audit, speed and quality, with 30-day changes - GET
/api/v1/admin/businesses/{business_id}/seo/scoresCurrent SEO scores per category, with history - GET
/api/v1/admin/businesses/{business_id}/seo/site-healthSite health: technical audit, content review, traffic and search, latest vs previous - GET
/api/v1/admin/seo/portfolioEvery site's current overall score — worst first
Service items
- GET
/api/v1/admin/businesses/{business_id}/service-itemsGet all service items - POST
/api/v1/admin/businesses/{business_id}/service-itemsCreate service item - GET
/api/v1/admin/businesses/{business_id}/service-items/{item_id}Get service item details - PUT
/api/v1/admin/businesses/{business_id}/service-items/{item_id}Update service item - DELETE
/api/v1/admin/businesses/{business_id}/service-items/{item_id}Delete service item - PUT
/api/v1/admin/businesses/{business_id}/service-items/{item_id}/servicesSet service item member services - POST
/api/v1/admin/businesses/{business_id}/service-items/{item_id}/services/{service_id}Add service to service item - DELETE
/api/v1/admin/businesses/{business_id}/service-items/{item_id}/services/{service_id}Remove service from service item - PUT
/api/v1/admin/businesses/{business_id}/service-items/reorderReorder service items
Services
- GET
/api/v1/admin/businesses/{business_id}/servicesGet all services - POST
/api/v1/admin/businesses/{business_id}/servicesCreate service - GET
/api/v1/admin/businesses/{business_id}/services/{service_id}Get service details - PUT
/api/v1/admin/businesses/{business_id}/services/{service_id}Update service - DELETE
/api/v1/admin/businesses/{business_id}/services/{service_id}Delete service - GET
/api/v1/admin/businesses/{business_id}/services/{service_id}/service-itemsList service items for a service - PUT
/api/v1/admin/businesses/{business_id}/services/{service_id}/service-itemsSet service items for a service - PUT
/api/v1/admin/businesses/{business_id}/services/reorderReorder services
Social agent
Social integrations
- GET
/api/v1/admin/businesses/{business_id}/social_integrations/metaGet Meta social integration status - DELETE
/api/v1/admin/businesses/{business_id}/social_integrations/metaDisconnect Meta social integration - GET
/api/v1/admin/businesses/{business_id}/social_integrations/meta/agencyGet Keystone agency Meta connection readiness - POST
/api/v1/admin/businesses/{business_id}/social_integrations/meta/agency/validateValidate Keystone agency Meta connection - GET
/api/v1/admin/businesses/{business_id}/social_integrations/meta/connect_urlGet Meta OAuth connection URL - GET
/api/v1/admin/businesses/{business_id}/social_integrations/meta/instagram_direct/connect_urlGet Instagram direct OAuth connection URL - GET
/api/v1/admin/businesses/{business_id}/social_integrations/meta/instagram_direct/oauth/callbackComplete Instagram direct OAuth callback - GET
/api/v1/admin/businesses/{business_id}/social_integrations/meta/oauth/callbackComplete Meta OAuth callback - POST
/api/v1/admin/businesses/{business_id}/social_integrations/meta/sync_profilesSync Meta Facebook and Instagram profiles - GET
/api/v1/admin/social_integrations/meta/instagram_direct/oauth/callbackComplete Instagram direct OAuth callback - GET
/api/v1/admin/social_integrations/meta/oauth/callbackComplete Meta OAuth callback
Social posts
- GET
/api/v1/admin/businesses/{business_id}/social_postsList social posts for a business - POST
/api/v1/admin/businesses/{business_id}/social_postsCreate a social post - GET
/api/v1/admin/businesses/{business_id}/social_posts/{social_post_id}Get a social post - PUT
/api/v1/admin/businesses/{business_id}/social_posts/{social_post_id}Update a social post - DELETE
/api/v1/admin/businesses/{business_id}/social_posts/{social_post_id}Delete a social post - POST
/api/v1/admin/businesses/{business_id}/social_posts/{social_post_id}/previewPreview a social post - POST
/api/v1/admin/businesses/{business_id}/social_posts/{social_post_id}/publishPublish a social post immediately - POST
/api/v1/admin/businesses/{business_id}/social_posts/{social_post_id}/syncSync one post from Meta now (targeted re-read — catches IG edits) - POST
/api/v1/admin/businesses/{business_id}/social_posts/{social_post_id}/sync_engagementRefresh engagement metrics for a published social post - GET
/api/v1/admin/businesses/{business_id}/social_posts/calendar_eventsList social post calendar events - POST
/api/v1/admin/businesses/{business_id}/social_posts/full_syncAdmin: deep full sync of all feeds (re-reads every post, catches edits) - POST
/api/v1/admin/businesses/{business_id}/social_posts/generateGenerate editable social post content - POST
/api/v1/admin/businesses/{business_id}/social_posts/syncSync all connected feeds now (incremental delta from Meta)
Social profiles
- GET
/api/v1/admin/businesses/{business_id}/social_profilesList social profiles for a business - PATCH
/api/v1/admin/businesses/{business_id}/social_profiles/{profile_id}Update local social profile settings - POST
/api/v1/admin/businesses/{business_id}/social_profiles/{profile_id}/refresh_tokenRefresh a social profile publish token when supported
Team
- GET
/api/v1/admin/businesses/{business_id}/team_membersGet all team members - POST
/api/v1/admin/businesses/{business_id}/team_membersCreate team member - GET
/api/v1/admin/businesses/{business_id}/team_members/{team_member_id}Get team member details - PUT
/api/v1/admin/businesses/{business_id}/team_members/{team_member_id}Update team member - DELETE
/api/v1/admin/businesses/{business_id}/team_members/{team_member_id}Delete team member - PUT
/api/v1/admin/businesses/{business_id}/team_members/reorderReorder team members
Voice calls
Webchat
Website
- GET
/api/v1/admin/businesses/{business_id}/websiteGet website for business - POST
/api/v1/admin/businesses/{business_id}/websiteCreate website for business - GET
/api/v1/admin/businesses/{business_id}/website-check/artifacts/{artifact_id}A screenshot the site agent's browser check took - GET
/api/v1/admin/businesses/{business_id}/website-mod/requirements/{file_id}Download a document attached for the site agent - POST
/api/v1/admin/businesses/{business_id}/website-mod/requirements/uploadUpload a document for the site agent (website editor chats) - GET
/api/v1/admin/businesses/{business_id}/website/api-keyReveal the website's public API key (live credential) - GET
/api/v1/admin/businesses/{business_id}/website/collaboratorsList who has access to the business's site repo - POST
/api/v1/admin/businesses/{business_id}/website/collaboratorsInvite a GitHub username to the business's site repo (push) - DELETE
/api/v1/admin/businesses/{business_id}/website/collaborators/{username}Remove a collaborator or cancel their pending invitation - GET
/api/v1/admin/businesses/{business_id}/website/commitsList the website's change history (History tab) - PUT
/api/v1/admin/businesses/{business_id}/website/photosUpdate website photo mappings - GET
/api/v1/admin/websites/{website_id}/custom-domainGet custom domain state - POST
/api/v1/admin/websites/{website_id}/custom-domainCreate or attach custom domain - DELETE
/api/v1/admin/websites/{website_id}/custom-domainRemove custom domain - GET
/api/v1/admin/websites/{website_id}/custom-domain-statusGet custom domain status - GET
/api/v1/admin/websites/{website_id}/entri-setupGet Entri setup (token + dnsRecords) for automated DNS - GET
/api/v1/admin/websites/{website_id}/provisioning-streamStream provisioning logs and status for a website (SSE) - POST
/api/v1/admin/websites/{website_id}/reconcile-custom-domainReconcile orphaned custom domain - POST
/api/v1/admin/websites/{website_id}/reprovisionRe-provision a failed website
Website agent
- GET
/api/v1/businesses/{business_id}/website-agent/configGet effective website-agent settings for a business - PATCH
/api/v1/businesses/{business_id}/website-agent/configUpdate website-agent settings for a business - GET
/api/v1/businesses/{business_id}/website-agent/modelsThe models the website editor offers, and its defaults
Website modifications
- GET
/api/v1/admin/businesses/{business_id}/website-modRead the business's website-mod thread, pending change and preview - POST
/api/v1/admin/businesses/{business_id}/website-mod/cancelCancel the pending website change - POST
/api/v1/admin/businesses/{business_id}/website-mod/changesSubmit a website change request from the console - POST
/api/v1/admin/businesses/{business_id}/website-mod/check/overrideLet a change its browser check holds back be published (Keystone staff) - POST
/api/v1/admin/businesses/{business_id}/website-mod/check/recheckLook at the pending change's pages in a browser again - POST
/api/v1/admin/businesses/{business_id}/website-mod/confirmations/{confirmation_id}Answer the site agent's question (continue or stop) - POST
/api/v1/admin/businesses/{business_id}/website-mod/merge-conflict/declineDecline rebuilding a change the site's direct edits refused - GET
/api/v1/admin/businesses/{business_id}/website-mod/progress-streamStream website-mod agent progress events (SSE) - POST
/api/v1/admin/businesses/{business_id}/website-mod/publishPublish the pending website change (approve + merge-deploy) - DELETE
/api/v1/admin/businesses/{business_id}/website-mod/queue/{item_id}Take back a queued request before it goes - GET
/api/v1/admin/businesses/{business_id}/website-mod/runsThe website's recent agent runs, each with its progress timeline - GET
/api/v1/admin/businesses/{business_id}/website-mod/sessionRead the website's live-preview session (pilot) - POST
/api/v1/admin/businesses/{business_id}/website-mod/session/heartbeatKeep the website's live-preview session leased while the editor is open - POST
/api/v1/admin/businesses/{business_id}/website-mod/session/prewarmPre-warm the website's live-preview session (pilot) - POST
/api/v1/admin/businesses/{business_id}/website-mod/stopStop the change being made, keeping what the site agent has done - POST
/api/v1/admin/businesses/{business_id}/website-mod/undoTake back the newest version of the change in review
Website preview
- GET
/api/v1/admin/businesses/{business_id}/website-previewGet the business's website preview, chat, and draft URL - POST
/api/v1/admin/businesses/{business_id}/website-previewCreate (or start over) the business's website preview - GET
/api/v1/admin/businesses/{business_id}/website-preview/progress-streamStream the live preview edit's activity (SSE) - GET
/api/v1/admin/businesses/{business_id}/website-preview/runsThe preview's past revisions, each with its activity trail - POST
/api/v1/admin/businesses/{business_id}/website-preview/session/heartbeatKeep the preview's live edit session leased while the chat is open - POST
/api/v1/admin/businesses/{business_id}/website-preview/session/prewarmPre-warm the preview's live edit session - POST
/api/v1/admin/website-previews/{preview_id}/check/overrideLet a draft its browser check holds back be finished (Keystone staff) - POST
/api/v1/admin/website-previews/{preview_id}/check/recheckLook at the draft's pages in a browser again - POST
/api/v1/admin/website-previews/{preview_id}/confirmConfirm the website preview and start the full build - POST
/api/v1/admin/website-previews/{preview_id}/editsSend a chat edit to the website preview - DELETE
/api/v1/admin/website-previews/{preview_id}/queue/{item_id}Take back a queued draft edit before it goes - POST
/api/v1/admin/website-previews/{preview_id}/stopStop the draft edit being made, keeping what the site agent has done - POST
/api/v1/admin/website-previews/{preview_id}/undoTake back the draft's newest edit