Gruvi
Gruvi
HomeFor AgentsAPIBlogPricing

OpenAPI reference

Gruvi API

Content distribution over HTTPS. Upload finished media, publish or schedule posts, and check what happened next.

v2.1.0OpenAPI 3.1.031 endpoints
Base URLhttps://api.agentgruvi.com

Authentication

Create a named key in Agent Access after verifying your account. Keep the key in an environment variable or secret manager. Send Authorization: Bearer $GRUVI_API_KEY to the Gruvi API. Never forward this header to a signed storage upload URL.

Read your account to obtain its userId, then list connected accounts to choose exact destination IDs. Do not derive a userId from the key itself. X uses the platform identifier twitter.

A read-only first request
curl --fail-with-body https://api.agentgruvi.com/api/gruvi/social-accounts \
  -H "Authorization: Bearer $GRUVI_API_KEY"

Limits, access and retries

Setup, connected accounts and media preparation remain available before subscribing. Submitting a post requires verified, active publishing access through a plan, trial or complimentary grant. Eligible accounts can start one three-day trial through hosted checkout.

180 / minuteRequests per account
40 / minuteWrites per account
12 / minutePublishing requests

Keys for an account share these limits. Credential and checkout writes allow 10 requests per five minutes. Free preparation allows five video and 50 image upload allocations daily; an active publishing plan or trial allows 60 videos and 400 images. Authentication and recovery have separate protections.

Honor Retry-After on 429 responses. For schedules, bulk requests and carousel sends, preserve the original requestId and unchanged payload after uncertainty. For an immediate video send, read delivery status before retrying. A queued request, a future schedule and a TikTok inbox draft are different from a confirmed public post.

Read the retry guide →

Endpoint reference

Replace example IDs and timestamps before running a request. An accountId identifies a connected destination; videoId and carouselId identify saved media.

Example language

Account

Identify the account authorized by your agent key.

GET/api/user/accountRead the authenticated account

Authentication: bearer agent key. The server resolves the account from your key.

Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/user/account' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint

Billing

Plans, trial eligibility and secure hosted checkout.

GET/api/user/subscriptionRead subscription status

Authentication: bearer agent key. The server resolves the account from your key.

Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/user/subscription' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
GET/api/publishing/plansList monthly distribution plans

Public endpoint. No agent key is required.

Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/publishing/plans'

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
POST/api/publishing/checkoutCreate hosted Stripe checkout without charging a card

Authentication: bearer agent key. The server resolves the account from your key.

JSON request body

FieldTypeDetails
planIdRequiredstring Values: starter, scale, pro.
requestIdRequiredstring
Shell example
curl --fail-with-body --request POST 'https://api.agentgruvi.com/api/publishing/checkout' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "planId": "starter",
  "requestId": "campaign-post-001"
}'

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint

Media

Upload finished videos and thumbnails without generating content.

GET/api/gruvi/social-accountsList connected destination accounts

Authentication: bearer agent key. The server resolves the account from your key.

Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/social-accounts' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
GET/api/gruvi/videos/{userId}List media

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
userIdRequiredstringpath
pageintegerquery
limitintegerquery
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/videos/your-userId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
GET/api/gruvi/videos/{userId}/{videoId}Inspect a video

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
userIdRequiredstringpath
videoIdRequiredstringpath
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/videos/your-userId/your-videoId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
POST/api/gruvi/videos/{userId}/get-upload-urlGet a signed upload URL for a video up to 512 MB

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
userIdRequiredstringpath

JSON request body

FieldTypeDetails
fileNameRequiredstring
fileTypeRequiredstring Values: video/mp4, video/quicktime, video/webm.
fileSizeRequiredinteger
Shell example
curl --fail-with-body --request POST 'https://api.agentgruvi.com/api/gruvi/videos/your-userId/get-upload-url' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "fileName": "your-fileName",
  "fileType": "video/mp4",
  "fileSize": 1024
}'

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
POST/api/gruvi/videos/{userId}/finalize-uploadSave a completed direct upload

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
userIdRequiredstringpath

JSON request body

FieldTypeDetails
videoIdRequiredstringFormat: uuid.
videoKeyRequiredstring
titleRequiredstring
descriptionstring
aspectRatiostring Values: portrait, landscape.
Shell example
curl --fail-with-body --request POST 'https://api.agentgruvi.com/api/gruvi/videos/your-userId/finalize-upload' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "videoId": "your-video-id",
  "videoKey": "your-videoKey",
  "title": "A closer look",
  "description": "The details behind our next release.",
  "aspectRatio": "portrait"
}'

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
POST/api/gruvi/videos/{userId}/{videoId}/upload-thumbnailUpload a custom JPEG thumbnail

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
userIdRequiredstringpath
videoIdRequiredstringpath

