Endpoints
Posts
Create and manage Google Business Profile posts
Manage local posts on your Google Business Profile.
List Posts
Retrieve all posts for a location.
GET /api/v1/posts?locationId=locations/123
Authorization: Bearer {token}Query Parameters:
| Parameter | Type | Description |
|---|---|---|
locationId | string | Required. Location resource name |
pageSize | number | Max results per page (default: 50) |
pageToken | string | Pagination token |
Response:
{
"status": "ok",
"data": {
"localPosts": [
{
"name": "locations/123/localPosts/456",
"summary": "Check out our new menu!",
"state": "LIVE",
"createTime": "2025-01-15T10:00:00Z"
}
],
"nextPageToken": "..."
}
}import { SynoveoClient } from '@synoveo/sdk'
const client = new SynoveoClient({ clientId, clientSecret })
// Get single page
const page = await client.posts.list('locations/123', { pageSize: 50 })
// Iterate all posts
for await (const post of client.posts.listAll('locations/123')) {
console.log(post.summary)
}Create Post
Create a new post on the business profile.
POST /api/v1/posts?locationId=locations/123
Authorization: Bearer {token}
Content-Type: application/json
{
"summary": "Grand opening sale! 20% off everything.",
"callToAction": {
"actionType": "LEARN_MORE",
"url": "https://example.com/sale"
},
"topicType": "OFFER"
}Response:
{
"status": "ok",
"data": {
"name": "locations/123/localPosts/789",
"summary": "Grand opening sale! 20% off everything.",
"state": "PROCESSING",
"createTime": "2025-01-15T14:30:00Z"
}
}const post = await client.posts.create('locations/123', {
summary: 'Grand opening sale! 20% off everything.',
callToAction: {
actionType: 'LEARN_MORE',
url: 'https://example.com/sale'
},
topicType: 'OFFER'
})Post Types
| Topic Type | Description |
|---|---|
STANDARD | General update |
EVENT | Event announcement with dates |
OFFER | Promotional offer with optional coupon |
ALERT | COVID or special alert |
Call to Action Types
| Action | Description |
|---|---|
BOOK | Book an appointment |
ORDER | Place an order |
SHOP | Shop online |
LEARN_MORE | Learn more link |
SIGN_UP | Sign up form |
CALL | Call the business |
Update Post
Update an existing post.
PATCH /api/v1/posts/{postId}?locationId=locations/123
Authorization: Bearer {token}
Content-Type: application/json
{
"summary": "Updated post content"
}const updated = await client.posts.update(
'locations/123',
'postId',
{ summary: 'Updated post content' }
)Delete Post
Delete a post.
DELETE /api/v1/posts/{postId}?locationId=locations/123
Authorization: Bearer {token}Response:
{
"status": "ok",
"data": { "deleted": true }
}await client.posts.deletePost('locations/123', 'postId')Errors
| Code | Description |
|---|---|
QUOTA_EXCEEDED | Monthly post limit reached |
GOOGLE_API_ERROR | Google rejected the post |
VALIDATION_ERROR | Invalid post data |
PLAN_RESTRICTION | Posts not available on current plan |