apply_blog_plan_cadence
ChatGPTRequires blog:write. Call preview_blog_plan_cadence first, show the proposed editorial date moves to the user, then pass the unchanged weekdays, plan version, schedule digest, and confirmation token with a stable idempotency key. This only moves eligible editorial dates and never schedules, publishes, or unpublishes an article.
check_post_delivery
ChatGPTRequires posts:write. Read the existing platform upload and update Rolino from that evidence. This never uploads, publishes, or changes visibility. UNKNOWN requires manual review. Missing IDs are not proof that an upload is absent.
complete_media_asset_upload
ChatGPTRequires posts:write. Call after transferring the approved file to the prepared URL. The server verifies stored bytes and media metadata. Use only the returned asset ID in a draft. Failed verification is not a ready asset. This does not create, schedule, or publish a post.
create_blog_article_from_plan_item
ChatGPTRequires blog:write. Create an editable draft from one accepted plan item and queue generation. Publication remains a separate approved-revision preview and execute operation.
create_blog_plan
ChatGPTRequires blog:manage. Queue an evidence-backed 30-day plan only after import is ready. Ask the user for cadence first and poll the returned job. This never accepts items or publishes.
create_draft_post
ChatGPTCreate a draft in one exact project. This changes Rolino data but never schedules or publishes. TikTok accepts one video or an ordered photo carousel (up to Rolino’s 10-item limit); PNG/JPEG/WebP photos get JPEG delivery copies without cropping. Set photoCoverIndex (zero-based) and optional autoAddMusic for direct photos; keep allowDuet/allowStitch false and videoCoverTimestampMs null. Photo inbox drafts include the caption. Before a TikTok draft, refresh account-specific delivery options and mark the exact choices reviewed separately from mutation consent. A YouTube draft requires exactly one stored video plus explicit title, category, visibility, audience, disclosure, notification, and tag settings; its description uses the YOUTUBE caption override or shared caption. Unaudited Google API projects may be limited to Private uploads. Supply a stable idempotency key so retrying the same input cannot create a duplicate.
create_project
ChatGPTCreate and save one paired Rolino project and brand. This requires projects:write and changes Rolino data, but it does not research a website, connect providers, schedule, or publish. Supply a stable idempotency key so retrying the same input cannot create a duplicate; returned website URLs are normalized and may differ from the submitted string.
execute_blog_connection_setup
ChatGPTRequires blog:manage, the exact preview confirmation, and idempotency. A successful first response can return a delivery token or webhook secret once; write them only to server-side environment configuration. A replay never reveals them again. This cannot publish.
execute_blog_publish
ChatGPTPublish only the same exact user-approved revision from preview. Requires blog:publish, a confirmation token, and an idempotency key.
execute_blog_revision_approval
ChatGPTRequires blog:approve. Consume the matching confirmation and idempotently approve the exact revision and image bundle, which makes that bundle eligible for a separate publication operation. This cannot publish.
execute_blog_schedule
ChatGPTRequires blog:publish. Consume the matching confirmation and idempotently schedule or reschedule one already-approved exact bundle for future external publication. This does not grant approval.
execute_blog_schedule_cancellation
ChatGPTRequires blog:publish. Consume the matching confirmation and idempotently cancel the exact future schedule. This is destructive, but it never unpublishes a live article and does not grant approval.
execute_blog_webhook_destination
ChatGPTRequires blog:manage plus the matching preview token and an idempotency key. Rolino generates a signing secret for a new destination and returns it once. Write it only to the receiver's server environment. Never place it in a prompt, log, or client setting. Test the signed receiver before publication. An idempotent replay has no secret.
execute_blog_webhook_secret_rotation
ChatGPTRequires blog:manage plus the matching preview token and an idempotency key. The old secret stops working at once. Write the new one-time secret only to the receiver's server environment, then test before publication. An idempotent replay has no secret.
execute_draft_deletion
ChatGPTRequires posts:delete and user approval of the exact preview. Permanently delete the untouched draft using its version, confirmation, and stable retry key. Reusable media originals remain. Cannot delete a scheduled or published post.
execute_integration_disconnection
ChatGPTRequires integrations:disconnect and user approval of the exact preview. Use its unchanged expectedVersion and confirmation token with a stable idempotency key. Clears local authorization; published posts and saved schedules remain. In-flight delivery can finish. Remote revocation can remain unresolved.
execute_media_cleanup
ChatGPTPermanently delete only the exact unchanged candidates from preview through Rolino's durable deletion queue. A general request such as 'free some space' is not approval. Call this only after the user explicitly confirms the shown cutoff, candidate count, excluded count, unknown-size count, and estimated space. Use one stable idempotency key for retries.
execute_post_publish
ChatGPTRequest external publishing only after preview_post_publish. If internalApproval is PENDING_INTERNAL_APPROVAL, no publication starts: explicitly submit its request ID, return the authenticated review URL, and wait for a human reviewer. The agent confirmation token cannot approve internal review. Pass the unchanged destinations, post version, and returned one-time confirmation token. Immediate YouTube publishing preserves the previewed PUBLIC, UNLISTED, or PRIVATE visibility and never creates or confirms a schedule. Video execution remains PREPARING for YouTube and LinkedIn until provider-confirmed upload and processing complete; no queued or local state is reported as published. Rolino rechecks readiness and safe retry state, durably queues the exact destinations, rejects ambiguous prior outcomes, and uses the stable idempotency key to prevent duplicate execution. This is immediately consequential.
execute_post_schedule
ChatGPTSchedule a post only after preview_post_schedule. If internalApproval is PENDING_INTERNAL_APPROVAL, no publication starts: explicitly submit its request ID, return the authenticated review URL, and wait for a human reviewer. The agent confirmation token cannot approve internal review. Pass the unchanged time, timezone, post version, and returned one-time confirmation token. For YouTube, confirmed execution begins or resumes a private upload immediately and may return PENDING with phase REMOTE_SCHEDULE_CONFIRMATION after upload while YouTube acknowledges the future Public publish time. PENDING never means the video is public. Rolino rechecks readiness and provider health, rejects stale or mismatched confirmation, and uses the stable idempotency key for safe retries. Scheduling causes future external publishing and is consequential.
execute_post_schedule_cancellation
ChatGPTRequires posts:schedule and user approval of the exact preview. Return a future local schedule to Draft with the unchanged post version and confirmation. Reuse the idempotency key on retry. Reject started or uncertain delivery; never delete a remote post.
generate_blog_article
ChatGPTQueue one article generation. First success uses 1 credit; 3 regenerations are included. Call with previewOnly before further generation, show the exact charge and article to the user, and obtain explicit confirmation before sending its confirmationToken. Generic write permission is not credit approval.
generate_blog_image
ChatGPTRequires blog:write. Queue a bounded featured-image candidate for one exact article revision. This cannot approve an image or article and cannot publish.
get_backlink_discovery
ChatGPTRead one stored backlink discovery run. This closed-world tool does not contact providers or send email.
get_backlink_prospect
ChatGPTRead one safe stored backlink prospect and its canonical next action. It omits emails and drafts and never sends email.
get_blog_article
ChatGPTRead one exact Blog Studio draft and its immutable revision history.
get_blog_connection_status
ChatGPTRequires blog:read. Read configured and honestly verified delivery/revalidation readiness. It never returns stored tokens or secrets.
get_blog_job
ChatGPTRead truthful durable job state without exposing prompts, provider details, or secrets.
get_blog_setup_status
ChatGPTRequires blog:read. Call first to inspect action-oriented website, import, plan, delivery, and revalidation readiness. This never returns credentials, secrets, prompts, or draft content.
get_media_cleanup_status
ChatGPTRead bounded progress for one cleanup. Queued and retrying bytes still count as stored until object deletion succeeds. This tool never returns storage keys or provider errors.
get_post
ChatGPTGet one Rolino post, including its ordered media and publication-destination status, by exact project and post IDs. This tool never changes Rolino data.
get_post_performance
ChatGPTRequires analytics:read. Read stored project-scoped results and data trust. Accounts remain separate. No refresh, provider request, recommendation, or publishing. Unverified providers return unavailable data.
get_post_readiness
ChatGPTEvaluate one saved post against its destinations, media, captions, settings, permissions, token timing, and cached provider health. YouTube checks cover one stored video, explicit metadata and declarations, description limits, Private-only audit restrictions, and queue-aware lead time. LinkedIn checks allow text, JPEG/PNG images, or exactly one MP4 within its size and duration limits. This is a read-only evaluation and does not refresh providers or publish content.
get_project
ChatGPTGet one Rolino project by its exact ID after discovering it with list_projects. This tool never changes Rolino data.
get_seo_opportunity
ChatGPTRead one canonical versioned SEO task by exact project and opportunity ID. It includes the Ready or Research decision, selected format, exact deliverables, safe evidence, provenance, separate topic-relevance and action-readiness confidence, targeting, source dates, limitations, success metric, and no-publish rules. This closed-world tool is read-only and cannot generate content, publish, or call an external provider.
get_seo_report
ChatGPTRead one unchanged weekly SEO report snapshot by exact project and report ID. It groups complete Ready tasks, Research tasks, and bounded rejected findings. This closed-world tool is read-only and cannot generate content, change, or deliver a report.
get_storage_usage
ChatGPTRead exact stored bytes, active upload reservations, available upload capacity, pending deletion bytes, and the source breakdown for the selected workspace. Unlimited workspaces still report actual stored bytes. This tool never changes Rolino data.
import_chatgpt_image
ChatGPTRequires posts:write and projects:read. Import one user-approved ChatGPT file into the exact brand's Media Library. Prefer this tool directly for generated or attached images when a host-provided file reference is available; no import card is required. Use show_media_import only when the user requests manual selection or a usable file reference is unavailable. Pass the host-provided file object, never invent a download URL or use a sandbox path. Accepts PNG, JPEG and WebP images up to 20 MB. Returns a verified asset ID for a later draft. Does not create, schedule, approve or publish posts. Reuse the returned asset ID; do not import the same file again after success. If a call times out, inspect the Media Library before retrying.
list_backlink_prospects
ChatGPTRead bounded, safe backlink prospect summaries for one project. This closed-world tool omits emails and draft bodies and never sends email.
list_blog_articles
ChatGPTRead Blog Studio article workflow state for one exact project. Draft content requires blog:read.
list_blog_delivery_attempts
ChatGPTList safe per-destination delivery states and remote URLs. Draft content and provider responses are not returned.
list_blog_plan_items
ChatGPTRequires blog:read. Present this safe frozen evidence to the user before accepting or dismissing any item. Provider payloads and prompts are excluded.
list_blog_plans
ChatGPTRead the bounded 30-day Blog Studio plans for one exact project. This does not read the social calendar.
list_blog_publishing_destinations
ChatGPTList safe destination readiness without credentials or private provider data.
list_blog_publishing_providers
ChatGPTList only providers available to this rollout with safe capabilities and official documentation. Requires blog:manage.
list_calendar_events
ChatGPTList scheduled and published posts and their enabled destinations in one exact project, including immediate publications and YouTube posts whose private early preparation has started. Uses the saved schedule or, when absent, the publication time. By default the bounded window spans 30 days in the past through 90 days ahead; provide both from and to for another range and paginate with nextCursor.
list_integration_health
ChatGPTList secret-safe cached health for every enabled publishing connection (Instagram, TikTok, YouTube, Bluesky, or LinkedIn) in one exact project. This tool does not contact external providers or reveal social credentials.
list_internal_reviews
ChatGPTRead exact publication requests and reviewer comments. Return the authenticated Rolino review link. This does not approve or publish work.
list_media_assets
ChatGPTList reusable images and videos in one exact project or across the selected workspace. Filters use upload time, not last-use time. Results state whether each file is in use and can be deleted. Use this before uploading to avoid duplicates and pass returned asset IDs when creating or updating drafts. This tool never changes Rolino data.
list_posts
ChatGPTList posts in an exact Rolino project. Discover project IDs with list_projects, filter by status when useful, and paginate with nextCursor. This tool never changes Rolino data.
list_projects
ChatGPTList projects visible to the authenticated Rolino organization. Use the returned IDs with get_project; paginate with nextCursor when present. This tool never changes Rolino data.
list_seo_opportunities
ChatGPTRead a bounded list of active Ready and Research SEO tasks for one exact project. Each result contains one complete versioned task, decision, format, deliverables, evidence, provenance, separate topic-relevance and action-readiness confidence, limits, and no-publish rules. Rejected findings are never active tasks. This closed-world tool cannot run analysis, change settings, delete data, enable reports, send email, publish, generate media, or call an external provider.
list_seo_reports
ChatGPTRead a bounded list of stored weekly SEO report summaries for one exact project. This closed-world tool is read-only and cannot generate or deliver reports.
list_social_metric_definitions
ChatGPTRequires analytics:read. Read stored project-scoped results and data trust. Accounts remain separate. No refresh, provider request, recommendation, or publishing. Unverified providers return unavailable data.
list_social_performance
ChatGPTRequires analytics:read. Read stored project-scoped results and data trust. Accounts remain separate. No refresh, provider request, recommendation, or publishing. Unverified providers return unavailable data.
prepare_media_asset_upload
ChatGPTRequires posts:write. Reserve one user-approved file in the exact project. Return a short-lived upload URL and required headers. Transfer the file bytes to that URL, then call complete_media_asset_upload with the returned storage identity. Keep the upload URL private. This does not create or publish a post and does not read local files on the server.
preview_blog_connection_setup
ChatGPTRequires blog:manage. Preview the exact site, endpoint, credential action, secret action, and effects before provisioning. No delivery token or webhook secret is returned by preview.
preview_blog_plan_cadence
ChatGPTRequires blog:write. Preview how eligible editorial calendar dates will reflow inside the current 30-day plan. Scheduled and published dates stay locked, all topics and drafts stay present, and nothing is scheduled, published, or unpublished. Call this before apply_blog_plan_cadence.
preview_blog_publish
ChatGPTPreview an exact user-approved revision and issue a short-lived bound confirmation. This does not publish.
preview_blog_revision_approval
ChatGPTRequires blog:approve. Validate one exact revision, its approved image bundle, live links, warnings, and bundle hash, then create a short-lived confirmation. This cannot publish.
preview_blog_schedule
ChatGPTRequires blog:publish. Bind one already-approved exact bundle, future instant, IANA timezone, and destination set to a short-lived confirmation. This does not grant approval or publish now.
preview_blog_schedule_cancellation
ChatGPTRequires blog:publish. Bind the exact current future schedule to a short-lived cancellation confirmation. This does not unpublish a live article and does not grant approval.
preview_blog_webhook_destination
ChatGPTRequires blog:manage. Validate an exact create or update and return a five-minute confirmation. This does not create a destination, reveal a secret, test, or publish.
preview_blog_webhook_secret_rotation
ChatGPTRequires blog:manage. Return a five-minute confirmation for immediate old-secret invalidation. This does not rotate or reveal a secret.
preview_draft_deletion
ChatGPTRequires posts:delete. Preview permanent deletion of one untouched draft. Show its caption, media count, and consequence to the user. Reusable Media Library originals remain.
preview_integration_disconnection
ChatGPTRequires the separate integrations:disconnect capability. Preview the exact Bluesky account and pending deliveries before user approval. Does not disconnect or expose credentials.
preview_media_cleanup
ChatGPTFind at most 500 exact unused Media Library files and create a short-lived confirmation. The age filter means upload age. This deletes nothing. Show the cutoff, candidate count, excluded in-use count, unknown-size count, and estimated reclaimable space to the user before asking for confirmation.
preview_post_publish
ChatGPTValidate exact destinations for immediate publishing against the current post version, safe retry state, readiness, and live provider health. YouTube readiness requires one stored video and explicit metadata. Immediate YouTube publishing uses the configured PUBLIC, UNLISTED, or PRIVATE visibility and never creates a schedule; the preview exposes this as deliveryMode IMMEDIATE. Unaudited Google API projects may be restricted to Private. This contacts configured providers and creates a five-minute, single-use confirmation, but does not publish. Inspect the complete result before calling execute_post_publish with identical destinations.
preview_post_schedule
ChatGPTValidate one exact future schedule against the current post version and live provider health. A YouTube schedule must target Public. Its preview states that preparation uploads the video privately now; CONFIRMING_SCHEDULE means the upload is complete and YouTube is acknowledging the future Public publish time, not that the video is public. This contacts configured providers and creates a five-minute, single-use confirmation, but does not schedule or publish the post. Inspect the complete result before calling execute_post_schedule with identical values.
preview_post_schedule_cancellation
ChatGPTRequires posts:schedule. Preview cancellation of all destinations on a future local schedule. Delivery must not have started. Show the post, time, destinations, and consequence to the user. Use check_post_delivery for uncertain delivery.
read_website_analytics
ChatGPTRequires website-analytics:read. Read stored Umami and Datafast connection status, sync status, reports, and active content opportunities. No provider requests. Missing rows are unknown, not zero. Review opportunities before editing or publishing.
refresh_delivery_options
ChatGPTContact one publishing provider and return safe account-specific choices. Bluesky returns text and image limits, connection health, and a human OAuth handoff path on this Rolino host. The owner must approve connection in the browser. TikTok returns account choices for videos and photo carousels; LinkedIn returns member and media policy. Facebook returns Page feed VIDEO and REEL availability; use FEED for one MP4/MOV or REEL for one vertical MP4. Both video formats are public. This refreshes cached health but never creates, schedules, or publishes a post.
retry_blog_plan
ChatGPTRequires blog:manage. Retry one exact failed plan generation with idempotency and poll the returned job.
review_blog_image
ChatGPTRequires blog:write. Approve or reject one exact image version with reviewable alt text and idempotency. This does not approve the article and cannot publish.
set_blog_plan_item_state
ChatGPTRequires blog:write. Apply an optimistic, idempotent ACCEPTED or DISMISSED transition only after showing the evidence. Dismissal is marked destructive. This cannot publish.
show_media_import
ChatGPTOptional fallback: open a file-selection card for one exact brand only when the user requests manual selection or a usable ChatGPT file reference is unavailable. Prefer import_chatgpt_image directly for generated or attached images with a host-provided file reference. The human selects an image from ChatGPT or uploads one and selects Save to Rolino. Opening the card only reads the brand; saving separately calls import_chatgpt_image. Does not create, approve, schedule or publish a post.
start_backlink_discovery
ChatGPTQueue one bounded backlink opportunity discovery for an exact Rolino project. This can contact the configured web research provider. It does not accept an arbitrary query and Rolino never sends email.
test_blog_revalidation
ChatGPTRequires blog:manage. Make one explicit, SSRF-protected open-world signed request to the configured same-host endpoint and persist only a safe status code.
test_blog_webhook_destination
ChatGPTRequires blog:manage. Send one signed capability test to the saved public HTTPS receiver. Delivery stays disabled unless this test succeeds. The response contains only safe status and error fields.
update_backlink_stage
ChatGPTApply one allowed optimistic stage change to a stored prospect. This cannot send email.
update_blog_draft
ChatGPTSave a complete Blog draft with optimistic conflict protection. This creates a new immutable revision and cannot publish.
update_draft_post
ChatGPTUpdate only the supplied draft fields without scheduling or publishing it; omitted caption, destinations, media, and provider settings are preserved. Read the post first and pass its current version; stale versions fail instead of overwriting another change. Editing TikTok content clears its prior review unless replacement settings are explicitly reviewed again. TikTok supports one video or up to 10 ordered photos. Photo originals must be JPEG, PNG, or WebP, up to 25 MiB each. Rolino makes JPEG delivery copies and keeps originals. The photoCoverIndex is zero-based and defaults to 0; keep allowDuet and allowStitch false and videoCoverTimestampMs null. autoAddMusic is optional, off by default, and only applies to direct photo posts. Photo inbox drafts include the caption; video inbox drafts do not. Refresh exact-account delivery options and review settings after content changes. A stable idempotency key makes exact retries safe.
verify_backlink
ChatGPTQueue a bounded public fetch of a claimed page and check for the exact selected owned target URL. This contacts the configured web provider and never sends email.
whoami
ChatGPTUse this before project tools to identify the authenticated Rolino user, organization, and granted capabilities. This tool never changes Rolino data.