[{"data":1,"prerenderedAt":553},["ShallowReactive",2],{"api-docs-articles":3,"api-docs-nav-articles":72,"api-docs-article-errors":85,"api-docs-related-errors":549},[4,11,17,23,28,34,40,46,52,57,62,67],{"path":5,"title":6,"description":7,"category":8,"emoji":9,"order":10},"\u002Fdocs\u002Fapi\u002Fauthentication","Authentication","Authenticate Pallyy API requests with an API key, understand scopes for reading and writing, and restrict keys to specific social sets.","getting-started","🔑",1,{"path":12,"title":13,"description":14,"category":8,"emoji":15,"order":16},"\u002Fdocs\u002Fapi\u002Ferrors","Errors","How the Pallyy API reports errors: HTTP status codes, the machine-readable error code in the response body, and validation error details.","⚠️",3,{"path":18,"title":19,"description":20,"category":21,"emoji":22,"order":10},"\u002Fdocs\u002Fapi\u002Fmcp","MCP server","Connect Claude, ChatGPT, Cursor, or any MCP client to your Pallyy account: the server URL, what the tools can do, how consent works, and how to disconnect an app.","mcp","🤖",{"path":24,"title":25,"description":26,"category":21,"emoji":27,"order":16},"\u002Fdocs\u002Fapi\u002Fmcp-authorization","MCP authorization","How MCP clients sign in to Pallyy with OAuth 2.1: discovery documents, client identification, PKCE, scopes, token lifetimes, refresh rotation, and revocation.","🔐",{"path":29,"title":30,"description":31,"category":21,"emoji":32,"order":33},"\u002Fdocs\u002Fapi\u002Fmcp-tools","MCP tools","Reference for the 15 tools the Pallyy MCP server exposes to AI assistants: social sets, post sets, media, media uploads, and calendar notes, with every input.","🧰",2,{"path":35,"title":36,"description":37,"category":38,"emoji":39,"order":16},"\u002Fdocs\u002Fapi\u002Fmedia","Media library","Browse a social set's media library via the Pallyy API, filter by folder, type, or name, and reference items when creating posts.","endpoints","🖼️",{"path":41,"title":42,"description":43,"category":38,"emoji":44,"order":45},"\u002Fdocs\u002Fapi\u002Fmedia-uploads","Media uploads","Import images and videos into a Pallyy media library from a URL via the API, poll the upload's status, and use the result in posts.","⬆️",4,{"path":47,"title":48,"description":49,"category":38,"emoji":50,"order":51},"\u002Fdocs\u002Fapi\u002Fnotes","Notes","Read and create the notes pinned to a social set's calendar via the Pallyy API: reminders, recurring notes, and events imported from Google Calendar.","📝",5,{"path":53,"title":54,"description":55,"category":8,"emoji":56,"order":45},"\u002Fdocs\u002Fapi\u002Fpagination","Pagination and queries","How Pallyy API list endpoints paginate with page and size parameters, and how to pass nested filters and sorting in the query string.","📄",{"path":58,"title":59,"description":60,"category":38,"emoji":61,"order":33},"\u002Fdocs\u002Fapi\u002Fpost-sets","Post sets","Create, schedule, list, and update Pallyy post sets via the API: one scheduled slot holding a post for each social network it targets.","🗓️",{"path":63,"title":64,"description":65,"category":8,"emoji":66,"order":33},"\u002Fdocs\u002Fapi\u002Frate-limits","Rate limits","The Pallyy API allows 5 requests per second per account. Read the rate limit headers on every response and back off on 429s.","⏱️",{"path":68,"title":69,"description":70,"category":38,"emoji":71,"order":10},"\u002Fdocs\u002Fapi\u002Fsocial-sets","Social sets","List your Pallyy social sets and their connected accounts via the API. Almost every other endpoint needs a social set id.","👥",[73,74,75,76,77,78,79,80,81,82,83,84],{"path":5,"title":6,"category":8,"order":10},{"path":12,"title":13,"category":8,"order":16},{"path":18,"title":19,"category":21,"order":10},{"path":24,"title":25,"category":21,"order":16},{"path":29,"title":30,"category":21,"order":33},{"path":35,"title":36,"category":38,"order":16},{"path":41,"title":42,"category":38,"order":45},{"path":47,"title":48,"category":38,"order":51},{"path":53,"title":54,"category":8,"order":45},{"path":58,"title":59,"category":38,"order":33},{"path":63,"title":64,"category":8,"order":33},{"path":68,"title":69,"category":38,"order":10},{"id":86,"title":13,"body":87,"category":8,"datePublished":542,"dateUpdated":542,"description":14,"emoji":15,"extension":543,"meta":544,"navigation":545,"order":16,"path":12,"seo":546,"stem":547,"__hash__":548},"apiDocs\u002Fdocs\u002Fapi\u002Ferrors.md",{"type":88,"value":89,"toc":537},"minimark",[90,99,109,114,212,216,507,511,525,531],[91,92,93,94,98],"p",{},"The Pallyy API uses conventional HTTP status codes and returns a JSON body with a human-readable message. Most errors also carry a machine-readable code in ",[95,96,97],"code",{},"data.code",", plus extra fields describing the problem.",[100,101,107],"pre",{"className":102,"code":104,"language":105,"meta":106},[103],"language-json","{\n  \"statusCode\": 403,\n  \"statusMessage\": \"This API key is missing the required scope: post-sets:write.\",\n  \"data\": {\n    \"code\": \"api-key:missing_scope\"\n  }\n}\n","json","",[95,108,104],{"__ignoreMap":106},[110,111,113],"h2",{"id":112},"status-codes","Status codes",[115,116,117,130],"table",{},[118,119,120],"thead",{},[121,122,123,127],"tr",{},[124,125,126],"th",{},"Status",[124,128,129],{},"Meaning",[131,132,133,144,154,164,174,188,198],"tbody",{},[121,134,135,141],{},[136,137,138],"td",{},[95,139,140],{},"400",[136,142,143],{},"Invalid request: the body or query failed validation, or the input references something it cannot use",[121,145,146,151],{},[136,147,148],{},[95,149,150],{},"401",[136,152,153],{},"Missing, invalid, disabled, or revoked API key",[121,155,156,161],{},[136,157,158],{},[95,159,160],{},"403",[136,162,163],{},"The key is missing a required scope, or the account's plan does not allow the action",[121,165,166,171],{},[136,167,168],{},[95,169,170],{},"404",[136,172,173],{},"The resource does not exist, is not yours, or is outside the key's social set restriction",[121,175,176,181],{},[136,177,178],{},[95,179,180],{},"409",[136,182,183,184,187],{},"Conflict with an existing resource, ",[95,185,186],{},"data.conflictId"," points at it",[121,189,190,195],{},[136,191,192],{},[95,193,194],{},"412",[136,196,197],{},"A precondition has failed, for example a post set that is publishing or published that cannot be modified",[121,199,200,205],{},[136,201,202],{},[95,203,204],{},"429",[136,206,207,208],{},"Rate limit exceeded, see ",[209,210,211],"a",{"href":63},"rate limits",[110,213,215],{"id":214},"error-codes","Error codes",[115,217,218,229],{},[118,219,220],{},[121,221,222,225,227],{},[124,223,224],{},"Code",[124,226,126],{},[124,228,129],{},[131,230,231,243,255,267,286,301,317,339,351,363,375,387,399,414,426,438,450,462,478,493],{},[121,232,233,238,240],{},[136,234,235],{},[95,236,237],{},"api-key:invalid",[136,239,150],{},[136,241,242],{},"The key is invalid, disabled, or revoked",[121,244,245,250,252],{},[136,246,247],{},[95,248,249],{},"api-key:missing_scope",[136,251,160],{},[136,253,254],{},"The key is missing the scope the endpoint requires",[121,256,257,262,264],{},[136,258,259],{},[95,260,261],{},"not_found",[136,263,170],{},[136,265,266],{},"The resource was not found",[121,268,269,274,276],{},[136,270,271],{},[95,272,273],{},"rate_limit_exceeded",[136,275,204],{},[136,277,278,279,282,283],{},"Too many requests, includes ",[95,280,281],{},"count"," and ",[95,284,285],{},"max",[121,287,288,293,295],{},[136,289,290],{},[95,291,292],{},"conflict",[136,294,180],{},[136,296,297,298],{},"A duplicate exists, includes ",[95,299,300],{},"conflictId",[121,302,303,308,310],{},[136,304,305],{},[95,306,307],{},"post-set:invalid_posts",[136,309,140],{},[136,311,312,313,316],{},"One or more posts failed validation, includes an ",[95,314,315],{},"errors"," array",[121,318,319,324,326],{},[136,320,321],{},[95,322,323],{},"post-set:monthly_posts_exceeded",[136,325,160],{},[136,327,328,329,332,333,336,337],{},"The plan's monthly post limit would be exceeded, includes ",[95,330,331],{},"used",", ",[95,334,335],{},"planned",", and ",[95,338,285],{},[121,340,341,346,348],{},[136,342,343],{},[95,344,345],{},"post-set:carousels_not_available",[136,347,160],{},[136,349,350],{},"The plan does not allow carousel posts",[121,352,353,358,360],{},[136,354,355],{},[95,356,357],{},"post-set:videos_not_available",[136,359,160],{},[136,361,362],{},"The plan does not allow video posts",[121,364,365,370,372],{},[136,366,367],{},[95,368,369],{},"post-set:repeats_not_available",[136,371,160],{},[136,373,374],{},"The plan does not allow repeating posts",[121,376,377,382,384],{},[136,378,379],{},[95,380,381],{},"post-set:media_not_found",[136,383,140],{},[136,385,386],{},"A referenced media item was not found, includes the id",[121,388,389,394,396],{},[136,390,391],{},[95,392,393],{},"post-set:media_social_set_mismatch",[136,395,140],{},[136,397,398],{},"A referenced media item belongs to a different social set",[121,400,401,406,408],{},[136,402,403],{},[95,404,405],{},"post-set:duplicate_references",[136,407,140],{},[136,409,410,411],{},"The same post or media id is referenced more than once, includes ",[95,412,413],{},"ids",[121,415,416,421,423],{},[136,417,418],{},[95,419,420],{},"post-set:post_not_found",[136,422,140],{},[136,424,425],{},"An update references a post id that is not part of the set",[121,427,428,433,435],{},[136,429,430],{},[95,431,432],{},"post-set:post_account_type_mismatch",[136,434,140],{},[136,436,437],{},"An update tries to change a post's account type",[121,439,440,445,447],{},[136,441,442],{},[95,443,444],{},"post-set:repeat_not_updatable",[136,446,140],{},[136,448,449],{},"The repeat rule of a set that already belongs to a series cannot change",[121,451,452,457,459],{},[136,453,454],{},[95,455,456],{},"post-set:read_only",[136,458,194],{},[136,460,461],{},"The post set is publishing or published and can no longer be edited",[121,463,464,469,471],{},[136,465,466],{},[95,467,468],{},"media-upload:pending_exceeded",[136,470,140],{},[136,472,473,474,282,476],{},"Too many pending media uploads for the social set, includes ",[95,475,281],{},[95,477,285],{},[121,479,480,485,487],{},[136,481,482],{},[95,483,484],{},"media-upload:unavailable_upload_bytes",[136,486,140],{},[136,488,489,490],{},"The file exceeds the plan's remaining monthly upload allowance, includes ",[95,491,492],{},"avail",[121,494,495,500,502],{},[136,496,497],{},[95,498,499],{},"media-upload:unavailable_storage",[136,501,140],{},[136,503,504,505],{},"The file exceeds the plan's remaining storage, includes ",[95,506,492],{},[110,508,510],{"id":509},"validation-errors","Validation errors",[91,512,513,514,516,517,520,521,524],{},"Requests whose body or query does not match the endpoint's schema return a ",[95,515,140],{}," where ",[95,518,519],{},"statusMessage"," describes the first violation and ",[95,522,523],{},"data"," is an array of every violation found.",[91,526,527,528,530],{},"Post content that is structurally valid but cannot be scheduled, for example a caption over the network's limit or an Instagram post with no media, returns ",[95,529,307],{}," with one entry per problem:",[100,532,535],{"className":533,"code":534,"language":105,"meta":106},[103],"{\n  \"statusCode\": 400,\n  \"statusMessage\": \"Post-set cannot be scheduled since posts are invalid\",\n  \"data\": {\n    \"code\": \"post-set:invalid_posts\",\n    \"errors\": [\n      { \"index\": 0, \"accountType\": \"INSTAGRAM\", \"message\": \"Instagram posts require at least one media item\" }\n    ]\n  }\n}\n",[95,536,534],{"__ignoreMap":106},{"title":106,"searchDepth":33,"depth":16,"links":538},[539,540,541],{"id":112,"depth":33,"text":113},{"id":214,"depth":33,"text":215},{"id":509,"depth":33,"text":510},"2026-08-20","md",{},true,{"title":13,"description":14},"docs\u002Fapi\u002Ferrors","su-Zc1E4u-R6OXz47YJ3pvDHNHzmpTQ3ysvEueivRwo",[550,551,552],{"path":5,"title":6,"emoji":9,"order":10},{"path":63,"title":64,"emoji":66,"order":33},{"path":53,"title":54,"emoji":56,"order":45},1789018810255]