YeboNa API Routes
Complete route map for the YeboNa backend API.
Base URL
Production: https://api.yebona.com/apiHealth Check
| Method | Route | Description |
|---|---|---|
| GET | /api/health | Service health check |
Authentication Routes
/api/auth
| Method | Route | Description | Body |
|---|---|---|---|
| POST | /send-verification-code | Send OTP for signup | { phoneNumber } |
| POST | /signup | Complete registration | { phoneNumber, otp, password, name? } |
| POST | /login | Login | { phoneNumber, password } |
| POST | /forgot-password | Request reset code | { phoneNumber } |
| POST | /reset-password | Reset with OTP | { phoneNumber, otp, newPassword } |
| POST | /change-password | Change password (auth) | { currentPassword, newPassword } |
| POST | /refresh | Refresh tokens | { refreshToken } |
| POST | /logout | Logout | { refreshToken } |
| POST | /logout-all | Logout all devices | - |
| GET | /me | Get current user | - |
User Routes
/api/users
| Method | Route | Description |
|---|---|---|
| GET | /me | Get current user profile |
| PUT | /me | Update profile |
| GET | /:id | Get user by ID (public profile) |
Provider Routes
/api/providers
| Method | Route | Description |
|---|---|---|
| GET | / | List/search providers |
| GET | /:id | Get provider profile |
| POST | / | Become a provider |
| PUT | /:id | Update provider profile |
| GET | /:id/services | Get provider's services |
| POST | /:id/services | Add a service offering |
| DELETE | /:id/services/:serviceId | Remove service |
| GET | /:id/reviews | Get provider reviews |
| GET | /:id/portfolio | Get portfolio items |
Query Parameters for GET /:
category: exchange | sourcing | verification | freight | translation | consulting
country: string
minRating: number (1-5)
page: number
limit: numberRequest Routes
/api/requests
| Method | Route | Description |
|---|---|---|
| GET | / | List requests (user's own) |
| GET | /open | List open requests (for providers) |
| GET | /:id | Get request details |
| POST | / | Create request |
| PUT | /:id | Update request |
| DELETE | /:id | Cancel request |
| GET | /:id/quotes | Get quotes on request |
Create Request Body:
json
{
"category": "exchange",
"title": "Need USD 500 exchanged",
"description": "Looking for best rate...",
"attachments": [],
"budgetMin": 450,
"budgetMax": 510,
"budgetCurrency": "USD",
"timeline": "Within 24 hours",
"targetProviders": []
}Quote Routes
/api/quotes
| Method | Route | Description |
|---|---|---|
| GET | / | List provider's quotes |
| GET | /:id | Get quote details |
| POST | / | Submit quote on request |
| PUT | /:id | Update quote |
| POST | /:id/accept | User accepts quote |
| POST | /:id/decline | User declines quote |
| DELETE | /:id | Withdraw quote |
Create Quote Body:
json
{
"requestId": "req_123",
"amount": 500,
"currency": "USD",
"description": "I can provide this service...",
"deliverables": ["Exchange completed", "Receipt provided"],
"timeline": "Same day"
}Transaction Routes
/api/transactions
| Method | Route | Description |
|---|---|---|
| GET | / | List user's transactions |
| GET | /:id | Get transaction details |
| POST | /:id/pay | Submit payment proof |
| POST | /:id/confirm-payment | Provider confirms payment |
| POST | /:id/complete | Provider marks complete |
| POST | /:id/release | User releases funds |
| POST | /:id/dispute | Open dispute |
| GET | /:id/reviews | Get transaction reviews |
| POST | /:id/reviews | Leave review |
Transaction Status Flow:
pending_payment → payment_received → in_progress → completed → released
↓
disputed → refundedConversation Routes
/api/conversations
| Method | Route | Description |
|---|---|---|
| GET | / | List conversations |
| GET | /:id | Get conversation with messages |
| POST | / | Start new conversation |
| POST | /:id/messages | Send message |
| POST | /:id/read | Mark messages as read |
Send Message Body:
json
{
"content": "Hello, I'm interested in your service",
"messageType": "text"
}Waitlist Routes
/api/waitlist
| Method | Route | Description |
|---|---|---|
| POST | / | Join waitlist |
| GET | /stats | Get waitlist statistics |
Join Waitlist Body:
json
{
"name": "John Doe",
"phone": "+26812345678",
"interest": "exchange",
"product": "yebona",
"source": "website"
}Blog Routes
/api/blog
| Method | Route | Description |
|---|---|---|
| GET | /posts | List published posts |
| GET | /posts/:slug | Get post by slug |
| POST | /posts | Create post (admin) |
Query Parameters for GET /posts:
page: number
limit: number
category: stringError Responses
All endpoints return consistent error format:
json
{
"success": false,
"error": "Error message description"
}Common Status Codes:
400- Bad request / validation error401- Unauthorized / invalid token403- Forbidden404- Not found429- Rate limited500- Server error
Rate Limiting
| Endpoint Group | Limit |
|---|---|
Auth (/api/auth/*) | 20 requests / 15 min |
| General API | 100 requests / 15 min |
Rate limit response:
json
{
"success": false,
"error": "Too many requests, please try again later"
}