JSON request body

FieldTypeDetails
thumbnailBase64RequiredstringJPEG data URL, at most 5 MB decoded.
Shell example
curl --fail-with-body --request POST 'https://api.agentgruvi.com/api/gruvi/videos/your-userId/your-videoId/upload-thumbnail' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "thumbnailBase64": "your-thumbnailBase64"
}'

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
PUT/api/gruvi/videos/{userId}/{videoId}/social-metadataSet title, description and tags

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
userIdRequiredstringpath
videoIdRequiredstringpath

JSON request body

FieldTypeDetails
titlestring
descriptionstring
tagsstring[]
Shell example
curl --fail-with-body --request PUT 'https://api.agentgruvi.com/api/gruvi/videos/your-userId/your-videoId/social-metadata' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "title": "A closer look",
  "description": "The details behind our next release.",
  "tags": [
    "your-tags"
  ]
}'

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint

Publishing

Send a video and inspect delivery for each destination.

POST/api/gruvi/videos/{userId}/{videoId}/batch-social-uploadQueue a video for immediate publishing; requires a publishing plan or trial

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
userIdRequiredstringpath
videoIdRequiredstringpath

JSON request body

FieldTypeDetails
platformsRequiredobject[] Minimum 1 items. Item fields: platform, accountId.
titlestring
descriptionstring
tagsstring[]
tiktokSettingsobject Object fields: postMode, privacyLevel, allowComment, allowDuet, allowStitch, discloseContent, brandOrganic, brandedContent.
addThumbnailIntroboolean
Shell example
curl --fail-with-body --request POST 'https://api.agentgruvi.com/api/gruvi/videos/your-userId/your-videoId/batch-social-upload' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "platforms": [
    {
      "platform": "twitter",
      "accountId": "your-connected-account-id"
    }
  ],
  "title": "A closer look",
  "description": "The details behind our next release.",
  "tags": [
    "your-tags"
  ],
  "tiktokSettings": {
    "postMode": "draft",
    "privacyLevel": "SELF_ONLY"
  },
  "addThumbnailIntro": false
}'

Responses

202Queued; inspect per-platform status before treating delivery as published.
403Verified account and active publishing plan required. Free setup remains available.
Link to this endpoint
GET/api/gruvi/videos/{userId}/{videoId}/social-upload-statusInspect per-platform immediate delivery

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
userIdRequiredstringpath
videoIdRequiredstringpath
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/videos/your-userId/your-videoId/social-upload-status' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint

Scheduling

Create, inspect and cancel schedules, including batches.

POST/api/gruvi/scheduled-postsSchedule a future video post; requires a publishing plan or trial

Authentication: bearer agent key. The server resolves the account from your key.

JSON request body

FieldTypeDetails
platformsRequiredobject[] Minimum 1 items. Item fields: platform, accountId.
titlestring
descriptionstring
tagsstring[]
tiktokSettingsobject Object fields: postMode, privacyLevel, allowComment, allowDuet, allowStitch, discloseContent, brandOrganic, brandedContent.
addThumbnailIntroboolean
videoIdRequiredstringFormat: uuid.
scheduledTimeRequiredstringFormat: date-time.
thumbnailUrlstringFormat: uri.
thumbnailKeystring
requestIdstringA stable ID for this logical schedule. Reuse it with an unchanged body after an uncertain response. Up to 100 characters.
Shell example
curl --fail-with-body --request POST 'https://api.agentgruvi.com/api/gruvi/scheduled-posts' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "requestId": "campaign-post-001",
  "videoId": "your-video-id",
  "title": "A closer look",
  "description": "The details behind our next release.",
  "platforms": [
    {
      "platform": "instagram",
      "accountId": "your-connected-account-id"
    }
  ],
  "scheduledTime": "2026-12-01T09:00:00Z"
}'

Responses

201Schedule created; not yet published.
403Verified account and active publishing plan required. Free setup remains available.
429Monthly scheduling allowance reached
Link to this endpoint
GET/api/gruvi/scheduled-postsRead calendar, delivery history and allowance

Authentication: bearer agent key. The server resolves the account from your key.

Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/scheduled-posts' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
GET/api/gruvi/scheduled-posts/{scheduleId}Inspect one scheduled post

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
scheduleIdRequiredstringpath
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/scheduled-posts/your-scheduleId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
DELETE/api/gruvi/scheduled-posts/{scheduleId}Cancel a scheduled post

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
scheduleIdRequiredstringpath
Shell example
curl --fail-with-body --request DELETE 'https://api.agentgruvi.com/api/gruvi/scheduled-posts/your-scheduleId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
POST/api/gruvi/scheduled-posts/bulkSchedule 1 to 20 videos with one stable requestId and per-item results

Authentication: bearer agent key. The server resolves the account from your key.

