Breaking: publish_to → restrict_publish_to
- Clearer name for platform targeting — the optional post field
publish_tois nowrestrict_publish_toon create, update, schedule, and publish, and in responses. The name makes the behavior obvious: omit it or set it to null to publish to ALL connected platforms; provide a list (e.g.["instagram", "facebook"]) to restrict to just those. - Action required — the old
publish_tokey is no longer accepted; sending it returns a422naming the unknown field. Rename it torestrict_publish_toin your requests, and readrestrict_publish_tofrom responses. (It briefly shipped as an accepted alias; that alias is now removed.)
Rate limits
- Daily and weekly limits added — alongside the existing 100 requests/minute, each API key now also has a 2,000 requests/day and 10,000 requests/week limit. These are generous for normal automation (a weekly batch of 10 posts uses ~20 requests). A
429response names the specific window you hit, and theX-RateLimit-*andRetry-Afterheaders tell you when to retry. See Errors for header details.
June 30, 2026
breakingendpoints
Business-scoped endpoints are now nested under /api/businesses/{business_id}
Breaking changes
- Business-scoped endpoints are now nested under the business — endpoints that operate on a single business now live under
/api/businesses/{business_id}/...(for examplePOST /api/businesses/{business_id}/posts,GET /api/businesses/{business_id}/topics,POST /api/businesses/{business_id}/media). Thebusiness_idmoves out of the JSON body and query string and into the URL path. Org-level endpoints (/api/businesses,/api/keys,/api/webhooks,/api/feedback,/api/health) are unchanged.
May 19, 2026
featurespublishingstatsintegrations
Publish-now, stats, and platform-post listing endpoints
New features
- Publish a post immediately —
POST /api/businesses/{business_id}/posts/{post_id}/publishfires the publish flow in the background and returns the post right away. PollGET /businesses/{business_id}/posts/{post_id}for the final status. Optionalpublish_tobody restricts the publish to a subset of connected platforms. - List integrations on a business —
GET /api/businesses/{business_id}/integrationsreturns the connected social accounts (platform, username, page, status). Use theidfield as theintegration_idin stats endpoints. - List posts on a connected platform —
GET /api/businesses/{business_id}/integrations/{integration_id}/postslists posts on the connected account (Marky-posted or otherwise) with stats. Supports cursor-based pagination. Covers all 7 platforms. - Per-post stats — all platforms —
GET /api/businesses/{business_id}/posts/{post_id}/statsreturns per-platform metrics for a post published through Marky, hydrated from your connected integrations. Covers Facebook, Instagram, LinkedIn, Twitter/X, TikTok, Pinterest, and YouTube. Stats are normalized into a consistent shape (likes,comment_count,reach,views,impressions, etc.) — no per-platform branching in your code. - Per-integration stats —
GET /api/businesses/{business_id}/integrations/{integration_id}/statsreturns account metrics for a single integration.GET /api/businesses/{business_id}/integrations/{integration_id}/posts/{external_post_id}/statsreturns metrics for a single post on a single platform — useful with thepublish_idvalues from/businesses/{business_id}/integrations/{integration_id}/posts.
Updates
- Giphy URLs in media uploads —
giphy.comis now an allowed host suffix when uploading media, so you can pass Giphy-hosted GIFs directly without re-uploading. - Better image upload handling — Images with malformed EXIF metadata no longer fail to upload, and image generation errors now return clearer messages.
- Retry on transient errors — CRUD endpoints now automatically retry transient database errors, improving reliability for posts, businesses, topics, and media.
- Restored analytics fields — Post-count and period columns are back on business analytics views, so business summaries return complete data.
Bug fixes
- Fixed search fallback when looking up uploaded images — orphaned uploads are now correctly resolved.
- Plan restrictions are kept in sync when Stripe sends subscription updates, preventing stale limits after plan changes.
- Narrowed the checkout fraud block to true fraud signals so legitimate customers are no longer incorrectly blocked.
- Stripe
InvalidRequestErrorresponses are now logged with full context before being surfaced as a400, making billing failures easier to debug.
Security
- Row-level security is now enforced on API keys and Canva connections, so credentials are only readable by the org that owns them.
New features
- Creative format selection — You can now specify a
creative_formatsarray when creating posts to control the visual format of each post. Options includedesign,carousel,meme,image,gif, andvideo. Formats are cycled round-robin across your generated posts. - AI image style modifiers — Marky now applies style modifiers and creative type mapping when generating AI images, producing visuals that better match the tone and format of each post.
- Reference images for video generation — Pass
reference_imageswhen generating videos to guide the visual style. Useful for maintaining brand consistency across video content. - Audio URL for shorts — You can now provide an
audio_urlwhen generating shorts, giving you direct control over the audio track instead of relying on auto-selected music.
Improvements
- Canva design owner filtering — Marky now identifies the owner of imported Canva designs and surfaces a clearer error when a design is shared as view-only, so you know exactly what to fix.
- Imagery preferences in media search — Your business-level imagery preferences are now consistently applied during media selection, so generated posts better reflect your visual brand.
- Webhook reliability — Background poster generation and webhook delivery have been restored for more reliable post-publish notifications.
- Analytics accuracy — Post analytics now correctly handle posts with zero views instead of treating them as missing data.
Bug fixes
- Fixed thumbnail generation for deleted or inaccessible videos — the system now handles these gracefully instead of failing silently.
- Improved video URL detection to support additional formats during thumbnail extraction.
- Fixed an issue where providing a
custom_ideawithout topics would not use the idea as the post topic. - Corrected the post restriction period reset schedule for subscription limits.
New features
- First comment on publish — When a post goes live on Facebook or LinkedIn, Marky can now automatically add the post link as the first comment. Useful for driving traffic without cluttering the caption.
- Video speedup transforms — Speed up video clips during post generation. Marky applies the transform automatically when a faster pace fits the design.
- Bring Your Own Key (BYOK) for Gemini — Connect your own Google Gemini API key to generate images and videos. BYOK orgs are not charged Marky credits for AI generation in Max chat.
- Carousel video support — Video generation now works with multi-page (carousel) templates, so you can create richer video posts.
- AppSumo credit allowance — AppSumo users now receive a monthly credit allowance.
Improvements
- Smarter text sizing — Post designs now auto-cap character counts based on the actual box dimensions and a minimum readable font size. Overflowing CTA text is shortened automatically.
- Layout-aware copy — The LLM receives
max_linesandchars_per_lineconstraints so generated text fits the design without overflow. - Smart image cropping — Google Vision
CROP_HINTSare used to frame subjects better across all generated images. - Better video music — Background music volume is reduced, and the music picker uses genre-based fallback instead of random selection when no audio tags are set.
- Imagery preferences — Your business-level imagery preferences now influence the image keywords Marky generates, giving you more relevant visuals.
- Onboarding improvements — New businesses generate 15 candidate posts during onboarding and surface the best 10 (previously 10 → 3).
Bug fixes
- Fixed a crash caused by non-numeric
letterSpacingvalues in post designs. - Fixed text vertical alignment in video rendering.
- Fixed an issue where video audio tracks were not persisted when saving designs.
- Corrected media type detection — uploaded videos are no longer incorrectly tagged as images.
- Fixed empty-string UUID handling in post placeholder creation.
- Resolved an error when extracting frames from inaccessible video URLs — the API now returns an actionable error message.
- Fixed video foreground animations using an unsupported
ZOOMeffect.
- Clarified rate limits in the Introduction and Errors guides (100 requests per minute).
- Added this changelog with an RSS feed for integrations and automation tools.
Public API (preview) — Automate posting and workspace management:
- Org-scoped API keys (create in Organization Settings in the dashboard).
- Posts, businesses, topics, library / media, webhooks, and feedback endpoints.
- Base URL:
https://api.mymarky.ai/api
