[{"data":1,"prerenderedAt":500},["ShallowReactive",2],{"api-docs-articles":3,"api-docs-nav-articles":72,"api-docs-article-media-uploads":85,"api-docs-related-media-uploads":495},[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":42,"body":87,"category":38,"datePublished":488,"dateUpdated":488,"description":43,"emoji":44,"extension":489,"meta":490,"navigation":491,"order":45,"path":41,"seo":492,"stem":493,"__hash__":494},"apiDocs\u002Fdocs\u002Fapi\u002Fmedia-uploads.md",{"type":88,"value":89,"toc":483},"minimark",[90,108,111,178,183,193,206,255,263,266,312,315,319,325,334,342,453,457],[91,92,93,94,98,99,103,104,107],"p",{},"Media uploads import a file into a social set's ",[95,96,97],"a",{"href":35},"media library"," from a public URL. Processing happens in the background: you create an upload, poll it until it is ready, then use the resulting ",[100,101,102],"code",{},"mediaLibraryId"," in ",[95,105,106],{"href":58},"post sets",".",[91,109,110],{},"An upload moves through these statuses:",[112,113,114,127],"table",{},[115,116,117],"thead",{},[118,119,120,124],"tr",{},[121,122,123],"th",{},"Status",[121,125,126],{},"Meaning",[128,129,130,141,151,164],"tbody",{},[118,131,132,138],{},[133,134,135],"td",{},[100,136,137],{},"CREATED",[133,139,140],{},"Accepted, waiting to be processed",[118,142,143,148],{},[133,144,145],{},[100,146,147],{},"PROCESSING",[133,149,150],{},"Downloading and processing the file",[118,152,153,158],{},[133,154,155],{},[100,156,157],{},"READY",[133,159,160,161,163],{},"Done, ",[100,162,102],{}," points at the new library item",[118,165,166,171],{},[133,167,168],{},[100,169,170],{},"FAILED",[133,172,173,174,177],{},"Something went wrong, ",[100,175,176],{},"failureReason"," says what",[179,180,182],"h2",{"id":181},"create-a-media-upload","Create a media upload",[184,185,190],"pre",{"className":186,"code":188,"language":189},[187],"language-text","POST \u002Fv1\u002Fmedia-upload\n","text",[100,191,188],{"__ignoreMap":192},"",[91,194,195,196,199,200,203,204,107],{},"Requires the ",[100,197,198],{},"media:write"," scope. Returns the upload with a ",[100,201,202],{},"201"," and status ",[100,205,137],{},[112,207,208,220],{},[115,209,210],{},[118,211,212,215,218],{},[121,213,214],{},"Field",[121,216,217],{},"Required",[121,219,126],{},[128,221,222,235],{},[118,223,224,229,232],{},[133,225,226],{},[100,227,228],{},"socialSetId",[133,230,231],{},"Yes",[133,233,234],{},"The social set whose library receives the file",[118,236,237,242,244],{},[133,238,239],{},[100,240,241],{},"sourceUrl",[133,243,231],{},[133,245,246,247,250,251,254],{},"A publicly reachable ",[100,248,249],{},"http"," or ",[100,252,253],{},"https"," URL, up to 2048 characters",[184,256,261],{"className":257,"code":259,"language":260,"meta":192},[258],"language-bash","curl https:\u002F\u002Fapp.pallyy.com\u002Fapi\u002Fv1\u002Fmedia-upload \\\n  -X POST \\\n  -H \"Authorization: Bearer pallyy_your_api_key\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"socialSetId\": \"665f1c2ab7e2a4d1f0a1b2c3\",\n    \"sourceUrl\": \"https:\u002F\u002Fexample.com\u002Flatte.jpg\"\n  }'\n","bash",[100,262,259],{"__ignoreMap":192},[91,264,265],{},"A few limits apply at creation time:",[267,268,269,286,303],"ul",{},[270,271,272,273,277,278,281,282,285],"li",{},"At most ",[274,275,276],"strong",{},"5 pending uploads"," per social set. More return a ",[100,279,280],{},"400"," with ",[100,283,284],{},"media-upload:pending_exceeded",", wait for them to finish first.",[270,287,288,289,291,292,294,295,298,299,302],{},"A pending upload with the same ",[100,290,228],{}," and ",[100,293,241],{}," already existing returns a ",[100,296,297],{},"409"," whose ",[100,300,301],{},"data.conflictId"," is the existing upload's id.",[270,304,305,306,250,309,107],{},"The file must fit within your plan's remaining monthly upload allowance and storage, otherwise the request fails with ",[100,307,308],{},"media-upload:unavailable_upload_bytes",[100,310,311],{},"media-upload:unavailable_storage",[91,313,314],{},"Processed bytes count against your plan's monthly upload allowance even when an import fails.",[179,316,318],{"id":317},"get-a-media-upload","Get a media upload",[184,320,323],{"className":321,"code":322,"language":189},[187],"GET \u002Fv1\u002Fmedia-upload\u002F{id}\n",[100,324,322],{"__ignoreMap":192},[91,326,327,328,330,331,107],{},"Poll this endpoint until the upload leaves ",[100,329,147],{},". Uploads usually finish within seconds, so polling every few seconds is plenty, and stays well within the ",[95,332,333],{"href":63},"rate limits",[184,335,340],{"className":336,"code":338,"language":339,"meta":192},[337],"language-json","{\n  \"id\": \"665f1c2ab7e2a4d1f0a1b2c6\",\n  \"socialSetId\": \"665f1c2ab7e2a4d1f0a1b2c3\",\n  \"sourceUrl\": \"https:\u002F\u002Fexample.com\u002Flatte.jpg\",\n  \"status\": \"READY\",\n  \"mediaLibraryId\": \"665f1c2ab7e2a4d1f0a1b2c5\",\n  \"createdAt\": \"2026-08-20T10:00:00.000Z\",\n  \"updatedAt\": \"2026-08-20T10:00:04.000Z\"\n}\n","json",[100,341,338],{"__ignoreMap":192},[112,343,344,355],{},[115,345,346],{},[118,347,348,350,353],{},[121,349,214],{},[121,351,352],{},"Type",[121,354,126],{},[128,356,357,370,380,391,412,425,438],{},[118,358,359,364,367],{},[133,360,361],{},[100,362,363],{},"id",[133,365,366],{},"string",[133,368,369],{},"The upload id",[118,371,372,376,378],{},[133,373,374],{},[100,375,228],{},[133,377,366],{},[133,379,234],{},[118,381,382,386,388],{},[133,383,384],{},[100,385,241],{},[133,387,366],{},[133,389,390],{},"The URL being imported",[118,392,393,398,400],{},[133,394,395],{},[100,396,397],{},"status",[133,399,366],{},[133,401,402,404,405,404,407,409,410],{},[100,403,137],{},", ",[100,406,147],{},[100,408,157],{},", or ",[100,411,170],{},[118,413,414,418,420],{},[133,415,416],{},[100,417,102],{},[133,419,366],{},[133,421,422,423],{},"The created library item, present once ",[100,424,157],{},[118,426,427,431,433],{},[133,428,429],{},[100,430,176],{},[133,432,366],{},[133,434,435,436],{},"Why the import failed, present when ",[100,437,170],{},[118,439,440,448,450],{},[133,441,442,404,445],{},[100,443,444],{},"createdAt",[100,446,447],{},"updatedAt",[133,449,366],{},[133,451,452],{},"ISO 8601 timestamps",[179,454,456],{"id":455},"typical-flow","Typical flow",[458,459,460,466,478],"ol",{},[270,461,462,465],{},[100,463,464],{},"POST \u002Fv1\u002Fmedia-upload"," with the file's URL.",[270,467,468,469,472,473,475,476,107],{},"Poll ",[100,470,471],{},"GET \u002Fv1\u002Fmedia-upload\u002F{id}"," until ",[100,474,397],{}," is ",[100,477,157],{},[270,479,480,481,107],{},"Create a post set whose media references the returned ",[100,482,102],{},{"title":192,"searchDepth":33,"depth":16,"links":484},[485,486,487],{"id":181,"depth":33,"text":182},{"id":317,"depth":33,"text":318},{"id":455,"depth":33,"text":456},"2026-08-20","md",{},true,{"title":42,"description":43},"docs\u002Fapi\u002Fmedia-uploads","945hrl8pWx3b6TsaF6BtO5h1lt46QrvUfy9pkNmIFkQ",[496,497,498,499],{"path":68,"title":69,"emoji":71,"order":10},{"path":58,"title":59,"emoji":61,"order":33},{"path":35,"title":36,"emoji":39,"order":16},{"path":47,"title":48,"emoji":50,"order":51},1788947604883]