User Portfolio API

Complete portfolio management system with projects, skills, experience, education, testimonials, and blog

9
Resources
2025-11-28
2 days ago

Blog

Personal blog posts and articles

GET /api/portfolio/blog Public

Retrieve a paginated list of all blog

Request Example
GET /api/portfolio/blog
Accept: application/json
Response Example 200 OK
{
  "data": [
    {
        "user_id": 1,
        "user_name": "Alexandra Mitchell",
        "title": "10 React Performance Optimization Tips",
        "slug": "10-react-performance-tips",
        "excerpt": "Learn how to make your React applications faster and more efficient with these proven optimization techniques.",
        "content": "Performance is crucial for user experience. In this article, I share 10 practical tips for optimizing React applications...",
        "featured_image": "https://picsum.photos/800/450?random=blog1",
        "category": "Web Development",
        "tags": [
            "React",
            "Performance",
            "JavaScript",
            "Optimization"
        ],
        "views": 3421,
        "reading_time": "8 min read",
        "published_at": "2024-01-10T09:00:00Z"
    },
    ...
  ],
  "meta": {
    "current_page": 1,
    "total": 50,
    "per_page": 15
  }
}
GET /api/portfolio/blog/{id} Public

Retrieve a single blog by ID

Request Example
GET /api/portfolio/blog/1
Accept: application/json
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "title": "10 React Performance Optimization Tips",
    "slug": "10-react-performance-tips",
    "excerpt": "Learn how to make your React applications faster and more efficient with these proven optimization techniques.",
    "content": "Performance is crucial for user experience. In this article, I share 10 practical tips for optimizing React applications...",
    "featured_image": "https://picsum.photos/800/450?random=blog1",
    "category": "Web Development",
    "tags": [
        "React",
        "Performance",
        "JavaScript",
        "Optimization"
    ],
    "views": 3421,
    "reading_time": "8 min read",
    "published_at": "2024-01-10T09:00:00Z"
}
Error Response 404 Not Found
{
  "error": "Resource not found",
  "message": "The requested blog does not exist"
}
POST /api/portfolio/blog Auth Required Auto User ID

Create a new blog

Request Body
POST /api/portfolio/blog
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "title": "10 React Performance Optimization Tips",
    "slug": "10-react-performance-tips",
    "excerpt": "Learn how to make your React applications faster and more efficient with these proven optimization techniques.",
    "content": "Performance is crucial for user experience. In this article, I share 10 practical tips for optimizing React applications...",
    "featured_image": "https://picsum.photos/800/450?random=blog1",
    "category": "Web Development",
    "tags": [
        "React",
        "Performance",
        "JavaScript",
        "Optimization"
    ],
    "views": 3421,
    "reading_time": "8 min read",
    "published_at": "2024-01-10T09:00:00Z"
}
Response Example 201 Created
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "title": "10 React Performance Optimization Tips",
    "slug": "10-react-performance-tips",
    "excerpt": "Learn how to make your React applications faster and more efficient with these proven optimization techniques.",
    "content": "Performance is crucial for user experience. In this article, I share 10 practical tips for optimizing React applications...",
    "featured_image": "https://picsum.photos/800/450?random=blog1",
    "category": "Web Development",
    "tags": [
        "React",
        "Performance",
        "JavaScript",
        "Optimization"
    ],
    "views": 3421,
    "reading_time": "8 min read",
    "published_at": "2024-01-10T09:00:00Z"
}
PUT/PATCH /api/portfolio/blog/{id} Auth Required Ownership Check

Update an existing blog

Only the owner can update this resource
Request Body
PUT /api/portfolio/blog/1
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "title": "10 React Performance Optimization Tips",
    "slug": "10-react-performance-tips",
    "excerpt": "Learn how to make your React applications faster and more efficient with these proven optimization techniques.",
    "content": "Performance is crucial for user experience. In this article, I share 10 practical tips for optimizing React applications...",
    "featured_image": "https://picsum.photos/800/450?random=blog1",
    "category": "Web Development",
    "tags": [
        "React",
        "Performance",
        "JavaScript",
        "Optimization"
    ],
    "views": 3421,
    "reading_time": "8 min read",
    "published_at": "2024-01-10T09:00:00Z"
}
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "title": "10 React Performance Optimization Tips",
    "slug": "10-react-performance-tips",
    "excerpt": "Learn how to make your React applications faster and more efficient with these proven optimization techniques.",
    "content": "Performance is crucial for user experience. In this article, I share 10 practical tips for optimizing React applications...",
    "featured_image": "https://picsum.photos/800/450?random=blog1",
    "category": "Web Development",
    "tags": [
        "React",
        "Performance",
        "JavaScript",
        "Optimization"
    ],
    "views": 3421,
    "reading_time": "8 min read",
    "published_at": "2024-01-10T09:00:00Z"
}
DELETE /api/portfolio/blog/{id} Auth Required Ownership Check

Delete a blog by ID

Only the owner can delete this resource
Request Example
DELETE /api/portfolio/blog/1
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Response Example 200 OK
{
  "message": "Blog deleted successfully"
}
Error Response 500 Error
{
  "error": "Deletion failed",
  "message": "Unable to delete the resource"
}

Certifications

Professional certifications and awards

GET /api/portfolio/certifications Public

Retrieve a paginated list of all certifications

Request Example
GET /api/portfolio/certifications
Accept: application/json
Response Example 200 OK
{
  "data": [
    {
        "user_id": 1,
        "user_name": "Alexandra Mitchell",
        "name": "AWS Certified Solutions Architect - Professional",
        "issuing_organization": "Amazon Web Services",
        "organization_logo": "https://picsum.photos/100/100?random=cert1",
        "credential_id": "AWS-SAP-2023-001234",
        "credential_url": "https://aws.amazon.com/verification/001234",
        "issued_date": "2023-06-15",
        "expiry_date": "2026-06-15",
        "does_not_expire": false
    },
    ...
  ],
  "meta": {
    "current_page": 1,
    "total": 50,
    "per_page": 15
  }
}
GET /api/portfolio/certifications/{id} Public

Retrieve a single certification by ID

