WLI: Scheduling endpoints — example on a custom backend proxy
Updated today
🔗Creating a new scheduled post by using the API
You can show the Planner via an iframe or creating an automation using the API only.
Endpoint overview
This guide walks through a real working example of creating a scheduled post in Metricool from your own web app, using the POST /v2/scheduler/posts endpoint.
It follows the same client → backend proxy → Metricool call flow described in the first reference below; this article applies that architecture to one concrete case: scheduling a post.
The example is split into three parts, mirroring a typical White Label Integration (WLI) setup:
A form in your frontend where the end user fills in the post details. Unlike the create new brand button, discussed before (here), this one cannot be a button as it has different parameters attached to the body call, as you will see next.
A backend proxy that holds your Metricool API credentials and forwards the request.
This example uses plain HTML/JavaScript and a Python http.server proxy (standard library only, no frameworks) so it can be adapted to any stack.
— Prerequisites —
You'll need three values from your Metricool account:
Value | Where to find it |
|---|---|
| Metricool → Menu → Account Settings → API section → "REST API Access token" |
| Your Metricool user identifier |
| The brand/profile identifier (visible in the browser URL when using that brand in Metricool) |
All three are mandatory on every API call. userId and blogId are sent as query parameters; userToken is sent in the X-Mc-Auth request header.
— Understand the endpoint —
POST https://app.metricool.com/api/v2/scheduler/posts?blogId={blogId}&userId={userId}Header | Value |
|---|---|
|
|
| your |
Minimum required body fields:
Field | Type | Description |
|---|---|---|
| string | ISO local date-time, no timezone offset in the string (e.g. |
| string | The post's text content |
| array | Target networks, e.g. |
Commonly used optional fields:
Field | Type | Description |
|---|---|---|
| boolean |
|
| boolean |
|
| string | Email of the user creating the post |
| array of strings | See note on media below |
| object | Network-specific options (e.g. |
| string | IANA timezone of the brand/user (e.g. |
Media warning
If the post includes an image or video, set as true the parameter saveExternalMediaFiles: true
you have in the Example body below.
Example body:
{
"publicationDate": {
"dateTime": "2026-08-01T10:00:00",
"timezone": "Europe/Madrid"
},
"text": "Yeah, team! This is a scheduled post test for White Label Integration.",
"providers": [
{ "network": "facebook" }
],
"autoPublish": true,
"draft": false,
"shortener": false,
"saveExternalMediaFiles": false,
"creatorUserMail": "[email protected]"
}— Troubleshooting —
Table C
Symptom | Cause | Fix |
|---|---|---|
| Missing access key | Add the access token ( |
| Arbitrary browser calling Metricool's API directly triggers a CORS preflight, which Metricool rejects | Route the call through your own backend proxy (see Step 2) |
|
| Make sure the date/time is in the future and that |
| Client code called | Read the response with |
Token visible in page source |
| Move all credentials to the backend proxy and read them from environment variables |