Voor AI-agents

Verbind je agent in één stap. Hij runt je socialmediakanalen.

Markaestro is gebouwd om door software bediend te worden. Een MCP-client zoals Claude Code meldt zich aan via de browser en krijgt een sleutel die aan één merk is gebonden; elke andere agent haalt dezelfde sleutel uit de Instellingen. In beide gevallen kan de agent ontdekken op welke accounts hij mag posten, media uploaden, berichten schrijven en plannen, ze publiceren en terugkoppelen wat er echt is verstuurd, op Facebook, Instagram, TikTok, LinkedIn, Threads en Pinterest.

Geen SDK om te installeren en geen platformgegevens om te bewaken. Je team koppelt de accounts één keer in het dashboard; daarna praat de agent met één bearer-token-API.

Ontworpen voor autonomie, doelbewust begrensd

Waarom een API-sleutel de hele integratie is

Het moeilijke aan het laten aanraken van social media door een agent is niet de HTTP. Het is ervoor zorgen dat een verward model niet naar het verkeerde merk kan posten, niet dubbel post bij een retry, of iets verzendt dat niemand heeft gelezen. Die garanties zitten in de API-interface zelf, niet in je prompt.

Eén sleutel, één merk
Elke API-sleutel wordt bij het aanmaken aan één merk gebonden. Een agent met die sleutel kan alleen dat merk zien en er alleen naartoe posten, verzoeken tussen merken worden geweigerd bij authenticatie, niet door afspraak.
Ontdekking, geen vaste id's
De agent vraagt naar welke accounts hij kan posten en krijgt ondoorzichtige id's terug om direct door te geven. Geen paginanummers, geen gegraaf in Business Manager, geen configuratiebestand dat verouderd raakt zodra een verbinding opnieuw wordt gekoppeld.
Idempotente writes
Stuur een Idempotency-Key mee bij elke aanmaak of publicatie. Een herhaalde aanroep binnen 24 uur speelt het originele antwoord opnieuw af in plaats van een tweede post te maken, de faalmodus waar agents het vaakst tegenaan lopen.
Er blijft altijd een mens in de loop
Posts op Facebook, Instagram en TikTok zijn manual-first: jouw agent bereidt ze voor, een mens plaatst ze native. Er gaat niets onbeheerd naar buiten tenzij je die post expliciet aanmeldt.

MCP-clients

Meld je aan vanuit de client. Niets om te plakken.

Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes en elke andere client die het Model Context Protocol spreekt, kan zonder geconfigureerde gegevens verbinding maken met de gehoste MCP-server van Markaestro. De eerste toolaanroep opent je browser: meld je aan, kies de werkruimte en het merk waarvoor de agent mag handelen, controleer de rechten en klik op Toestaan. De client ontvangt een sleutel die aan dat merk is gebonden en vernieuwt die zelf.

Dit is standaard OAuth 2.1 met PKCE en dynamische clientregistratie, hetzelfde mechanisme als achter andere gehoste MCP-servers, dus het werkt zonder een Markaestro-specifieke plugin. De server staat op https://markaestro.com/api/public/v1/mcp en biedt eenendertig tools bovenop de publieke API: merk- en bestemmingsdetectie, media-upload, concepten en geplande berichten, publiceren met run-polling, bulkbewerkingen, webhooks en de regels per kanaal.

Verbind je agent

Kies je agent. Drie stappen, daarna kan hij posten.

Elke client hieronder bereikt dezelfde gehoste MCP-server. De meeste melden zich aan via de browser: de eerste tool-aanroep opent een toestemmingspagina waar je de werkruimte en het merk kiest waarvoor de agent mag handelen, en de client krijgt een sleutel die aan dat merk is gebonden. Clients die geen browser kunnen openen gebruiken een API-sleutel van de werkruimte. Dezelfde server, dezelfde rechten, dezelfde lijst in Instellingen.

Claude Code

De plugin installeert de skill en de gehoste server samen. Niets te configureren, niets te plakken.

Aanmelden of API-sleutelClaude Code-documentatie
01