Request Example
GET /api/portfolio/certifications/1
Accept: application/json
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "name": "AWS Certified Solutions Architect - Professional",
    "issuing_organization": "Amazon Web Services",
    "organization_logo": "https://picsum.photos/100/100?random=cert1",
    "credential_id": "AWS-SAP-2023-001234",
    "credential_url": "https://aws.amazon.com/verification/001234",
    "issued_date": "2023-06-15",
    "expiry_date": "2026-06-15",
    "does_not_expire": false
}
Error Response 404 Not Found
{
  "error": "Resource not found",
  "message": "The requested certification does not exist"
}
POST /api/portfolio/certifications Auth Required Auto User ID

Create a new certification

Request Body
POST /api/portfolio/certifications
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "name": "AWS Certified Solutions Architect - Professional",
    "issuing_organization": "Amazon Web Services",
    "organization_logo": "https://picsum.photos/100/100?random=cert1",
    "credential_id": "AWS-SAP-2023-001234",
    "credential_url": "https://aws.amazon.com/verification/001234",
    "issued_date": "2023-06-15",
    "expiry_date": "2026-06-15",
    "does_not_expire": false
}
Response Example 201 Created
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "name": "AWS Certified Solutions Architect - Professional",
    "issuing_organization": "Amazon Web Services",
    "organization_logo": "https://picsum.photos/100/100?random=cert1",
    "credential_id": "AWS-SAP-2023-001234",
    "credential_url": "https://aws.amazon.com/verification/001234",
    "issued_date": "2023-06-15",
    "expiry_date": "2026-06-15",
    "does_not_expire": false
}
PUT/PATCH /api/portfolio/certifications/{id} Auth Required Ownership Check

Update an existing certification

Only the owner can update this resource
Request Body
PUT /api/portfolio/certifications/1
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "name": "AWS Certified Solutions Architect - Professional",
    "issuing_organization": "Amazon Web Services",
    "organization_logo": "https://picsum.photos/100/100?random=cert1",
    "credential_id": "AWS-SAP-2023-001234",
    "credential_url": "https://aws.amazon.com/verification/001234",
    "issued_date": "2023-06-15",
    "expiry_date": "2026-06-15",
    "does_not_expire": false
}
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "name": "AWS Certified Solutions Architect - Professional",
    "issuing_organization": "Amazon Web Services",
    "organization_logo": "https://picsum.photos/100/100?random=cert1",
    "credential_id": "AWS-SAP-2023-001234",
    "credential_url": "https://aws.amazon.com/verification/001234",
    "issued_date": "2023-06-15",
    "expiry_date": "2026-06-15",
    "does_not_expire": false
}
DELETE /api/portfolio/certifications/{id} Auth Required Ownership Check

Delete a certification by ID

Only the owner can delete this resource
Request Example
DELETE /api/portfolio/certifications/1
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Response Example 200 OK
{
  "message": "Certification deleted successfully"
}
Error Response 500 Error
{
  "error": "Deletion failed",
  "message": "Unable to delete the resource"
}

Contact-messages

Contact form submissions

GET /api/portfolio/contact-messages Auth Required User Filtering

Retrieve a paginated list of all contact-messages

Portfolio owner can view their messages
Request Example
GET /api/portfolio/contact-messages
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Response Example 200 OK
{
  "data": [
    {
        "user_id": 1,
        "portfolio_owner": "Alexandra Mitchell",
        "sender_name": "John Smith",
        "sender_email": "john.smith@company.com",
        "sender_phone": "+1 (555) 111-2222",
        "subject": "Project Inquiry",
        "message": "Hi Alexandra, I came across your portfolio and I'm impressed by your work. We have a project that might be a great fit for your skills. Would you be available for a call next week?",
        "is_read": false,
        "created_at": "2024-01-25T14:30:00Z"
    },
    ...
  ],
  "meta": {
    "current_page": 1,
    "total": 50,
    "per_page": 15
  }
}
GET /api/portfolio/contact-messages/{id} Auth Required

Retrieve a single contact-message by ID

Request Example
GET /api/portfolio/contact-messages/1
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Response Example 200 OK
{
    "user_id": 1,
    "portfolio_owner": "Alexandra Mitchell",
    "sender_name": "John Smith",
    "sender_email": "john.smith@company.com",
    "sender_phone": "+1 (555) 111-2222",
    "subject": "Project Inquiry",
    "message": "Hi Alexandra, I came across your portfolio and I'm impressed by your work. We have a project that might be a great fit for your skills. Would you be available for a call next week?",
    "is_read": false,
    "created_at": "2024-01-25T14:30:00Z"
}
Error Response 404 Not Found
{
  "error": "Resource not found",
  "message": "The requested contact-message does not exist"
}
POST /api/portfolio/contact-messages Public

Create a new contact-message

Request Body
POST /api/portfolio/contact-messages
Content-Type: application/json

{
    "user_id": 1,
    "portfolio_owner": "Alexandra Mitchell",
    "sender_name": "John Smith",
    "sender_email": "john.smith@company.com",
    "sender_phone": "+1 (555) 111-2222",
    "subject": "Project Inquiry",
    "message": "Hi Alexandra, I came across your portfolio and I'm impressed by your work. We have a project that might be a great fit for your skills. Would you be available for a call next week?",
    "is_read": false
}
Response Example 201 Created
{
    "user_id": 1,
    "portfolio_owner": "Alexandra Mitchell",
    "sender_name": "John Smith",
    "sender_email": "john.smith@company.com",
    "sender_phone": "+1 (555) 111-2222",
    "subject": "Project Inquiry",
    "message": "Hi Alexandra, I came across your portfolio and I'm impressed by your work. We have a project that might be a great fit for your skills. Would you be available for a call next week?",
    "is_read": false,
    "created_at": "2024-01-25T14:30:00Z"
}
PUT/PATCH /api/portfolio/contact-messages/{id} Public

Update an existing contact-message

Request Body
PUT /api/portfolio/contact-messages/1
Content-Type: application/json

{
    "user_id": 1,
    "portfolio_owner": "Alexandra Mitchell",
    "sender_name": "John Smith",
    "sender_email": "john.smith@company.com",
    "sender_phone": "+1 (555) 111-2222",
    "subject": "Project Inquiry",
    "message": "Hi Alexandra, I came across your portfolio and I'm impressed by your work. We have a project that might be a great fit for your skills. Would you be available for a call next week?",
    "is_read": false
}
Response Example 200 OK
{
    "user_id": 1,
    "portfolio_owner": "Alexandra Mitchell",
    "sender_name": "John Smith",
    "sender_email": "john.smith@company.com",
    "sender_phone": "+1 (555) 111-2222",
    "subject": "Project Inquiry",
    "message": "Hi Alexandra, I came across your portfolio and I'm impressed by your work. We have a project that might be a great fit for your skills. Would you be available for a call next week?",
    "is_read": false,
    "created_at": "2024-01-25T14:30:00Z"
}
DELETE /api/portfolio/contact-messages/{id} Auth Required Ownership Check