JSON request body

FieldTypeDetails
requestIdRequiredstring Up to 100 characters.
postsRequiredobject[] Minimum 1 items. Maximum 20 items. Item fields: videoId, platforms, scheduledTime, title, description, tags, tiktokSettings, addThumbnailIntro.
Shell example
curl --fail-with-body --request POST 'https://api.agentgruvi.com/api/gruvi/scheduled-posts/bulk' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "requestId": "campaign-batch-001",
  "posts": [
    {
      "videoId": "your-video-id",
      "title": "A closer look",
      "description": "The details behind our next release.",
      "platforms": [
        {
          "platform": "instagram",
          "accountId": "your-connected-account-id"
        }
      ],
      "scheduledTime": "2026-12-01T09:00:00Z"
    }
  ]
}'

Responses

201All posts scheduled
207Per-item success and failure results. Retry the unchanged batch with the same requestId.
400Invalid input
401Bearer authentication required
403Account permission or publishing access required
429Rate limit or monthly allowance reached. Honor Retry-After.
503Request could not be confirmed. Inspect state and reuse the request ID.
Link to this endpoint

Carousels

Prepare image sets and publish or schedule them on Instagram or TikTok.

POST/api/gruvi/carousels/get-upload-urlAllocate a ten-minute signed upload URL for one carousel image

Authentication: bearer agent key. The server resolves the account from your key.

JSON request body

FieldTypeDetails
fileTypeRequiredvalue Values: image/jpeg, image/png, image/webp.
fileSizeRequiredinteger
Shell example
curl --fail-with-body --request POST 'https://api.agentgruvi.com/api/gruvi/carousels/get-upload-url' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "fileType": "image/jpeg",
  "fileSize": 1024
}'

Responses

200Request result
400Invalid input
401Bearer authentication required
403Account permission or publishing access required
429Rate limit or monthly allowance reached. Honor Retry-After.
503Request could not be confirmed. Inspect state and reuse the request ID.
Link to this endpoint
POST/api/gruvi/carouselsSave 2 to 10 uploaded images as a carousel without publishing

Authentication: bearer agent key. The server resolves the account from your key.

JSON request body

FieldTypeDetails
titleRequiredstring Up to 500 characters.
captionstring Up to 10000 characters.
imageKeysRequiredstring[] Minimum 2 items. Maximum 10 items.
Shell example
curl --fail-with-body --request POST 'https://api.agentgruvi.com/api/gruvi/carousels' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "title": "The story in pictures",
  "caption": "A closer look, frame by frame.",
  "imageKeys": [
    "your-first-uploaded-image-key",
    "your-second-uploaded-image-key"
  ]
}'

Responses

201Carousel saved without publishing.
400Invalid input
401Bearer authentication required
403Account permission or publishing access required
429Rate limit or monthly allowance reached. Honor Retry-After.
503Request could not be confirmed. Inspect state and reuse the request ID.
Link to this endpoint
GET/api/gruvi/carouselsList this account's saved carousels

Authentication: bearer agent key. The server resolves the account from your key.

Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/carousels' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Request result
400Invalid input
401Bearer authentication required
403Account permission or publishing access required
429Rate limit or monthly allowance reached. Honor Retry-After.
503Request could not be confirmed. Inspect state and reuse the request ID.
Link to this endpoint
POST/api/gruvi/carousels/{carouselId}/publishPublish one carousel to one Instagram or TikTok account. TikTok defaults to creator-inbox review.

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
carouselIdRequiredstringpathFormat: uuid.

JSON request body

FieldTypeDetails
requestIdRequiredstring Up to 100 characters.
captionstring Up to 10000 characters.
tiktokSettingsobject Object fields: postMode, privacyLevel, allowComment, allowDuet, allowStitch, discloseContent, brandOrganic, brandedContent.
platformRequiredvalue Values: instagram, tiktok.
accountIdRequiredstring
Shell example
curl --fail-with-body --request POST 'https://api.agentgruvi.com/api/gruvi/carousels/your-carouselId/publish' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "platform": "instagram",
  "accountId": "your-connected-account-id",
  "requestId": "carousel-instagram-001",
  "caption": "A closer look, frame by frame."
}'

Responses

200Request result
400Invalid input
401Bearer authentication required
403Account permission or publishing access required
429Rate limit or monthly allowance reached. Honor Retry-After.
503Request could not be confirmed. Inspect state and reuse the request ID.
Link to this endpoint
POST/api/gruvi/carousels/{carouselId}/scheduleSchedule one carousel to one Instagram or TikTok account. TikTok defaults to creator-inbox review.

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
carouselIdRequiredstringpathFormat: uuid.

JSON request body

