v1.0.0

API Documentation

Programmatic access to portfolio data, projects, skills, testimonials, and contact inquiries. Built for developers and integrations.

Base URL: https://api.professionalportfolio.dev/v1

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

GET /projects

Retrieve a paginated list of portfolio projects.

Query Parameters

ParameterTypeRequiredDescription
limitintegerNoNumber of items to return (max 50)
offsetintegerNoPagination offset
categorystringNoFilter 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
  }
}
GET /projects/:id

Retrieve detailed information about a specific project.

Path Parameters

ParameterTypeRequiredDescription
idstringYesrequiredUnique project identifier
GET /skills

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" }
  ]
}
GET /testimonials

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"
    }
  ]
}
POST /contact

Submit a contact inquiry or project request.

Request Body

ParameterTypeRequiredDescription
namestringYesrequiredFull name
emailstringYesrequiredValid email address
subjectstringNoMessage subject
messagestringYesrequiredMessage 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.

CodeMeaningDescription
400Bad RequestMalformed request or missing required parameters
401UnauthorizedMissing or invalid API key
403ForbiddenInsufficient permissions for the requested action
404Not FoundRequested resource does not exist
429Too Many RequestsRate limit exceeded
500Internal Server ErrorSomething 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."
  }
}