Reddit user_posts API
Reddit user_posts data in one REST call — normalized to the stable JSON schema shared across every FetchPI platform.
- 1 documented endpoints
- GET /v1/reddit/users/{username}/posts
Contract summary (English): List recent posts of a user (capability reddit.user_posts)
- Normalized response entity
- reddit/user_posts
- capability
- reddit.user_posts
Every response also carries freshness (cache / default / live) and billing metadata.
Use cases
- Monitor what a {{platform}} account publishes, in order, with normalized per-item metrics.
- Detect new activity when scheduled jobs re-query the feed — ideal for alerting and digest workflows.
- Benchmark publishing cadence and engagement across accounts with comparable, structured output.
Response fields
Reddit user posts response (normalized envelope)
Response envelope for GET /v1/reddit/users/{username}/posts (capability reddit.user_posts). Cursor is opaque and platform-independent; when the upstream provider is switched the old cursors become invalid. Page size follows the request's `limit` parameter (1..100, default 20).
| Field | Type | Required | Description |
|---|---|---|---|
| data | post[] | Required | — |
| next_cursor | string | null | Required | Opaque pagination cursor; null when the list is exhausted. |
| meta.request_id | string | Required | — |
| meta.freshness.mode | cache | default | live | Required | — |
| meta.freshness.age_seconds | integer | null | Optional | — |
| meta.freshness.source_layer | cache | db | upstream | Required | — |
| meta.freshness.stale | boolean | Optional | — |
| meta.billing.cache_hit | boolean | Required | — |
| meta.billing.amount_credits | integer | Required | Credits actually charged for this request (the settlement unit; 1 credit = $0.0001, permanent). |
Field notes are shown in the contract's original English.
Response meta
| Field | Type | Required | Description |
|---|---|---|---|
| mode | cache | default | live | Required | Effective mode after merging param > max_age > source policy (D-004). |
| age_seconds | integer | null | Optional | Age of served data; null when unknown. |
| source_layer | cache | db | upstream | Required | Which layer served the response (PRD §10). |
| stale | boolean | Optional | True when stale data was served under stale_if_error / SWR (D-004). |
| billing.amount_credits | integer | Required | Micro-USD (1e-6 USD) actually charged for this request. |
| billing.cache_hit | boolean | Required | — |
Field notes are shown in the contract's original English.
Example request & response
/v1/reddit/users/{username}/postscurl -H "Authorization: Bearer $MESHDATA_API_KEY" \
"https://api.fetchpi.com/v1/reddit/users/newdev/posts"{
"data": [
{
"id": "1simpost01",
"platform": "reddit",
"type": "post",
"author": {
"id": "7004994945",
"username": "creatordev",
"display_name": null,
"verified": false
},
"title": "First post on the platform.",
"text": "One API for every platform.",
"url": "https://www.reddit.com/r/dataapi/comments/1simpost01/",
"created_at": "2026-09-16T19:23:20Z",
"metrics": {
"upvotes": 864,
"downvotes": 12,
"comments": 42
},
"attachments": [],
"fetched_at": "2026-09-18T09:00:00Z"
},
{
"id": "1simpost02",
"platform": "reddit",
"type": "post",
"author": {
"id": "7004994945",
"username": "creatordev",
"display_name": null,
"verified": false
},
"title": "Freshness modes, explained.",
"text": "One API for every platform.",
"url": "https://www.reddit.com/r/dataapi/comments/1simpost02/",
"created_at": "2026-09-16T08:00:00Z",
"metrics": {
"upvotes": 412,
"downvotes": 9,
"comments": 18
},
"attachments": [
{
"type": "photo",
"url": "https://cdn.example.com/p1-full.jpg",
"preview_image_url": "https://cdn.example.com/p1.jpg"
},
{
"type": "video",
"url": "https://cdn.example.com/p2.mp4",
"preview_image_url": "https://cdn.example.com/p2.jpg"
}
],
"fetched_at": "2026-09-18T09:00:00Z"
}
],
"next_cursor": "eyJ2IjoxLCJzcmMiOiJ4dGhpcmQiLCJwb3MiOiJ0M19zaW0ifQ",
"meta": {
"request_id": "req_01HTXQ8Z9HTQ",
"freshness": {
"mode": "default",
"age_seconds": 0,
"source_layer": "upstream",
"stale": false
},
"billing": {
"amount_credits": 200,
"cache_hit": false
}
}
}Free demo
Create a free account, grab an API key and call this endpoint from the browser-based Playground.
Try it in the PlaygroundParameter tables, error codes and response semantics for this endpoint live in the API documentation.
Open the endpoint referenceFrequently asked questions
Can I poll the feed on a schedule?
Yes — the endpoint is a plain REST call, so any scheduler can re-query it. Use the freshness parameters to control how current each answer is and how it is billed.
Can I try this endpoint for free?
Yes — register an account, grab an API key and call it from the Playground in the console.
How is the user_posts capability billed?
Data API calls are billed per request in credits, with different cache/live freshness multipliers. Current per-capability prices live on the pricing page.
Pricing
Per-request credit billing with cache/live freshness options — current prices live on the pricing page.