Voordat je begint

  • Je bent eigenaar of beheerder van de werkruimte met een geverifieerd e-mailadres, in een werkruimte met een actief abonnement en minstens één merk.
  • Claude Code is geïnstalleerd en aangemeld bij je Anthropic-account.
03

Aanmelden

  1. Vraag Claude iets over Markaestro, of voer /mcp uit en kies markaestro.
  2. Je browser opent de toestemmingspagina. Kies werkruimte en merk, controleer de rechten en klik op Toestaan.
  3. Om later van merk te wisselen voer je /mcp opnieuw uit, meld je je af en meld je je aan met het andere merk.
Kies bij voorkeur voor aanmelden. Gebruik alleen een sleutel als de client geen browser kan openen.
04

Controleren

  • Vraag de agent om list_products aan te roepen. Het antwoord moet het ene toegestane merk en zijn gekoppelde kanalen bevatten.
  • De verbinding staat in Instellingen, API met de badge Verbonden agent, het laatste gebruik en het aantal verzoeken. Daar kun je haar altijd intrekken.
Instellingen, API openen
02

Server toevoegen

  1. Voer de twee plugin-opdrachten uit in een terminal, of voeg alleen de server toe met de derde opdracht.
Bash
# The plugin bundles the skill and the hosted server.
claude plugin marketplace add D3vBaba/Markaestro
claude plugin install markaestro@markaestro

# Or add just the server. No key, no header: the first call opens the browser.
claude mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcp

Wat er gebeurt als de client verbinding maakt

Vijf stappen, allemaal afgehandeld door de client en de browser. Jij ziet alleen de toestemmingspagina.

01Uitdaging
POST /api/public/v1/mcp → 401 + WWW-Authenticate

De client roept het MCP-endpoint aan zonder gegevens. Markaestro antwoordt met 401 en een WWW-Authenticate-header die het metadatadocument van de beschermde resource noemt. Die header vertelt de client dat er een aanmelding beschikbaar is.

02Ontdekking
GET /.well-known/oauth-protected-resource · /.well-known/oauth-authorization-server

De client leest twee publieke documenten: welke autorisatieserver het endpoint beschermt en waar diens registratie-, autorisatie- en token-endpoints staan. Beide worden op markaestro.com geserveerd en zijn cachebaar.

03Registratie
POST /api/public/v1/oauth/register

De client registreert zich met een naam en zijn callback-adres. Loopback-adressen, https-callbacks en native app-schema's worden geaccepteerd; kaal http naar een echte host wordt geweigerd. Er is geen vooraf gedeeld client-id nodig.

04Toestemming
GET /oauth/authorize (browser)

Je browser opent de toestemmingspagina. Een eigenaar of beheerder van de werkruimte met geverifieerd e-mailadres kiest werkruimte en merk, past de rechten aan en klikt op Toestaan. Markaestro stuurt de browser terug naar de client met een eenmalige code.

05Toegangstoken
POST /api/public/v1/oauth/token

De client wisselt de code plus zijn PKCE-verifier in voor een access token en een refresh token. Het access token is een gewone API-sleutel van de werkruimte, gebonden aan het gekozen merk. Het verloopt na 30 dagen; een refresh roteert het geheim en verlengt het met nog eens 30.

Het token is een echte API-sleutel

Scopes, merkbinding, rate limits, abonnementscontroles, idempotentie en intrekking volgen hetzelfde codepad als een handmatig gemaakte sleutel. Er is geen tweede rechtenmodel om te doorgronden.

Zichtbaar en intrekbaar in Instellingen

Een verbonden agent verschijnt in Instellingen, API met de badge Verbonden agent, het laatste gebruik en het aantal verzoeken. Trek hem daar in en de volgende aanroep van de client mislukt; de client kan zijn eigen token ook intrekken wanneer je hem loskoppelt.

Eén verbinding, één merk

Elke verbinding is gebonden aan precies één merk, gekozen bij de toestemming. Wil je een agent aan een tweede merk laten werken, verbind hem dan opnieuw en kies dat merk. Een client kan nooit bij een merk dat hem niet is toegekend.

