# Felo X-gebruikersberichten

POST /api/v1/data/x/user/tweets

Kies de bewerking voor de gegevens die je nodig hebt. Alle vijf eindpunten gebruiken POST en retourneren JSON op de root, zonder een algemene `data`-wrapper.

Alle voorbeelden gebruiken `FELO_API_KEY` uit het [overzicht](https://openapi.felo.ai/nl/docs/data-api/guides/felo-overview.md). Aanroepen gebruiken **platformsaldo**, niet Felo Pro-credits. Reactievoorbeelden zijn illustratief; live inhoud en optionele velden kunnen variëren.





## 3. Gebruikerstijdlijn ophalen

`POST /api/v1/data/x/user/tweets`

| Veld | Type | Vereist | Betekenis |
|---|---|---|---|
| `username` | string | Eén identificatie vereist | Gebruikersnaam, tot 100 tekens |
| `x_user_id` | string | Eén identificatie vereist | Gebruikers-ID, tot 100 tekens; heeft voorrang op `username` |
| `limit` | integer | Nee | 1–1.000; huidige implementatie gebruikt minimaal 20, met standaard 20 |
| `cursor` | string | Nee | Paginatiecursor, tot 4.000 tekens |
| `include_replies` | boolean | Nee | Geneste antwoorden opnemen; standaard `false` |

```bash
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/user/tweets" \
  -H "Authorization: Bearer $FELO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"username":"OpenAI","limit":20,"include_replies":false}'
```

De reactie bevat `tweets`, `total`, `has_next` en `next_cursor`. Door `limit` lager dan 20 in te stellen, krijg je niet noodzakelijk minder teruggegeven items of een kleinere factuur. Antwoorden opnemen kan meer teruggegeven gegevens en factureerbare resultaten toevoegen.

### Limieten voor resultaat en geneste antwoorden

`limit` is het doel aantal topniveau-berichten voor dit verzoek, niet een gegarandeerd resultaataantal. De huidige implementatie gebruikt een doel van minstens 20: een doel van 20 leest één upstream-pagina; grotere doelen halen automatisch tot 50 pagina's op. Vóór elke pagina wordt de verstreken tijd gecontroleerd en er wordt gestopt met ophalen zodra deze 60 seconden overschrijdt. Deze controle garandeert niet dat het volledige HTTP-verzoek binnen 60 seconden eindigt.

Verzameling stopt ook wanneer het doel is bereikt, de upstream geen volgende pagina heeft, een pagina leeg is of de cursor ontbreekt. Een succesvolle reactie kan dus minder dan `limit` berichten bevatten. Gebruik `has_next` en `next_cursor` om door te gaan wanneer beschikbaar.

Met `include_replies=true` krijgt elk teruggegeven bericht tot 5 extra pagina's en maximaal 100 geneste antwoorden. Verzameling kan eerder stoppen wanneer er geen volgende pagina is, een pagina leeg is of de cursor niet kan verdergaan. Deze geneste antwoorden vallen buiten de topniveau-`limit` en `total`, maar kunnen wel factureerbare resultaten toevoegen.

Geneste `replies` zijn geen volledig antwoordarchief en geven geen aparte vervolgcursor voor deze extra verzameling weer. Om antwoorden onafhankelijk te pagineren, gebruik je de bewerking Antwoorden lezen en de teruggegeven cursor. Hergebruik niet de topniveau-berichtcursor voor antwoorden.



## Paginering en kostenbeheersing

`total` telt de overeenkomstige array in de huidige reactie: berichten op topniveau voor berichtquery's, of antwoorden binnen elke resultaatinvoer voor antwoordquery's. Het is geen globaal matchaantal, geen volledig antwoordaantal van een bericht en geen uiteindelijke factureerbare telling.

1. Stuur het eerste verzoek zonder `cursor`.
2. Lees `has_next` en `next_cursor` uit de reactie. Voor antwoorden lees je ze in elke resultaatinvoer.
3. Als er nog een pagina is en de cursor niet leeg is, stuur je die ongewijzigd mee met dezelfde query. Voor een antwoordenbatch ga je per bericht afzonderlijk verder.
4. Stop wanneer er geen volgende pagina is, wanneer een cursor zich herhaalt, of wanneer je eigen pagina- of bestedingslimiet is bereikt.

Paginatiemetagegevens weerspiegelen de laatste upstream-reactie; de teruggegeven verzameling kan worden afgekapt bij een resultaatlimiet. Zelfs `has_next=false` is geen garantie dat alle X-geschiedenis of antwoorden zijn opgehaald. Geef het daadwerkelijk teruggegeven aantal weer in plaats van een begrensde resultaatset als alle beschikbare gegevens te labelen.

Elke succesvolle pagina kan kosten met zich meebrengen. Deze vijf bewerkingen worden gefactureerd op basis van teruggegeven resultaten, niet per vaste verzoekprijs. Geneste antwoorden en andere teruggegeven records kunnen de gefactureerde telling beïnvloeden; schat de kosten niet alleen op basis van de lengte van de array op topniveau. Controleer de [huidige prijzen](https://openapi.felo.ai/api/v1/data/prices) en het gebruik in de console. Volledige objectvelden staan in het [OpenAPI-schema](https://openapi.felo.ai/api/v1/data/openapi.json).