Delete a contact-message by ID

Only the owner can delete this resource
Request Example
DELETE /api/portfolio/contact-messages/1
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Response Example 200 OK
{
  "message": "Contact-message deleted successfully"
}
Error Response 500 Error
{
  "error": "Deletion failed",
  "message": "Unable to delete the resource"
}

Education

Educational background and qualifications

GET /api/portfolio/education Public

Retrieve a paginated list of all education

Request Example
GET /api/portfolio/education
Accept: application/json
Response Example 200 OK
{
  "data": [
    {
        "user_id": 1,
        "user_name": "Alexandra Mitchell",
        "institution": "Stanford University",
        "institution_logo": "https://picsum.photos/100/100?random=uni1",
        "degree": "Master of Science",
        "field_of_study": "Computer Science",
        "location": "Stanford, CA",
        "start_date": "2014-09-01",
        "end_date": "2016-06-15",
        "gpa": "3.9/4.0",
        "description": "Specialized in Human-Computer Interaction and Web Technologies. Thesis on \"Improving User Experience in Progressive Web Applications\".",
        "achievements": [
            "Dean's List all semesters",
            "Graduate Research Assistant",
            "Published 2 papers on web performance optimization"
        ]
    },
    ...
  ],
  "meta": {
    "current_page": 1,
    "total": 50,
    "per_page": 15
  }
}
GET /api/portfolio/education/{id} Public

Retrieve a single education by ID

Request Example
GET /api/portfolio/education/1
Accept: application/json
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "institution": "Stanford University",
    "institution_logo": "https://picsum.photos/100/100?random=uni1",
    "degree": "Master of Science",
    "field_of_study": "Computer Science",
    "location": "Stanford, CA",
    "start_date": "2014-09-01",
    "end_date": "2016-06-15",
    "gpa": "3.9/4.0",
    "description": "Specialized in Human-Computer Interaction and Web Technologies. Thesis on \"Improving User Experience in Progressive Web Applications\".",
    "achievements": [
        "Dean's List all semesters",
        "Graduate Research Assistant",
        "Published 2 papers on web performance optimization"
    ]
}
Error Response 404 Not Found
{
  "error": "Resource not found",
  "message": "The requested education does not exist"
}
POST /api/portfolio/education Auth Required Auto User ID

Create a new education

Request Body
POST /api/portfolio/education
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "institution": "Stanford University",
    "institution_logo": "https://picsum.photos/100/100?random=uni1",
    "degree": "Master of Science",
    "field_of_study": "Computer Science",
    "location": "Stanford, CA",
    "start_date": "2014-09-01",
    "end_date": "2016-06-15",
    "gpa": "3.9/4.0",
    "description": "Specialized in Human-Computer Interaction and Web Technologies. Thesis on \"Improving User Experience in Progressive Web Applications\".",
    "achievements": [
        "Dean's List all semesters",
        "Graduate Research Assistant",
        "Published 2 papers on web performance optimization"
    ]
}
Response Example 201 Created
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "institution": "Stanford University",
    "institution_logo": "https://picsum.photos/100/100?random=uni1",
    "degree": "Master of Science",
    "field_of_study": "Computer Science",
    "location": "Stanford, CA",
    "start_date": "2014-09-01",
    "end_date": "2016-06-15",
    "gpa": "3.9/4.0",
    "description": "Specialized in Human-Computer Interaction and Web Technologies. Thesis on \"Improving User Experience in Progressive Web Applications\".",
    "achievements": [
        "Dean's List all semesters",
        "Graduate Research Assistant",
        "Published 2 papers on web performance optimization"
    ]
}
PUT/PATCH /api/portfolio/education/{id} Auth Required Ownership Check

Update an existing education

Only the owner can update this resource
Request Body
PUT /api/portfolio/education/1
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "institution": "Stanford University",
    "institution_logo": "https://picsum.photos/100/100?random=uni1",
    "degree": "Master of Science",
    "field_of_study": "Computer Science",
    "location": "Stanford, CA",
    "start_date": "2014-09-01",
    "end_date": "2016-06-15",
    "gpa": "3.9/4.0",
    "description": "Specialized in Human-Computer Interaction and Web Technologies. Thesis on \"Improving User Experience in Progressive Web Applications\".",
    "achievements": [
        "Dean's List all semesters",
        "Graduate Research Assistant",
        "Published 2 papers on web performance optimization"
    ]
}
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "institution": "Stanford University",
    "institution_logo": "https://picsum.photos/100/100?random=uni1",
    "degree": "Master of Science",
    "field_of_study": "Computer Science",
    "location": "Stanford, CA",
    "start_date": "2014-09-01",
    "end_date": "2016-06-15",
    "gpa": "3.9/4.0",
    "description": "Specialized in Human-Computer Interaction and Web Technologies. Thesis on \"Improving User Experience in Progressive Web Applications\".",
    "achievements": [
        "Dean's List all semesters",
        "Graduate Research Assistant",
        "Published 2 papers on web performance optimization"
    ]
}
DELETE /api/portfolio/education/{id} Auth Required Ownership Check

Delete a education by ID

Only the owner can delete this resource
Request Example
DELETE /api/portfolio/education/1
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Response Example 200 OK
{
  "message": "Education deleted successfully"
}
Error Response 500 Error
{
  "error": "Deletion failed",
  "message": "Unable to delete the resource"
}

Experience

Work experience and employment history

GET /api/portfolio/experience Public

Retrieve a paginated list of all experience