FieldTypeDetails
requestIdRequiredstring Up to 100 characters.
captionstring Up to 10000 characters.
tiktokSettingsobject Object fields: postMode, privacyLevel, allowComment, allowDuet, allowStitch, discloseContent, brandOrganic, brandedContent.
platformsRequiredobject[] Minimum 1 items. Maximum 1 items. Item fields: platform, accountId.
scheduledTimeRequiredstringFormat: date-time.
Shell example
curl --fail-with-body --request POST 'https://api.agentgruvi.com/api/gruvi/carousels/your-carouselId/schedule' \
  --header "Authorization: Bearer $GRUVI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "requestId": "carousel-schedule-001",
  "title": "A closer look",
  "description": "The details behind our next release.",
  "platforms": [
    {
      "platform": "instagram",
      "accountId": "your-connected-account-id"
    }
  ],
  "scheduledTime": "2026-12-01T09:00:00Z"
}'

Responses

201Carousel schedule created; not yet published.
400Invalid input
401Bearer authentication required
403Account permission or publishing access required
429Rate limit or monthly allowance reached. Honor Retry-After.
503Request could not be confirmed. Inspect state and reuse the request ID.
Link to this endpoint
GET/api/gruvi/carousels/{carouselId}/publications/{requestId}Check an uncertain carousel publication before retrying

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
carouselIdRequiredstringpathFormat: uuid.
requestIdRequiredstringpath Up to 100 characters.
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/carousels/your-carouselId/publications/your-requestId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Request result
400Invalid input
401Bearer authentication required
403Account permission or publishing access required
429Rate limit or monthly allowance reached. Honor Retry-After.
503Request could not be confirmed. Inspect state and reuse the request ID.
Link to this endpoint

Analytics

Read the metrics available for each connected account.

GET/api/gruvi/youtube/analytics/summaryRead YouTube summary analytics

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
accountIdstringquery
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/youtube/analytics/summary?accountId=your-accountId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
GET/api/gruvi/youtube/analytics/trendsRead YouTube trends analytics

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
accountIdstringquery
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/youtube/analytics/trends?accountId=your-accountId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
GET/api/gruvi/tiktok/analytics/summaryRead TikTok summary analytics

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
accountIdstringquery
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/tiktok/analytics/summary?accountId=your-accountId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
GET/api/gruvi/tiktok/analytics/trendsRead TikTok trends analytics

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
accountIdstringquery
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/tiktok/analytics/trends?accountId=your-accountId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Successful request; publication status must be checked separately.
401Invalid authentication
403Access or paid-plan requirement
429Limit reached
Link to this endpoint
GET/api/gruvi/instagram/analytics/summaryRead Instagram engagement summary

Beta engagement summary for the most recent posts, cached for five minutes. Requires an exact connected accountId and platform read permissions. Missing metrics are null, not zero. X uses the platform identifier twitter.

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
accountIdRequiredstringquery
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/instagram/analytics/summary?accountId=your-accountId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Request result
400Invalid input
401Bearer authentication required
403Account permission or publishing access required
429Rate limit or monthly allowance reached. Honor Retry-After.
503Request could not be confirmed. Inspect state and reuse the request ID.
Link to this endpoint
GET/api/gruvi/facebook/analytics/summaryRead Facebook engagement summary

Beta engagement summary for the most recent posts, cached for five minutes. Requires an exact connected accountId and platform read permissions. Missing metrics are null, not zero. X uses the platform identifier twitter.

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
accountIdRequiredstringquery
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/facebook/analytics/summary?accountId=your-accountId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Request result
400Invalid input
401Bearer authentication required
403Account permission or publishing access required
429Rate limit or monthly allowance reached. Honor Retry-After.
503Request could not be confirmed. Inspect state and reuse the request ID.
Link to this endpoint
GET/api/gruvi/twitter/analytics/summaryRead X engagement summary

Beta engagement summary for the most recent posts, cached for five minutes. Requires an exact connected accountId and platform read permissions. Missing metrics are null, not zero. X uses the platform identifier twitter.

Authentication: bearer agent key. The server resolves the account from your key.

Parameters

FieldTypeDetails
accountIdRequiredstringquery
Shell example
curl --fail-with-body --request GET 'https://api.agentgruvi.com/api/gruvi/twitter/analytics/summary?accountId=your-accountId' \
  --header "Authorization: Bearer $GRUVI_API_KEY"

Responses

200Request result
400Invalid input
401Bearer authentication required
403Account permission or publishing access required
429Rate limit or monthly allowance reached. Honor Retry-After.
503Request could not be confirmed. Inspect state and reuse the request ID.
Link to this endpoint

Keep the contract close to your workflow.

The OpenAPI document describes these same endpoints. Agents can also read the full plain-text guide, the API notes and the MCP server's built-in resources. Read platform settings before sending content.