Codes en refresh tokens zijn eenmalig

Autorisatiecodes leven tien minuten en worden atomair verbruikt, dus een herhaalde code mislukt. Refresh tokens roteren bij elk gebruik en worden gehasht opgeslagen. Inactieve clientregistraties verlopen na 180 dagen.

Eindpunten

Voor wie een MCP-client bouwt of de flow controleert. Alles is vindbaar via de twee well-known-documenten; niets hiervan hoeft met de hand te worden geconfigureerd.

Referentie
# Discovery (public, cacheable)
GET  /.well-known/oauth-protected-resource            RFC 9728
GET  /.well-known/oauth-authorization-server          RFC 8414

# Authorization server
POST /api/public/v1/oauth/register                    RFC 7591, public clients (PKCE) or client_secret
GET  /oauth/authorize?response_type=code&client_id=…&redirect_uri=…
                     &code_challenge=…&code_challenge_method=S256&state=…
POST /api/public/v1/oauth/token                       grant_type=authorization_code | refresh_token
POST /api/public/v1/oauth/revoke                      RFC 7009

# Token response
{ "access_token": "mk_live_<ws>.<client>.<secret>", "token_type": "Bearer",
  "expires_in": 2592000, "refresh_token": "…", "scope": "products.read posts.write …" }

De agent-loop

Vijf aanroepen, van begin tot eind

Elke Markaestro-automatisering is een variant op deze loop. Stappen één tot en met drie zijn de Connect API, de platte interface waar de meeste agents op moeten mikken. Stappen vier en vijf raken de volledige /api/public/v1-API voor expliciete publicatie en run-tracking.

01Ontdekken
GET /api/connect/v1/social-accounts

Retourneert elk verbonden, publiceerbaar account voor het merk van de sleutel, elk met een platform, gebruikersnaam en een ondoorzichtige id. Roep dit aan bij het begin van een run, verbindingen veranderen.

02Media uploaden
POST /api/connect/v1/media/create-upload-url → PUT

Genereer een kortstondige, eenmalig bruikbare ondertekende URL, en doe vervolgens een PUT van de ruwe bytes ernaartoe. Je krijgt een media-id terug. Afbeeldingen tot 10 MB; de volledige API accepteert ook video tot 250 MB.

03Concept of inplannen
POST /api/connect/v1/posts

Geef het onderschrift, de media-id's en de account-id's letterlijk door. Laat het als concept staan voor beoordeling, of stuur is_draft false met scheduled_at om het op de kalender te zetten.

04Publiceren
POST /api/public/v1/posts/:id/publish

Plaatst een asynchrone run in de wachtrij. LinkedIn, Threads en Pinterest gaan via de officiële API naar buiten. Facebook, Instagram en TikTok komen in de 'Te Plaatsen'-wachtrij van de workspace terecht zodat een mens native kan plaatsen.

05Terugrapporteren
GET /api/public/v1/job-runs/:id · webhooks

Peil de run-id, of registreer een webhook-endpoint en laat Markaestro post.published, post.action_required en post.failed naar je pushen. Neem nooit aan dat een publicatie synchroon is voltooid.

Snelstart

Een werkende integratie in vier commando's

Genereer eerst de sleutel: open Instellingen → API, kies het merk waartoe deze toegang mag hebben, vink de benodigde scopes aan, en geef optioneel een vervaldatum op. De sleutel wordt eenmalig getoond, plaats deze direct in de geheimenopslag van je agent. Het aanmaken van sleutels vereist een beheerder of eigenaar met een geverifieerd e-mailadres.

1. Ontdek de accounts
De eerste aanroep in elke run. Verbindingen veranderen; id's mogen nooit in een prompt worden ingebakken.
Bash
# The API is served from the marketing apex and the app subdomain alike.
export MARKAESTRO_URL="https://markaestro.com"
export MARKAESTRO_API_KEY="mk_live_<workspaceId>.<clientId>.<secret>"

