Overview
The Professional Portfolio API follows RESTful conventions and returns JSON payloads. All endpoints require HTTPS. Pagination is supported for list endpoints using the limit and offset query parameters.
Note: The API is currently in v1.0. Future versions will be backward compatible where possible. Breaking changes will be documented with advance notice.
Authentication
Access the API using Bearer Token authentication. Include your API key in the Authorization header for all requests.
Authorization: Bearer YOUR_API_KEY_HERE
Generate your API key from the developer dashboard. Keys are scoped to read or read_write depending on your access level.
Endpoints
Retrieve a paginated list of portfolio projects.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | No | Number of items to return (max 50) |
| offset | integer | No | Pagination offset |
| category | string | No | Filter by category (web, app, brand) |
Response Example
{
"data": [
{
"id": "proj_8x92k1",
"title": "LuxeCart E-Commerce",
"description": "Premium e-commerce platform with AI recommendations",
"category": "web",
"thumbnail": "https://cdn.portfolio.dev/proj/1.jpg",
"tech_stack": ["React", "Node.js", "PostgreSQL", "Redis"],
"live_url": "https://luxecart.dev",
"created_at": "2024-08-15T10:00:00Z"
}
],
"pagination": {
"total": 24,
"limit": 10,
"offset": 0,
"has_more": true
}
}
Retrieve detailed information about a specific project.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | Yesrequired | Unique project identifier |
Returns a list of technical skills with proficiency levels.
Response Example
{
"data": [
{ "skill": "React / Next.js", "proficiency": 95, "category": "frontend" },
{ "skill": "Node.js / Express", "proficiency": 90, "category": "backend" },
{ "skill": "TypeScript", "proficiency": 92, "category": "language" },
{ "skill": "AWS / GCP", "proficiency": 85, "category": "cloud" }
]
}
Fetch client testimonials and reviews.
Response Example
{
"data": [
{
"id": "test_3k9m2",
"author": "Sarah Chen",
"role": "CEO, TechVentures",
"content": "Completely transformed our online presence...",
"rating": 5,
"date": "2024-11-02"
}
]
}
Submit a contact inquiry or project request.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Yesrequired | Full name |
| string | Yesrequired | Valid email address | |
| subject | string | No | Message subject |
| message | string | Yesrequired | Message content (max 2000 chars) |
Response Example
{
"success": true,
"message": "Inquiry submitted successfully",
"ticket_id": "inq_77x92a"
}
Rate Limits
To ensure fair usage, the API enforces rate limits based on your plan:
- Free Tier: 100 requests / hour
- Pro Tier: 1,000 requests / hour
- Enterprise: Custom limits
Rate limit headers are included in every response:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 942
X-RateLimit-Reset: 1718923400
Error Handling
The API uses standard HTTP status codes. Error responses include a structured JSON body with details.
| Code | Meaning | Description |
|---|---|---|
| 400 | Bad Request | Malformed request or missing required parameters |
| 401 | Unauthorized | Missing or invalid API key |
| 403 | Forbidden | Insufficient permissions for the requested action |
| 404 | Not Found | Requested resource does not exist |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Something went wrong on our end |
Error Response Format
{
"error": {
"code": 401,
"message": "Invalid or expired API token",
"details": "The provided Authorization header is missing or malformed."
}
}