Het ontwikkelaarsplatform van X rekent de API nu per aanvraag af in plaats van via een abonnementsniveau. Het aanmaken van een post wordt per aanroep in rekening gebracht, en POST /2/tweets is beperkt tot 100 aanvragen per gebruiker per 15 minuten en 10.000 per app per 24 uur. Als je overweegt er rechtstreeks tegenaan te bouwen, bepalen deze twee feiten het grootste deel van je architectuur.
Wat kost de X API eigenlijk?
De officiële prijspagina beschrijft een creditmodel, geen benoemde abonnementen. Je koopt credits, stelt een uitgavenlimiet in, en elke aanroep wordt afgeschreven van het saldo.
| Actie | Vermelde prijs |
|---|---|
| Post aanmaken | $ 0,015 per aanvraag |
| Post met een URL | $ 0,200 per aanvraag |
| Post (opgeroepen) | $ 0,010 per aanvraag |
| DM en gebruikersinteracties | $ 0,015 per aanvraag |
| Interacties verwijderen | $ 0,010 per aanvraag |
| Lezen: posts | $ 0,005 per resource |
| Lezen: gebruikers, DM’s, gevolgd door/volgers | $ 0,010 per resource |
| Lezen: likes, mutes, blokkeringen | $ 0,001 per resource |
| Eigen leesacties (je eigen data) | $ 0,001 per resource |
Twee details wegen zwaarder dan de stukprijzen zelf. Een post met een URL kost meer dan 13 keer zoveel als een gewone post, wat een aanzienlijke kostenpost is als je voor je werk links publiceert. En pay-per-usage-abonnementen zijn beperkt tot 3 miljoen leesacties van posts per maandelijkse factureringscyclus, dus leesintensieve producten stuiten op een plafond dat geen hoeveelheid credits kan wegnemen.
Resources worden binnen een UTC-venster van 24 uur gededupliceerd, dus dezelfde resource twee keer op een dag opvragen wordt maar één keer in rekening gebracht.
Let op: deze cijfers zijn geverifieerd tegen docs.x.com/x-api/getting-started/pricing per september 2026. Platformen wijzigen dit zonder aankondiging.
Wat we niet konden verifiëren. Oudere abonnementen Free, Basic en Pro met maandelijkse postlimieten worden op veel plekken online genoemd. We konden geen officiële pagina vinden die deze vermeldt: de huidige prijs- en introductiepagina’s beschrijven pay-per-usage zonder benoemde niveaus, en de URL van de abonnementenpagina geeft een 404. We herhalen geen cijfers van derden. Controleer de Developer Console voor de tarieven die voor jouw account gelden.
Wat kan de X API publiceren, en wat niet?
POST /2/tweets accepteert text, optioneel media.media_ids, reply, poll, geo, reply_settings en enkele vlaggen zoals made_with_ai en paid_partnership.
Media maakt geen deel uit van die aanroep. Je uploadt apart via de chunked upload-endpoints en geeft de resulterende media_id mee. Eén post accepteert tot 4 foto’s, 1 geanimeerde GIF, of 1 video.
De beperkingen die je wilt kennen voordat je begint:
quote_tweet_idis alleen voor Enterprise. Quote-posten is niet beschikbaar op het algemene endpoint.- Videolimieten hangen af van het postende account, niet van je app. Standaardaccounts zijn beperkt tot 20 minuten en 8 GB; X Premium- en geverifieerde accounts tot 125 minuten en 16 GB. Je uploader moet beide kunnen afhandelen, want de limiet hoort bij de gebruiker namens wie je post.
- Polls zijn aan banden gelegd. 2 tot 4 opties, duur tussen 5 en 10.080 minuten.
- De referentie voor het aanmaken van posts vermeldt geen tekenlimiet. We konden er geen verifiëren op die pagina. Zie de X-tekenlimiet post voor wat het product zelf afdwingt.
Let op: deze cijfers zijn geverifieerd tegen docs.x.com/x-api/posts/creation-of-a-post per september 2026. Platformen wijzigen dit zonder aankondiging.
Hoe ziet het authenticatiemodel er in gewone woorden uit?
Twee modi, en posten werkt maar in één ervan.
App-only bearer token. Eén credential die je applicatie vertegenwoordigt. Deze leest openbare data. Posten kan er niet mee, omdat er geen gebruiker is om namens te posten.
OAuth 2.0 Authorization Code met PKCE, in gebruikerscontext. De gebruiker wordt naar het autorisatiescherm van X gestuurd, komt terug met een code, en jij wisselt die om voor een toegangstoken. Posten vereist de scope tweet.write, naast tweet.read en users.read. Wil je kunnen blijven posten nadat het toegangstoken verloopt, dan moet je bij autorisatie offline.access aanvragen: dat zorgt ervoor dat er een refresh token wordt uitgegeven.
Dat laatste punt is waar veel mensen door verrast worden. offline.access is per autorisatie opt-in. Laat je het weg, dan moet elke gebruiker interactief opnieuw autoriseren, wat fataal is voor een planningstool dat om 3 uur ‘s nachts publiceert. De documentatie vermeldt de levensduur van het toegangstoken niet, dus ga uit van een korte levensduur en ververs proactief.
Wat zijn de rate limits op posten?
| Endpoint | Per gebruiker | Per app |
|---|---|---|
POST /2/tweets | 100 per 15 minuten | 10.000 per 24 uur |
Elke respons bevat x-rate-limit-limit, x-rate-limit-remaining en x-rate-limit-reset (een Unix-tijdstempel). Lees deze uit in plaats van je eigen aanroepen te tellen, want jouw teller en die van X raken uit elkaar zodra er een retry plaatsvindt.
De documentatie stelt expliciet dat rate limits en facturering losstaande zaken zijn. Onder de rate limit blijven beperkt je uitgaven niet, en een uitgavenlimiet instellen voorkomt geen 429’s. Je hebt beide controles nodig.
Let op: deze cijfers zijn geverifieerd tegen docs.x.com/x-api/fundamentals/rate-limits per september 2026. Platformen wijzigen dit zonder aankondiging.
Wat kost je echt drie weken?
Niet de publicatieaanroep. Die is in een middag geregeld.
Token vernieuwen. offline.access aanvragen, refresh tokens versleuteld opslaan, rotatie afhandelen en een herverbindingspad voor gebruikers van wie de vernieuwing mislukt. Dit is een achtergrondtaak met eigen faalscenario’s, geen functie.
Chunked media-upload. INIT, APPEND, FINALIZE, en dan pollen voor de verwerkingsstatus voordat de media-id bruikbaar is in een post. Video’s mislukken bij het transcoderen, en dat gebeurt nadat je upload al 200 teruggaf.
Videolimieten per account. 20 minuten versus 125 minuten is een vertakking in je code op basis van wiens account je post, en dat weet je niet alleen op basis van je app-credentials.
Kostentoerekening. Een prijs per aanvraag betekent dat iemand uitgaven aan klanten moet toewijzen, of je ontdekt de URL-toeslag pas via een factuur.
429-afhandeling die geen slaap is. Het venster per gebruiker is 15 minuten. Een naïeve retry-lus maakt van één rate-limited post een vastgelopen achtergrondtaak.
De korte versie
- Prijzen zijn pay-per-usage credits. Post aanmaken kost $ 0,015 per aanvraag; een post met een URL kost $ 0,200.
- Leesacties op pay-per-usage zijn beperkt tot 3 miljoen posts per maandelijkse factureringscyclus.
POST /2/tweetsstaat 100 per gebruiker per 15 minuten toe, 10.000 per app per 24 uur.- Posten vereist OAuth 2.0 PKCE in gebruikerscontext met
tweet.write, plusoffline.accessals je refresh tokens wilt. - Media wordt apart geüpload: 4 foto’s, 1 GIF, of 1 video. Quote-posten is alleen voor Enterprise.
- Benoemde Free-/Basic-/Pro-niveaus konden in september 2026 niet worden geverifieerd tegen een officiële pagina.
Dit één keer doen in plaats van per platform
Het werk hierboven is echt, en het is X-specifiek. LinkedIn vereist twee aparte apps met verschillende scopes. TikTok vereist het doorlopen van een Content Posting API-audit. Threads gebruikt een container-dan-publiceer-volgorde met een tokenvernieuwingscyclus van 60 dagen. Niets ervan is overdraagbaar.
BulkPublish biedt één REST API voor 15 platformen: Facebook, Instagram, TikTok, YouTube, X, Bluesky, Threads, Pinterest, LinkedIn, Google Business Profile, Mastodon, Discord, Telegram, Tumblr en Snapchat. Eén authenticatiemodel, één mediapipeline, één postobject, en de tokenvernieuwing en asynchrone statuscontrole per platform worden er achter afgehandeld. De ontwikkelaarsdocumentatie en de REST API-referentie behandelen de endpoints.