# 1. What can this key post to?
curl -s "$MARKAESTRO_URL/api/connect/v1/social-accounts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"
Antwoord
{
  "data": [
    {
      "id": "prod_123#instagram:instagram:ig_123",
      "product_id": "prod_123",
      "product": "Northwind Coffee",
      "platform": "instagram",
      "username": "northwindcoffee"
    }
  ]
}
2. Upload de media
Twee stappen: genereer een ondertekende, eenmalig bruikbare URL, en doe vervolgens een PUT van de bytes. De URL verloopt na 15 minuten en heeft geen eigen authenticatieheader nodig.
Bash
# 2. Mint a signed upload url, then PUT the bytes.
RESP=$(curl -s -X POST "$MARKAESTRO_URL/api/connect/v1/media/create-upload-url" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "mime_type": "image/png", "size_bytes": 184320, "name": "cold-brew.png" }')
# → { "media_id": "ast_777", "upload_url": "https://.../media/upload?token=..." }

curl -X PUT "<upload_url>" \
  -H "Content-Type: image/png" \
  --data-binary @cold-brew.png
3. Plan het in, en houd het in de gaten
Aanmaken is standaard concept-first. Stuur in plaats daarvan is_draft: false met een scheduled_at-tijdstempel om de post op de kalender te zetten.
Bash
# 3. Put it on the calendar. Pass the account id back verbatim.
curl -X POST "$MARKAESTRO_URL/api/connect/v1/posts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "caption": "Cold brew season starts Friday.",
    "media": ["ast_777"],
    "social_accounts": ["prod_123#instagram:instagram:ig_123"],
    "is_draft": false,
    "scheduled_at": "2026-08-14T15:00:00.000Z"
  }'

# 4. Check where everything stands.
curl -s "$MARKAESTRO_URL/api/connect/v1/posts?limit=20" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"

Direct bruikbaar

Tooldefinities en een agent-samenvatting

Twee dingen om te kopiëren. De eerste is een set toolschema's die de hele publicatieloop dekken, geschreven in JSON Schema, dus ze werken als Claude-tooldefinities, OpenAI-functies, of de invoervorm voor een MCP-server die je zelf host. De tweede is de operationele samenvatting die een model ervan weerhoudt er iets onverwachts mee te doen.

Toolschema's
Zes tools: accounts tonen, media uploaden, aanmaken, publiceren, tonen, verwijderen. Koppel elk aan het bijbehorende endpoint hierboven.
tools.json
[
  {
    "name": "markaestro_list_accounts",
    "description": "List the social accounts this Markaestro key can publish to. Call this first in every run. Never hardcode account ids. Returns id, platform, and username.",
    "input_schema": { "type": "object", "properties": {}, "required": [] }
  },
  {
    "name": "markaestro_upload_media",
    "description": "Upload one image or video to Markaestro and return a media asset id. Images: png, jpeg, webp, gif up to 10 MB. Video: mp4, mov, webm up to 250 MB.",
    "input_schema": {
      "type": "object",
      "properties": {
        "file_path": { "type": "string", "description": "Local path to the file to upload." },
        "mime_type": { "type": "string", "description": "MIME type of the file." }
      },
      "required": ["file_path", "mime_type"]
    }
  },
  {
    "name": "markaestro_create_post",
    "description": "Create a post for one channel. Facebook, Instagram, and TikTok are manual-first: a human posts them natively from the To Post queue. Omit delivery_mode unless the user explicitly asked for unattended publishing.",
    "input_schema": {
      "type": "object",
      "properties": {
        "channel": {
          "type": "string",
          "enum": ["facebook", "instagram", "tiktok", "linkedin", "threads", "pinterest", "x"]
        },
        "caption": { "type": "string", "description": "Caption text, max 4000 characters." },
        "media_asset_ids": {
          "type": "array",
          "items": { "type": "string" },
          "description": "Ids from markaestro_upload_media. Instagram and TikTok require at least one."
        },
        "destination_id": {
          "type": "string",
          "description": "From markaestro_list_accounts. Required only when the brand has more than one destination on that channel."
        },
        "delivery_mode": {
          "type": "string",
          "enum": ["manual_reminder", "direct_publish", "platform_inbox"],
          "description": "Omit for the channel default."
        }
      },
      "required": ["channel", "caption"]
    }
  },
  {
    "name": "markaestro_publish_post",
    "description": "Queue an async publish run for an existing post. Returns a run id. Poll it, do not assume the post is live.",
    "input_schema": {
      "type": "object",
      "properties": { "post_id": { "type": "string" } },
      "required": ["post_id"]
    }
  },
  {
    "name": "markaestro_list_posts",
    "description": "List posts for this brand, newest first. Filter by status: draft, scheduled, publishing, published, platform_action_required, failed, partial_failed.",
    "input_schema": {
      "type": "object",
      "properties": {
        "status": { "type": "string" },
        "limit": { "type": "integer", "minimum": 1, "maximum": 100 }
      },
      "required": []
    }
  },
  {
    "name": "markaestro_delete_post",
    "description": "Remove a post from Markaestro. Use it to cancel something scheduled. Deleting an already-published post does NOT retract the live copy on the platform.",
    "input_schema": {
      "type": "object",
      "properties": { "post_id": { "type": "string" } },
      "required": ["post_id"]
    }
  }
]
Agent-samenvatting
Plak dit in je system prompt. Het codeert het gedrag dat een betrouwbare publicatieagent onderscheidt van een agent die dubbel post en te vroeg de overwinning uitroept.
System prompt
You have a Markaestro API key for exactly one brand. Markaestro is the
publishing layer: you supply the caption and the media, it handles the
platform rules, the calendar, and delivery.

