Complete REST API documentation for ReditFast.
Development: http://localhost:3000/api
Production: https://reditfast.com/api
All API requests (except auth endpoints) require a valid session cookie or JWT token.
{
"success": true,
"data": { ... }
}{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Human readable message",
"details": { ... }
}
}Headers included in responses:
X-RateLimit-Limit: Request limit per windowX-RateLimit-Remaining: Remaining requestsX-RateLimit-Reset: Unix timestamp when limit resets
Register a new user.
Request:
{
"email": "user@example.com",
"password": "securepassword",
"name": "John Doe"
}Response:
{
"success": true,
"data": {
"user": {
"id": "usr_xxx",
"email": "user@example.com",
"name": "John Doe"
},
"workspace": {
"id": "ws_xxx",
"name": "Personal"
}
}
}Authenticate user.
Request:
{
"email": "user@example.com",
"password": "securepassword"
}End user session.
List all projects in workspace.
Query Parameters:
status: Filter by status (active, paused, archived)limit: Number of results (default: 20, max: 100)cursor: Pagination cursor
Response:
{
"success": true,
"data": {
"projects": [...],
"pagination": {
"nextCursor": "...",
"hasMore": true
}
}
}Create a new project.
Request:
{
"name": "My SaaS",
"description": "AI-powered analytics tool",
"url": "https://mysaas.com",
"niche": "saas",
"goals": {
"primary": "traffic",
"targets": ["founders", "marketers"],
"kpis": ["signups", "demo_bookings"]
},
"brandVoice": {
"tone": "professional",
"do": ["be helpful", "share data"],
"dont": ["be salesy", "use hype"]
}
}Get project details.
Update project.
Archive project.
Initiate Reddit OAuth flow.
Response:
{
"success": true,
"data": {
"url": "https://www.reddit.com/api/v1/authorize?..."
}
}OAuth callback handler (internal use).
List connected Reddit accounts.
Response:
{
"success": true,
"data": {
"accounts": [
{
"id": "ra_xxx",
"redditUsername": "myusername",
"linkKarma": 1500,
"commentKarma": 3000,
"safetyTier": "TRUSTED",
"isActive": true
}
]
}
}Disconnect Reddit account.
Generate a new roadmap for project.
Request:
{
"projectId": "proj_xxx",
"horizonDays": 30
}Response:
{
"success": true,
"data": {
"roadmap": {
"id": "rm_xxx",
"status": "ACTIVE",
"tasks": [
{
"id": "task_xxx",
"dayIndex": 1,
"type": "KARMA_BUILDING",
"instructions": "Comment on 3 posts in r/startups",
"subreddit": { ... }
}
]
}
}
}Get roadmap with tasks.
Get tasks for roadmap.
Query Parameters:
status: Filter by status (pending, in_progress, completed)day: Filter by day index
Generate draft content.
Request:
{
"taskId": "task_xxx",
"type": "POST",
"knobs": {
"tone": "casual",
"length": "medium",
"variantCount": 3
}
}Response:
{
"success": true,
"data": {
"drafts": [
{
"id": "draft_xxx",
"title": "How I bootstrapped to $10k MRR",
"body": "...",
"riskScore": 15,
"riskReasons": ["Contains promotional link"],
"suggestedFixes": ["Remove direct link", "Use profile bio instead"]
}
]
}
}Rewrite draft to comply.
Request:
{
"target": "comply", // or "no-link", "shorter", "friendlier"
"instructions": "Make it less promotional"
}Update draft (user edits).
Request:
{
"title": "Updated title",
"body": "Updated body content"
}Approve draft for scheduling.
Schedule a post.
Request:
{
"draftId": "draft_xxx",
"redditAccountId": "ra_xxx",
"scheduledAt": "2026-02-15T14:00:00Z",
"timezone": "America/New_York"
}Response:
{
"success": true,
"data": {
"scheduledPost": {
"id": "sp_xxx",
"status": "SCHEDULED",
"scheduledAt": "2026-02-15T14:00:00Z",
"draft": { ... }
}
}
}List scheduled posts.
Query Parameters:
status: Filter by statusfrom: Start dateto: End dateredditAccountId: Filter by account
Cancel scheduled post.
Delete scheduled post.
Get project analytics.
Response:
{
"success": true,
"data": {
"summary": {
"totalPosts": 45,
"totalComments": 120,
"avgScore": 25,
"totalClicks": 1500,
"conversions": 30
},
"trends": {
"karmaGrowth": [ ... ],
"postPerformance": [ ... ],
"trafficSources": [ ... ]
}
}
}Get Reddit account analytics.
Get dashboard overview.
Stripe webhook handler.
Headers:
Stripe-Signature: Webhook signature
INVALID_INPUT: Request validation failedMISSING_FIELD: Required field missingINVALID_FORMAT: Incorrect data format
UNAUTHENTICATED: No valid sessionTOKEN_EXPIRED: Session expiredINVALID_CREDENTIALS: Login failed
UNAUTHORIZED: Insufficient permissionsWORKSPACE_MISMATCH: Resource not in workspaceRATE_LIMITED: Too many requests
RESOURCE_NOT_FOUND: Resource doesn't existUSER_NOT_FOUND: User not foundPROJECT_NOT_FOUND: Project not found
DUPLICATE_RESOURCE: Resource already existsALREADY_SCHEDULED: Post already scheduledCONCURRENT_MODIFICATION: Resource modified by another request
VALIDATION_ERROR: Business logic validation failedINSUFFICIENT_KARMA: Account doesn't meet karma requirementsSUBREDDIT_NOT_ALLOWED: Cannot post to this subredditCONTENT_RISK_TOO_HIGH: Risk score exceeds threshold
RATE_LIMIT_EXCEEDED: API rate limit hitREDDIT_RATE_LIMIT: Reddit API rate limit
INTERNAL_ERROR: Unexpected server errorDATABASE_ERROR: Database operation failedEXTERNAL_API_ERROR: External service error
Connect to /api/socket for real-time updates.
Roadmap generation complete.
{
"event": "roadmap:generated",
"data": {
"roadmapId": "rm_xxx",
"projectId": "proj_xxx"
}
}Draft generation complete.
Scheduled post published.
{
"event": "post:published",
"data": {
"scheduledPostId": "sp_xxx",
"publishedItemId": "pi_xxx",
"url": "https://reddit.com/r/..."
}
}Scheduled post failed to publish.
New notification for user.
Cursor-based pagination for list endpoints.
Request:
GET /projects?limit=20&cursor=eyJpZCI6InByb2pfMTIzIn0
Response:
{
"success": true,
"data": {
"items": [...],
"pagination": {
"nextCursor": "eyJpZCI6InByb2pfNDU2In0",
"hasMore": true
}
}
}To get next page:
GET /projects?limit=20&cursor=eyJpZCI6InByb2pfNDU2In0
API version is included in URL path:
- Current:
/api/v1/...(implicit, no version prefix needed) - Future:
/api/v2/...
Breaking changes will be announced 30 days in advance.
Coming soon:
- JavaScript/TypeScript SDK
- Python SDK
- CLI tool
- API questions: GitHub Discussions
- Bug reports: GitHub Issues
- Email: api@reditfast.com