Request Example
GET /api/portfolio/experience
Accept: application/json
Response Example 200 OK
{
  "data": [
    {
        "user_id": 1,
        "user_name": "Alexandra Mitchell",
        "company": "TechCorp Solutions",
        "company_logo": "https://picsum.photos/100/100?random=comp1",
        "position": "Senior Full-Stack Developer",
        "location": "San Francisco, CA",
        "employment_type": "Full-time",
        "start_date": "2021-03-01",
        "end_date": null,
        "is_current": true,
        "description": "Leading development of enterprise web applications and mentoring junior developers. Architecting scalable solutions using modern technologies.",
        "achievements": [
            "Led team of 5 developers in building a SaaS platform serving 50K+ users",
            "Reduced application load time by 65% through optimization",
            "Implemented CI/CD pipeline reducing deployment time by 80%"
        ],
        "technologies": [
            "React",
            "Node.js",
            "TypeScript",
            "PostgreSQL",
            "AWS",
            "Docker"
        ]
    },
    ...
  ],
  "meta": {
    "current_page": 1,
    "total": 50,
    "per_page": 15
  }
}
GET /api/portfolio/experience/{id} Public

Retrieve a single experience by ID

Request Example
GET /api/portfolio/experience/1
Accept: application/json
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "company": "TechCorp Solutions",
    "company_logo": "https://picsum.photos/100/100?random=comp1",
    "position": "Senior Full-Stack Developer",
    "location": "San Francisco, CA",
    "employment_type": "Full-time",
    "start_date": "2021-03-01",
    "end_date": null,
    "is_current": true,
    "description": "Leading development of enterprise web applications and mentoring junior developers. Architecting scalable solutions using modern technologies.",
    "achievements": [
        "Led team of 5 developers in building a SaaS platform serving 50K+ users",
        "Reduced application load time by 65% through optimization",
        "Implemented CI/CD pipeline reducing deployment time by 80%"
    ],
    "technologies": [
        "React",
        "Node.js",
        "TypeScript",
        "PostgreSQL",
        "AWS",
        "Docker"
    ]
}
Error Response 404 Not Found
{
  "error": "Resource not found",
  "message": "The requested experience does not exist"
}
POST /api/portfolio/experience Auth Required Auto User ID

Create a new experience

Request Body
POST /api/portfolio/experience
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "company": "TechCorp Solutions",
    "company_logo": "https://picsum.photos/100/100?random=comp1",
    "position": "Senior Full-Stack Developer",
    "location": "San Francisco, CA",
    "employment_type": "Full-time",
    "start_date": "2021-03-01",
    "end_date": null,
    "is_current": true,
    "description": "Leading development of enterprise web applications and mentoring junior developers. Architecting scalable solutions using modern technologies.",
    "achievements": [
        "Led team of 5 developers in building a SaaS platform serving 50K+ users",
        "Reduced application load time by 65% through optimization",
        "Implemented CI/CD pipeline reducing deployment time by 80%"
    ],
    "technologies": [
        "React",
        "Node.js",
        "TypeScript",
        "PostgreSQL",
        "AWS",
        "Docker"
    ]
}
Response Example 201 Created
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "company": "TechCorp Solutions",
    "company_logo": "https://picsum.photos/100/100?random=comp1",
    "position": "Senior Full-Stack Developer",
    "location": "San Francisco, CA",
    "employment_type": "Full-time",
    "start_date": "2021-03-01",
    "end_date": null,
    "is_current": true,
    "description": "Leading development of enterprise web applications and mentoring junior developers. Architecting scalable solutions using modern technologies.",
    "achievements": [
        "Led team of 5 developers in building a SaaS platform serving 50K+ users",
        "Reduced application load time by 65% through optimization",
        "Implemented CI/CD pipeline reducing deployment time by 80%"
    ],
    "technologies": [
        "React",
        "Node.js",
        "TypeScript",
        "PostgreSQL",
        "AWS",
        "Docker"
    ]
}
PUT/PATCH /api/portfolio/experience/{id} Auth Required Ownership Check

Update an existing experience

Only the owner can update this resource
Request Body
PUT /api/portfolio/experience/1
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "company": "TechCorp Solutions",
    "company_logo": "https://picsum.photos/100/100?random=comp1",
    "position": "Senior Full-Stack Developer",
    "location": "San Francisco, CA",
    "employment_type": "Full-time",
    "start_date": "2021-03-01",
    "end_date": null,
    "is_current": true,
    "description": "Leading development of enterprise web applications and mentoring junior developers. Architecting scalable solutions using modern technologies.",
    "achievements": [
        "Led team of 5 developers in building a SaaS platform serving 50K+ users",
        "Reduced application load time by 65% through optimization",
        "Implemented CI/CD pipeline reducing deployment time by 80%"
    ],
    "technologies": [
        "React",
        "Node.js",
        "TypeScript",
        "PostgreSQL",
        "AWS",
        "Docker"
    ]
}
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "company": "TechCorp Solutions",
    "company_logo": "https://picsum.photos/100/100?random=comp1",
    "position": "Senior Full-Stack Developer",
    "location": "San Francisco, CA",
    "employment_type": "Full-time",
    "start_date": "2021-03-01",
    "end_date": null,
    "is_current": true,
    "description": "Leading development of enterprise web applications and mentoring junior developers. Architecting scalable solutions using modern technologies.",
    "achievements": [
        "Led team of 5 developers in building a SaaS platform serving 50K+ users",
        "Reduced application load time by 65% through optimization",
        "Implemented CI/CD pipeline reducing deployment time by 80%"
    ],
    "technologies": [
        "React",
        "Node.js",
        "TypeScript",
        "PostgreSQL",
        "AWS",
        "Docker"
    ]
}
DELETE /api/portfolio/experience/{id} Auth Required Ownership Check

Delete a experience by ID

Only the owner can delete this resource
Request Example
DELETE /api/portfolio/experience/1
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Response Example 200 OK
{
  "message": "Experience deleted successfully"
}
Error Response 500 Error
{
  "error": "Deletion failed",
  "message": "Unable to delete the resource"
}

Projects

Portfolio projects and work samples

GET /api/portfolio/projects Public

Retrieve a paginated list of all projects