Base URL: https://markaestro.com
Auth: Authorization: Bearer $MARKAESTRO_API_KEY

Rules:
- Call GET /api/connect/v1/social-accounts before posting. Pass the returned
  account ids back verbatim. Never invent or cache an id across runs.
- Upload media before creating a post; posts reference media ids, not files.
- Facebook, Instagram, and TikTok are manual-first. Creating and publishing
  them queues a reminder for a human. That is the intended behavior. Only
  send deliveryMode "direct_publish" if the operator explicitly asked for it.
- Send a unique Idempotency-Key on every POST. Reuse the SAME key when
  retrying the SAME request; never reuse it for a different one.
- On 429, wait the number of seconds in Retry-After, then retry. On 4xx other
  than 429, do not retry. Report the error code and requestId and stop.
- Publishing is async. POST /publish returns a run id; poll
  GET /api/public/v1/job-runs/<id> until succeeded or failed.
- To cancel, list with ?status=scheduled and DELETE the post id. Deleting a
  published post does not remove it from the platform.
- Never claim a post is live until a run reports succeeded or a post reports
  published.

Je agent kan dit ook zelf ophalen: curl https://markaestro.com/llms.txt retourneert een platte-tekst-samenvatting van de hele API, endpoints, regels en foutafhandeling, klein genoeg om in de context te passen.

Recepten

De vier workflows die agents daadwerkelijk uitvoeren

Publiceer en bevestig
Maak een concept aan, publiceer het expliciet, peil vervolgens de run. De enige eerlijke manier om de operator te vertellen dat een post is uitgegaan.
Bash
# Full control: draft → publish → poll. No productId needed:
# the key is already bound to one brand.

POST_ID=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: post-2026-08-14-linkedin" \
  -d '{
    "channel": "linkedin",
    "caption": "We shipped agent-driven publishing.",
    "mediaAssetIds": ["ast_777"]
  }' | jq -r .post.id)

RUN_ID=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/posts/$POST_ID/publish" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Idempotency-Key: publish-$POST_ID" | jq -r .run.id)

# queued → running → succeeded | failed
curl -s "$MARKAESTRO_URL/api/public/v1/job-runs/$RUN_ID" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"
Controleer en annuleer de wachtrij
Toon wat is ingepland, laat het aan een mens zien, verwijder wat wordt afgewezen. Beide aanroepen gebruiken scopes die een bestaande sleutel al heeft.
Bash
# Review the queue, then cancel what the operator rejected.
curl -s "$MARKAESTRO_URL/api/public/v1/posts?status=scheduled&limit=100" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"

