For developers and agents
Run your social media with your AI agents
Post content from
Claude
Plan, draft and schedule with the agent you already use. Connect through MCP or build directly with the REST API.
Choose your AI agent
A short setup guide for each tool, with prompts you can actually use.
For your assistant
Give your agent a clear starting point
Send it the quickstart. It covers the connection, a read-only check, and the steps to verify a post before it goes live.
Paste into your agent
Read ezsocial.co/agent-quickstart.md and help me connect EzSocial. First check my workspaces and connected accounts. Ask before scheduling or publishing.
MCP server
Connect Claude, Cursor or another MCP client. Sign in and approve access in your browser.
Server URL
https://mcp.ezsocial.co/mcpBrowse MCP tools REST API
Build with your own code, n8n or Make. Create an API key and send it as a bearer token.
Base URL
https://api.ezsocial.co/api/v1Browse REST endpoints Start in three steps
- 01
Connect a social account
Connect the platforms you want to publish to in EzSocial.
Open connections - 02
Authorize your tool
Approve your MCP client or create an API key with the scopes you need.
Manage API keys - 03
Create and publish
Create a post, schedule it or publish now. Webhooks report the result.
API and MCP access require a paid plan. See pricing.
Reference
Find a tool, endpoint, permission or webhook event.
MCP tools 31
Grouped here for browsing. Your MCP client sees the full tool list.
Workspaces, accounts and brand (4)
- ezsocial_list_workspaces
- ezsocial_list_platforms
- ezsocial_list_accounts
- ezsocial_get_brand_context
Content (12)
- ezsocial_create_post
- ezsocial_list_content
- ezsocial_get_content
- ezsocial_create_content
- ezsocial_update_content
- ezsocial_delete_content
- ezsocial_validate_content
- ezsocial_approve_content
- ezsocial_schedule_content
- ezsocial_unschedule_content
- ezsocial_publish_now
- ezsocial_get_publication_status
AI (4)
- ezsocial_plan_month
- ezsocial_generate_text
- ezsocial_generate_media
- ezsocial_get_generation
Media (5)
- ezsocial_upload_media
- ezsocial_list_media
- ezsocial_delete_media
- ezsocial_create_media_upload
- ezsocial_finalize_media_upload
Webhooks (6)
- ezsocial_create_webhook
- ezsocial_list_webhooks
- ezsocial_delete_webhook
- ezsocial_list_webhook_deliveries
- ezsocial_ping_webhook
- ezsocial_redeliver_webhook
REST endpoints 32
Paths are relative to the base URL. Each row shows its required scope.
Workspaces and accounts (4)
- GET
/workspacesaccounts:readThe brands on the account. Everything else is scoped to one.
- GET
/platformsaccounts:readWhich platforms a workspace can publish to.
- GET
/accountsaccounts:readThe social accounts connected to a workspace.
- GET
/brand-contextaccounts:readBrand voice, audience and DNA. Read it before writing copy.
Posts and planning (15)
- GET
/contentcontent:readList content by state, platform or scheduled window.
- POST
/contentcontent:writeCreate a draft. Prefer POST /posts, which also schedules.
- POST
/postscontent:write + publishCreate and schedule across platforms in one call.
- POST
/content/validatecontent:readCheck a post against each platform's rules. Writes nothing.
- POST
/content/approvepublishApprove items waiting in the review queue.
- POST
/planscontent:writePlan a stretch of posts, one a day, written from the brand. Answers 202: the rows exist, their text does not yet.
- GET
/content/:contentIdcontent:readOne item in full, including per-platform variants.
- PATCH
/content/:contentIdcontent:writeEdit text, media, tags or the scheduled time.
- DELETE
/content/:contentIdcontent:writeDelete a post and every publication attached to it.
- POST
/content/:contentId/unschedulepublishTake a scheduled post off the calendar, back to draft.
- POST
/content/:contentId/schedulepublishSet a future date and time. Must be in the future.
- POST
/content/:contentId/publishpublishPublish immediately instead of queueing.
- GET
/content/:contentId/publicationscontent:readPer platform status, including why one failed.
- GET
/publicationscontent:readSweep every publication. The way to find what failed.
- POST
/generate-textcontent:writeWrite on-brand captions, one per platform.
Generation and media (7)
- POST
/generationsai:generateGenerate images or a video from one sentence. Answers 202: the job exists, the media does not yet.
- GET
/generations/:jobIdai:generatePoll one generation. Carries the media ids once it finishes, ready to attach to a post.
- POST
/mediamedia:writeImport media straight from a public URL.
- POST
/media/uploadsmedia:writeStart a local-file upload. Returns a presigned PUT URL.
- POST
/media/uploads/:uploadId/finalizemedia:writeClose the upload and get the media id back.
- GET
/mediamedia:writeThe media library, so you can reuse instead of re-upload.
- DELETE
/media/:mediaIdmedia:writeDelete one media item and detach it from any draft.
Webhooks (6)
- POST
/webhookswebhooks:manageSubscribe an endpoint to publish events.
- GET
/webhookswebhooks:manageList your subscriptions.
- DELETE
/webhooks/:webhookIdwebhooks:manageRemove a subscription.
- GET
/webhooks/:webhookId/deliverieswebhooks:manageEvery delivery attempt, with its response.
- POST
/webhooks/:webhookId/pingwebhooks:manageSend a test event to check the endpoint.
- POST
/webhooks/:webhookId/deliveries/:deliveryId/redeliverwebhooks:manageReplay one delivery that failed.
Permissions
Grant only the scopes your integration needs. Revoke access in the dashboard.
- accounts:read
- See your workspaces, brand profile, and connected social accounts
- content:read
- Read your content and its publishing status
- content:write
- Create and update content drafts on your behalf
- publish
- Schedule and publish posts to your connected accounts
- media:write
- Upload, list and delete media in your library
- webhooks:manage
- Create, list, and delete webhook subscriptions on your behalf
- ai:generate
- Generate images and video with AI, spending your AI credits
Webhooks
Get notified when a publication or media generation finishes.
- content.published
- A queued post went out. Carries the platform, the post id and the live URL.
- content.publish_failed
- A platform rejected it. Carries the reason the platform gave.
- generation.completed
- A generation finished. Carries the media ids, ready to attach to a post.
- generation.failed
- A generation produced nothing. Carries the reason, and the credits were returned.
Verify X-EzSocial-Signature with your webhook secret. Dedupe retries using X-EzSocial-Delivery-Id.