Request Example
GET /api/portfolio/projects
Accept: application/json
Response Example 200 OK
{
  "data": [
    {
        "user_id": 1,
        "user_name": "Alexandra Mitchell",
        "title": "E-Commerce Platform Redesign",
        "slug": "ecommerce-platform-redesign",
        "description": "Complete redesign and development of a modern e-commerce platform serving 100K+ users",
        "long_description": "Led the complete overhaul of a legacy e-commerce platform, implementing modern design principles and cutting-edge technologies. Improved page load times by 60% and increased conversion rates by 35%. Built with React, Next.js, and integrated with Stripe for payments.",
        "category": "Web Development",
        "tags": [
            "React",
            "Next.js",
            "E-commerce",
            "UI/UX",
            "Stripe"
        ],
        "thumbnail": "https://picsum.photos/800/600?random=proj1",
        "images": [
            "https://picsum.photos/1200/800?random=proj1a",
            "https://picsum.photos/1200/800?random=proj1b",
            "https://picsum.photos/1200/800?random=proj1c"
        ],
        "demo_url": "https://demo-ecommerce.example.com",
        "github_url": "https://github.com/alexmitchell/ecommerce-platform",
        "technologies": [
            "React",
            "Next.js",
            "TypeScript",
            "Tailwind CSS",
            "Node.js",
            "PostgreSQL",
            "Stripe",
            "AWS"
        ],
        "client": "TechRetail Inc.",
        "duration": "6 months",
        "is_featured": true,
        "views": 2456,
        "likes": 189,
        "completed_at": "2024-01-15"
    },
    ...
  ],
  "meta": {
    "current_page": 1,
    "total": 50,
    "per_page": 15
  }
}
GET /api/portfolio/projects/{id} Public

Retrieve a single project by ID

Request Example
GET /api/portfolio/projects/1
Accept: application/json
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "title": "E-Commerce Platform Redesign",
    "slug": "ecommerce-platform-redesign",
    "description": "Complete redesign and development of a modern e-commerce platform serving 100K+ users",
    "long_description": "Led the complete overhaul of a legacy e-commerce platform, implementing modern design principles and cutting-edge technologies. Improved page load times by 60% and increased conversion rates by 35%. Built with React, Next.js, and integrated with Stripe for payments.",
    "category": "Web Development",
    "tags": [
        "React",
        "Next.js",
        "E-commerce",
        "UI/UX",
        "Stripe"
    ],
    "thumbnail": "https://picsum.photos/800/600?random=proj1",
    "images": [
        "https://picsum.photos/1200/800?random=proj1a",
        "https://picsum.photos/1200/800?random=proj1b",
        "https://picsum.photos/1200/800?random=proj1c"
    ],
    "demo_url": "https://demo-ecommerce.example.com",
    "github_url": "https://github.com/alexmitchell/ecommerce-platform",
    "technologies": [
        "React",
        "Next.js",
        "TypeScript",
        "Tailwind CSS",
        "Node.js",
        "PostgreSQL",
        "Stripe",
        "AWS"
    ],
    "client": "TechRetail Inc.",
    "duration": "6 months",
    "is_featured": true,
    "views": 2456,
    "likes": 189,
    "completed_at": "2024-01-15"
}
Error Response 404 Not Found
{
  "error": "Resource not found",
  "message": "The requested project does not exist"
}
POST /api/portfolio/projects Auth Required Auto User ID

Create a new project

Request Body
POST /api/portfolio/projects
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "title": "E-Commerce Platform Redesign",
    "slug": "ecommerce-platform-redesign",
    "description": "Complete redesign and development of a modern e-commerce platform serving 100K+ users",
    "long_description": "Led the complete overhaul of a legacy e-commerce platform, implementing modern design principles and cutting-edge technologies. Improved page load times by 60% and increased conversion rates by 35%. Built with React, Next.js, and integrated with Stripe for payments.",
    "category": "Web Development",
    "tags": [
        "React",
        "Next.js",
        "E-commerce",
        "UI/UX",
        "Stripe"
    ],
    "thumbnail": "https://picsum.photos/800/600?random=proj1",
    "images": [
        "https://picsum.photos/1200/800?random=proj1a",
        "https://picsum.photos/1200/800?random=proj1b",
        "https://picsum.photos/1200/800?random=proj1c"
    ],
    "demo_url": "https://demo-ecommerce.example.com",
    "github_url": "https://github.com/alexmitchell/ecommerce-platform",
    "technologies": [
        "React",
        "Next.js",
        "TypeScript",
        "Tailwind CSS",
        "Node.js",
        "PostgreSQL",
        "Stripe",
        "AWS"
    ],
    "client": "TechRetail Inc.",
    "duration": "6 months",
    "is_featured": true,
    "views": 2456,
    "likes": 189,
    "completed_at": "2024-01-15"
}
Response Example 201 Created
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "title": "E-Commerce Platform Redesign",
    "slug": "ecommerce-platform-redesign",
    "description": "Complete redesign and development of a modern e-commerce platform serving 100K+ users",
    "long_description": "Led the complete overhaul of a legacy e-commerce platform, implementing modern design principles and cutting-edge technologies. Improved page load times by 60% and increased conversion rates by 35%. Built with React, Next.js, and integrated with Stripe for payments.",
    "category": "Web Development",
    "tags": [
        "React",
        "Next.js",
        "E-commerce",
        "UI/UX",
        "Stripe"
    ],
    "thumbnail": "https://picsum.photos/800/600?random=proj1",
    "images": [
        "https://picsum.photos/1200/800?random=proj1a",
        "https://picsum.photos/1200/800?random=proj1b",
        "https://picsum.photos/1200/800?random=proj1c"
    ],
    "demo_url": "https://demo-ecommerce.example.com",
    "github_url": "https://github.com/alexmitchell/ecommerce-platform",
    "technologies": [
        "React",
        "Next.js",
        "TypeScript",
        "Tailwind CSS",
        "Node.js",
        "PostgreSQL",
        "Stripe",
        "AWS"
    ],
    "client": "TechRetail Inc.",
    "duration": "6 months",
    "is_featured": true,
    "views": 2456,
    "likes": 189,
    "completed_at": "2024-01-15"
}
PUT/PATCH /api/portfolio/projects/{id} Auth Required Ownership Check

Update an existing project