curl -X DELETE "$MARKAESTRO_URL/api/public/v1/posts/pst_123" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"
# → { "deleted": true, "id": "pst_123" }
Vul een hele week in één aanroep
Batchaanmaak accepteert tot 25 posts en retourneert resultaten per item, zodat één misvormd item de run niet laat mislukken.
Bash
# One call, up to 25 posts. Per-item results: one bad item
# does not fail the batch.
curl -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: week-33-drop" \
  -d '{
    "posts": [
      { "channel": "instagram", "caption": "Monday",  "mediaAssetIds": ["ast_1"] },
      { "channel": "facebook",  "caption": "Tuesday", "mediaAssetIds": ["ast_2"] },
      { "channel": "linkedin",  "caption": "Thursday" }
    ]
  }'
# → { "results": [...], "created": 3, "total": 3 }
Laat je bellen in plaats van te pollen
Langlopende agents zouden een webhook moeten registreren en slapen. Leveringen worden HMAC-ondertekend met een geheim dat eenmalig wordt getoond bij aanmaak.
Bash
# Let Markaestro call you instead of polling.
curl -X POST "$MARKAESTRO_URL/api/public/v1/webhook-endpoints" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-agent.example.com/hooks/markaestro",
    "events": ["post.published", "post.action_required", "post.failed"]
  }'

# Each delivery carries:
#   X-Markaestro-Event      post.action_required
#   X-Markaestro-Timestamp  2026-08-14T15:00:04.000Z
#   X-Markaestro-Signature  HMAC of the body with your webhook secret
# The secret is shown once at creation and stored hashed. Verify before acting.

Waarborgen

Wat de agent wel en niet kan doen

Autonomie is alleen nuttig als de impactzone klein is. De standaardinstellingen van Markaestro gaan ervan uit dat de aanroeper software is die het mis kan hebben.

Facebook, Instagram en TikTok zijn manual-first

Posts die je agent voor deze kanalen aanmaakt, gebruiken standaard manual_reminder: Markaestro roept nooit de API van het platform voor hen aan. Publicatie verplaatst de post naar de 'Te Plaatsen'-wachtrij van de workspace, waar een mens de media downloadt, native plaatst en bevestigt, zodat de post er precies uitziet alsof deze met de hand is gemaakt, en een mens elke post ziet voordat deze publiekelijk bestaat. Een agent kan één post laten kiezen voor publicatie via de officiële API met deliveryMode: "direct_publish", en op TikTok betekent dit de overdracht naar de inbox van de maker, nooit een onbeheerde openbare post. LinkedIn, Threads en Pinterest publiceren programmatisch zodra je agent hier expliciet om vraagt.

Beperk de scope van de sleutel

Kies alleen de scopes die de agent nodig heeft: products.read, media.write, posts.read, posts.write, posts.publish, job_runs.read, webhooks.manage. Een onderzoeksagent die alleen de kalender leest, krijgt posts.read en niets anders.

Geef een vervaldatum op

Sleutels kunnen worden aangemaakt met een vervaldatum. Een verlopen sleutel gedraagt zich precies als een ingetrokken sleutel, zodat een sleutel die uit de omgeving van een agent lekt, vanzelf ophoudt te werken.

Roteer en trek in

Roteer een sleutel ter plaatse of trek deze volledig in vanuit Instellingen → API. Elke sleutel toont het laatste gebruiksmoment en verzoekvolume, zodat een agent die stil wordt, of ontspoort, zichtbaar is.

Snelheidslimieten worden afgedwongen

60 verzoeken per minuut per endpoint en 240 per minuut per sleutel. Elk antwoord bevat X-RateLimit-Limit, -Remaining en -Reset; een 429 bevat Retry-After. Respecteer dit in plaats van te blijven proberen.

Markaestro schrijft nooit voor jou

Er is geen generatiestap. Het onderschrift komt van je agent, de media komt uit je bibliotheek of de pijplijn van je agent. Markaestro is de handen, niet de stem.

Verwijderingen zijn aan de Markaestro-kant