Only the owner can update this resource
Request Body
PUT /api/portfolio/projects/1
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "title": "E-Commerce Platform Redesign",
    "slug": "ecommerce-platform-redesign",
    "description": "Complete redesign and development of a modern e-commerce platform serving 100K+ users",
    "long_description": "Led the complete overhaul of a legacy e-commerce platform, implementing modern design principles and cutting-edge technologies. Improved page load times by 60% and increased conversion rates by 35%. Built with React, Next.js, and integrated with Stripe for payments.",
    "category": "Web Development",
    "tags": [
        "React",
        "Next.js",
        "E-commerce",
        "UI/UX",
        "Stripe"
    ],
    "thumbnail": "https://picsum.photos/800/600?random=proj1",
    "images": [
        "https://picsum.photos/1200/800?random=proj1a",
        "https://picsum.photos/1200/800?random=proj1b",
        "https://picsum.photos/1200/800?random=proj1c"
    ],
    "demo_url": "https://demo-ecommerce.example.com",
    "github_url": "https://github.com/alexmitchell/ecommerce-platform",
    "technologies": [
        "React",
        "Next.js",
        "TypeScript",
        "Tailwind CSS",
        "Node.js",
        "PostgreSQL",
        "Stripe",
        "AWS"
    ],
    "client": "TechRetail Inc.",
    "duration": "6 months",
    "is_featured": true,
    "views": 2456,
    "likes": 189,
    "completed_at": "2024-01-15"
}
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "title": "E-Commerce Platform Redesign",
    "slug": "ecommerce-platform-redesign",
    "description": "Complete redesign and development of a modern e-commerce platform serving 100K+ users",
    "long_description": "Led the complete overhaul of a legacy e-commerce platform, implementing modern design principles and cutting-edge technologies. Improved page load times by 60% and increased conversion rates by 35%. Built with React, Next.js, and integrated with Stripe for payments.",
    "category": "Web Development",
    "tags": [
        "React",
        "Next.js",
        "E-commerce",
        "UI/UX",
        "Stripe"
    ],
    "thumbnail": "https://picsum.photos/800/600?random=proj1",
    "images": [
        "https://picsum.photos/1200/800?random=proj1a",
        "https://picsum.photos/1200/800?random=proj1b",
        "https://picsum.photos/1200/800?random=proj1c"
    ],
    "demo_url": "https://demo-ecommerce.example.com",
    "github_url": "https://github.com/alexmitchell/ecommerce-platform",
    "technologies": [
        "React",
        "Next.js",
        "TypeScript",
        "Tailwind CSS",
        "Node.js",
        "PostgreSQL",
        "Stripe",
        "AWS"
    ],
    "client": "TechRetail Inc.",
    "duration": "6 months",
    "is_featured": true,
    "views": 2456,
    "likes": 189,
    "completed_at": "2024-01-15"
}
DELETE /api/portfolio/projects/{id} Auth Required Ownership Check

Delete a project by ID

Only the owner can delete this resource
Request Example
DELETE /api/portfolio/projects/1
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Response Example 200 OK
{
  "message": "Project deleted successfully"
}
Error Response 500 Error
{
  "error": "Deletion failed",
  "message": "Unable to delete the resource"
}

Skills

Technical and soft skills

GET /api/portfolio/skills Public

Retrieve a paginated list of all skills

Request Example
GET /api/portfolio/skills
Accept: application/json
Response Example 200 OK
{
  "data": [
    {
        "user_id": 1,
        "user_name": "Alexandra Mitchell",
        "name": "React",
        "category": "Frontend",
        "proficiency": 95,
        "years_experience": 6,
        "icon": "\u269b\ufe0f"
    },
    ...
  ],
  "meta": {
    "current_page": 1,
    "total": 50,
    "per_page": 15
  }
}
GET /api/portfolio/skills/{id} Public

Retrieve a single skill by ID

Request Example
GET /api/portfolio/skills/1
Accept: application/json
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "name": "React",
    "category": "Frontend",
    "proficiency": 95,
    "years_experience": 6,
    "icon": "\u269b\ufe0f"
}
Error Response 404 Not Found
{
  "error": "Resource not found",
  "message": "The requested skill does not exist"
}
POST /api/portfolio/skills Auth Required Auto User ID

Create a new skill

Request Body
POST /api/portfolio/skills
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "name": "React",
    "category": "Frontend",
    "proficiency": 95,
    "years_experience": 6,
    "icon": "\u269b\ufe0f"
}
Response Example 201 Created
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "name": "React",
    "category": "Frontend",
    "proficiency": 95,
    "years_experience": 6,
    "icon": "\u269b\ufe0f"
}
PUT/PATCH /api/portfolio/skills/{id} Auth Required Ownership Check

Update an existing skill

Only the owner can update this resource
Request Body
PUT /api/portfolio/skills/1
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "name": "React",
    "category": "Frontend",
    "proficiency": 95,
    "years_experience": 6,
    "icon": "\u269b\ufe0f"
}
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "name": "React",
    "category": "Frontend",
    "proficiency": 95,
    "years_experience": 6,
    "icon": "\u269b\ufe0f"
}
DELETE /api/portfolio/skills/{id} Auth Required Ownership Check

Delete a skill by ID

Only the owner can delete this resource
Request Example
DELETE /api/portfolio/skills/1
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Response Example 200 OK
{
  "message": "Skill deleted successfully"
}
Error Response 500 Error
{
  "error": "Deletion failed",
  "message": "Unable to delete the resource"
}

Testimonials

Client testimonials and reviews

GET /api/portfolio/testimonials Public

Retrieve a paginated list of all testimonials

Request Example
GET /api/portfolio/testimonials
Accept: application/json
Response Example 200 OK
{
  "data": [
    {
        "user_id": 1,
        "user_name": "Alexandra Mitchell",
        "client_name": "Sarah Johnson",
        "client_position": "CEO",
        "client_company": "TechRetail Inc.",
        "client_avatar": "https://i.pravatar.cc/150?img=25",
        "rating": 5,
        "content": "Alexandra exceeded all our expectations. Her technical expertise and attention to detail transformed our e-commerce platform. Sales increased by 40% within the first month of launch. Highly recommended!",
        "project_name": "E-Commerce Platform Redesign",
        "created_at": "2024-01-20T10:30:00Z"
    },
    ...
  ],
  "meta": {
    "current_page": 1,
    "total": 50,
    "per_page": 15
  }
}
GET /api/portfolio/testimonials/{id} Public

Retrieve a single testimonial by ID

Request Example
GET /api/portfolio/testimonials/1
Accept: application/json
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "client_name": "Sarah Johnson",
    "client_position": "CEO",
    "client_company": "TechRetail Inc.",
    "client_avatar": "https://i.pravatar.cc/150?img=25",
    "rating": 5,
    "content": "Alexandra exceeded all our expectations. Her technical expertise and attention to detail transformed our e-commerce platform. Sales increased by 40% within the first month of launch. Highly recommended!",
    "project_name": "E-Commerce Platform Redesign",
    "created_at": "2024-01-20T10:30:00Z"
}
Error Response 404 Not Found
{
  "error": "Resource not found",
  "message": "The requested testimonial does not exist"
}
POST /api/portfolio/testimonials Auth Required

Create a new testimonial

Request Body
POST /api/portfolio/testimonials
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "client_name": "Sarah Johnson",
    "client_position": "CEO",
    "client_company": "TechRetail Inc.",
    "client_avatar": "https://i.pravatar.cc/150?img=25",
    "rating": 5,
    "content": "Alexandra exceeded all our expectations. Her technical expertise and attention to detail transformed our e-commerce platform. Sales increased by 40% within the first month of launch. Highly recommended!",
    "project_name": "E-Commerce Platform Redesign"
}
Response Example 201 Created
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "client_name": "Sarah Johnson",
    "client_position": "CEO",
    "client_company": "TechRetail Inc.",
    "client_avatar": "https://i.pravatar.cc/150?img=25",
    "rating": 5,
    "content": "Alexandra exceeded all our expectations. Her technical expertise and attention to detail transformed our e-commerce platform. Sales increased by 40% within the first month of launch. Highly recommended!",
    "project_name": "E-Commerce Platform Redesign",
    "created_at": "2024-01-20T10:30:00Z"
}
PUT/PATCH /api/portfolio/testimonials/{id} Public

Update an existing testimonial

Request Body
PUT /api/portfolio/testimonials/1
Content-Type: application/json

{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "client_name": "Sarah Johnson",
    "client_position": "CEO",
    "client_company": "TechRetail Inc.",
    "client_avatar": "https://i.pravatar.cc/150?img=25",
    "rating": 5,
    "content": "Alexandra exceeded all our expectations. Her technical expertise and attention to detail transformed our e-commerce platform. Sales increased by 40% within the first month of launch. Highly recommended!",
    "project_name": "E-Commerce Platform Redesign"
}
Response Example 200 OK
{
    "user_id": 1,
    "user_name": "Alexandra Mitchell",
    "client_name": "Sarah Johnson",
    "client_position": "CEO",
    "client_company": "TechRetail Inc.",
    "client_avatar": "https://i.pravatar.cc/150?img=25",
    "rating": 5,
    "content": "Alexandra exceeded all our expectations. Her technical expertise and attention to detail transformed our e-commerce platform. Sales increased by 40% within the first month of launch. Highly recommended!",
    "project_name": "E-Commerce Platform Redesign",
    "created_at": "2024-01-20T10:30:00Z"
}
DELETE /api/portfolio/testimonials/{id} Auth Required Ownership Check

Delete a testimonial by ID

Only the owner can delete this resource
Request Example
DELETE /api/portfolio/testimonials/1
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Response Example 200 OK
{
  "message": "Testimonial deleted successfully"
}
Error Response 500 Error
{
  "error": "Deletion failed",
  "message": "Unable to delete the resource"
}

Users

Portfolio owners and their information

GET /api/portfolio/users Public

Retrieve a paginated list of all users

Request Example
GET /api/portfolio/users
Accept: application/json
Response Example 200 OK
{
  "data": [
    {
        "name": "Alexandra Mitchell",
        "title": "Senior Full-Stack Developer & UI/UX Designer",
        "bio": "Passionate full-stack developer with 8+ years of experience building scalable web applications. Specialized in React, Node.js, and cloud architecture. I love creating beautiful, user-centric digital experiences that solve real-world problems.",
        "email": "alex.mitchell@portfolio.dev",
        "password": "$2y$12$PW3rNnqVBS2c2eUvaxfMqOHKgzq4QrYDfVmd83VpLRLpNbkA7NjDC",
        "api_token": "950937955711872fcdd9d7c7408e310689f40bb5fd669a0526599325c9d4da94",
        "phone": "+1 (555) 123-4567",
        "location": "San Francisco, CA, USA",
        "avatar": "https://i.pravatar.cc/400?img=45",
        "cover_image": "https://picsum.photos/1920/400?random=cover1",
        "resume_url": "https://example.com/resume/alexandra-mitchell.pdf",
        "years_experience": 8,
        "projects_completed": 47,
        "clients_served": 23,
        "social_links": {
            "github": "https://github.com/alexmitchell",
            "linkedin": "https://linkedin.com/in/alexandra-mitchell",
            "twitter": "https://twitter.com/alex_codes",
            "dribbble": "https://dribbble.com/alexmitchell"
        },
        "availability": "Available for freelance"
    },
    ...
  ],
  "meta": {
    "current_page": 1,
    "total": 50,
    "per_page": 15
  }
}
GET /api/portfolio/users/{id} Public

Retrieve a single user by ID

Request Example
GET /api/portfolio/users/1
Accept: application/json
Response Example 200 OK
{
    "name": "Alexandra Mitchell",
    "title": "Senior Full-Stack Developer & UI/UX Designer",
    "bio": "Passionate full-stack developer with 8+ years of experience building scalable web applications. Specialized in React, Node.js, and cloud architecture. I love creating beautiful, user-centric digital experiences that solve real-world problems.",
    "email": "alex.mitchell@portfolio.dev",
    "password": "$2y$12$PW3rNnqVBS2c2eUvaxfMqOHKgzq4QrYDfVmd83VpLRLpNbkA7NjDC",
    "api_token": "950937955711872fcdd9d7c7408e310689f40bb5fd669a0526599325c9d4da94",
    "phone": "+1 (555) 123-4567",
    "location": "San Francisco, CA, USA",
    "avatar": "https://i.pravatar.cc/400?img=45",
    "cover_image": "https://picsum.photos/1920/400?random=cover1",
    "resume_url": "https://example.com/resume/alexandra-mitchell.pdf",
    "years_experience": 8,
    "projects_completed": 47,
    "clients_served": 23,
    "social_links": {
        "github": "https://github.com/alexmitchell",
        "linkedin": "https://linkedin.com/in/alexandra-mitchell",
        "twitter": "https://twitter.com/alex_codes",
        "dribbble": "https://dribbble.com/alexmitchell"
    },
    "availability": "Available for freelance"
}
Error Response 404 Not Found
{
  "error": "Resource not found",
  "message": "The requested user does not exist"
}
POST /api/portfolio/users Public