Het verwijderen van een geplande post annuleert deze voordat hij wordt verzonden. Het verwijderen van een gepubliceerde post stopt alleen het volgen door Markaestro, de live post blijft staan totdat iemand hem op het platform verwijdert.

Foutafhandeling

Leer welke fouten het waard zijn om opnieuw te proberen

Elk foutantwoord is JSON met een stabiele error-code en een requestId. Laat je agent de requestId citeren wanneer hij een storing meldt, dat is wat ondersteuning nodig heeft om de aanroep te traceren.

StatusCodeWat de agent moet doen
401UNAUTHENTICATEDSleutel ontbreekt, is ingetrokken of verlopen. Stop en vraag een mens om een nieuwe, opnieuw proberen helpt niet.
403FORBIDDENDe sleutel mist de scope voor deze aanroep. Meld welke aanroep is mislukt; scopes worden gewijzigd in Instellingen → API.
403API_KEY_NOT_BOUND_TO_PRODUCTEen sleutel uitgegeven vóór merkbinding. Vraag om een vervangende sleutel.
400VALIDATION_*De payload schond een kanaalregel (media ontbreekt, verkeerde leveringsmodus, verkeerde scheduled_at). Corrigeer het verzoek; probeer het niet ongewijzigd opnieuw.
400VALIDATION_IDEMPOTENCY_KEY_REUSEDDezelfde Idempotency-Key is met een andere body verzonden. Genereer een nieuwe sleutel per afzonderlijk verzoek.
400VALIDATION_POST_IS_PUBLISHINGProbeerde een post te verwijderen terwijl een publicatierun bezig is. Wacht tot de run is afgerond en verwijder dan.
409VALIDATION_POST_ALREADY_PUBLISHINGEen publicatierun voor deze post staat al in de wachtrij. Publiceer niet opnieuw, peil in plaats daarvan de bestaande run.
402SUBSCRIPTION_REQUIREDEr is geen actief abonnement aan deze werkruimte gekoppeld. Vraag een eigenaar om de facturering in Instellingen te controleren.
402QUOTA_EXCEEDED_MEDIA_UPLOADSDe workspace heeft het maandelijkse uploadquotum bereikt. Stop met uploaden en breng dit onder de aandacht, bestaande media wordt nog steeds gepubliceerd.
404NOT_FOUNDDe id valt buiten het merk van deze sleutel. Beantwoord als 404 in plaats van 403, zodat sleutels geen id's kunnen aftasten die ze niet bezitten.
429RATE_LIMITEDWacht het aantal seconden dat Retry-After aangeeft, en probeer dan hetzelfde verzoek opnieuw met dezelfde Idempotency-Key.

Gebruik je eigen stack

Als het een HTTPS-verzoek kan doen, kan het publiceren

Er is geen Markaestro-clientbibliotheek om te adopteren en geen framework om op te standaardiseren. Bearer token, JSON erin, JSON eruit.

Claude en de Claude Agent SDK

Voeg de tooldefinities hierboven toe aan je toollijst. De JSON Schema-vormen zijn al in Claude's tool-use-formaat.

Function calling van OpenAI

Dezelfde schema's mappen één-op-één op functiedefinities, hernoem input_schema naar parameters.

MCP-clients

Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes: voeg de URL van de gehoste server toe en meld je aan via de browser. Voor clients die alleen stdio spreken, draait npx -y @markaestro/mcp dezelfde eenendertig tools lokaal.

n8n, Make, Zapier

Elk endpoint is een gewoon HTTP-verzoek met een bearer token. Geen SDK, geen ondertekeningsceremonie, geen OAuth-dans voor de agent.

LangChain en LlamaIndex

Standaard REST-tools. De tweestapsupload van media is de enige flow met meerdere aanroepen, en is twee regels.

Een cronjob en curl

Niet elke agent heeft een framework nodig. De snelstart hierboven is een complete, werkende integratie in vier commando's.

Geef je agent iets echts te doen

Koppel je kanalen en verbind daarna je agent: aanmelden vanuit een MCP-client, of een merkgebonden sleutel aanmaken. Elk van beide is de hele integratie.