Create a new user

Request Body
POST /api/portfolio/users
Content-Type: application/json

{
    "name": "Alexandra Mitchell",
    "title": "Senior Full-Stack Developer & UI/UX Designer",
    "bio": "Passionate full-stack developer with 8+ years of experience building scalable web applications. Specialized in React, Node.js, and cloud architecture. I love creating beautiful, user-centric digital experiences that solve real-world problems.",
    "email": "alex.mitchell@portfolio.dev",
    "password": "$2y$12$PW3rNnqVBS2c2eUvaxfMqOHKgzq4QrYDfVmd83VpLRLpNbkA7NjDC",
    "api_token": "950937955711872fcdd9d7c7408e310689f40bb5fd669a0526599325c9d4da94",
    "phone": "+1 (555) 123-4567",
    "location": "San Francisco, CA, USA",
    "avatar": "https://i.pravatar.cc/400?img=45",
    "cover_image": "https://picsum.photos/1920/400?random=cover1",
    "resume_url": "https://example.com/resume/alexandra-mitchell.pdf",
    "years_experience": 8,
    "projects_completed": 47,
    "clients_served": 23,
    "social_links": {
        "github": "https://github.com/alexmitchell",
        "linkedin": "https://linkedin.com/in/alexandra-mitchell",
        "twitter": "https://twitter.com/alex_codes",
        "dribbble": "https://dribbble.com/alexmitchell"
    },
    "availability": "Available for freelance"
}
Response Example 201 Created
{
    "name": "Alexandra Mitchell",
    "title": "Senior Full-Stack Developer & UI/UX Designer",
    "bio": "Passionate full-stack developer with 8+ years of experience building scalable web applications. Specialized in React, Node.js, and cloud architecture. I love creating beautiful, user-centric digital experiences that solve real-world problems.",
    "email": "alex.mitchell@portfolio.dev",
    "password": "$2y$12$PW3rNnqVBS2c2eUvaxfMqOHKgzq4QrYDfVmd83VpLRLpNbkA7NjDC",
    "api_token": "950937955711872fcdd9d7c7408e310689f40bb5fd669a0526599325c9d4da94",
    "phone": "+1 (555) 123-4567",
    "location": "San Francisco, CA, USA",
    "avatar": "https://i.pravatar.cc/400?img=45",
    "cover_image": "https://picsum.photos/1920/400?random=cover1",
    "resume_url": "https://example.com/resume/alexandra-mitchell.pdf",
    "years_experience": 8,
    "projects_completed": 47,
    "clients_served": 23,
    "social_links": {
        "github": "https://github.com/alexmitchell",
        "linkedin": "https://linkedin.com/in/alexandra-mitchell",
        "twitter": "https://twitter.com/alex_codes",
        "dribbble": "https://dribbble.com/alexmitchell"
    },
    "availability": "Available for freelance"
}
PUT/PATCH /api/portfolio/users/{id} Auth Required Ownership Check

Update an existing user

Only the owner can update this resource
Request Body
PUT /api/portfolio/users/1
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{
    "name": "Alexandra Mitchell",
    "title": "Senior Full-Stack Developer & UI/UX Designer",
    "bio": "Passionate full-stack developer with 8+ years of experience building scalable web applications. Specialized in React, Node.js, and cloud architecture. I love creating beautiful, user-centric digital experiences that solve real-world problems.",
    "email": "alex.mitchell@portfolio.dev",
    "password": "$2y$12$PW3rNnqVBS2c2eUvaxfMqOHKgzq4QrYDfVmd83VpLRLpNbkA7NjDC",
    "api_token": "950937955711872fcdd9d7c7408e310689f40bb5fd669a0526599325c9d4da94",
    "phone": "+1 (555) 123-4567",
    "location": "San Francisco, CA, USA",
    "avatar": "https://i.pravatar.cc/400?img=45",
    "cover_image": "https://picsum.photos/1920/400?random=cover1",
    "resume_url": "https://example.com/resume/alexandra-mitchell.pdf",
    "years_experience": 8,
    "projects_completed": 47,
    "clients_served": 23,
    "social_links": {
        "github": "https://github.com/alexmitchell",
        "linkedin": "https://linkedin.com/in/alexandra-mitchell",
        "twitter": "https://twitter.com/alex_codes",
        "dribbble": "https://dribbble.com/alexmitchell"
    },
    "availability": "Available for freelance"
}
Response Example 200 OK
{
    "name": "Alexandra Mitchell",
    "title": "Senior Full-Stack Developer & UI/UX Designer",
    "bio": "Passionate full-stack developer with 8+ years of experience building scalable web applications. Specialized in React, Node.js, and cloud architecture. I love creating beautiful, user-centric digital experiences that solve real-world problems.",
    "email": "alex.mitchell@portfolio.dev",
    "password": "$2y$12$PW3rNnqVBS2c2eUvaxfMqOHKgzq4QrYDfVmd83VpLRLpNbkA7NjDC",
    "api_token": "950937955711872fcdd9d7c7408e310689f40bb5fd669a0526599325c9d4da94",
    "phone": "+1 (555) 123-4567",
    "location": "San Francisco, CA, USA",
    "avatar": "https://i.pravatar.cc/400?img=45",
    "cover_image": "https://picsum.photos/1920/400?random=cover1",
    "resume_url": "https://example.com/resume/alexandra-mitchell.pdf",
    "years_experience": 8,
    "projects_completed": 47,
    "clients_served": 23,
    "social_links": {
        "github": "https://github.com/alexmitchell",
        "linkedin": "https://linkedin.com/in/alexandra-mitchell",
        "twitter": "https://twitter.com/alex_codes",
        "dribbble": "https://dribbble.com/alexmitchell"
    },
    "availability": "Available for freelance"
}
DELETE /api/portfolio/users/{id} Auth Required Ownership Check

Delete a user by ID

Only the owner can delete this resource
Request Example
DELETE /api/portfolio/users/1
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Response Example 200 OK
{
  "message": "User deleted successfully"
}
Error Response 500 Error
{
  "error": "Deletion failed",
  "message": "Unable to delete the resource"
}