Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/giangartun/Tis-GOAT-Frontend/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The Portfolio API exposes endpoints for reading and managing a user’s portfolio. Public discovery endpoints require no authentication. All other endpoints require a valid JWT issued by POST /api/usuario/login sent as an Authorization: Bearer <token> header.

GET /api/portafolios/publicos

List all portfolios that have been marked as publicly visible. Use this endpoint to power a discovery feed or directory of GOAT Portfolio users. No authentication is required.

Responses

Returns a JSON array. Each element represents one public portfolio card.
id_portafolio
string
Unique identifier for the portfolio.
enlace_pagi_web
string
Public web link for this portfolio (may be null if not configured).
usuario
object
Summary of the portfolio owner.
habilidades
array
Subset of visible skills for the discovery card preview.
cantidad_proyectos
integer
Total number of visible projects on this portfolio.
StatusMeaning
200Array of public portfolio card objects returned.

Example Request

curl https://api.goatportfolio.com/api/portafolios/publicos \
  -H "Accept: application/json"

Example Response

[
  {
    "id_portafolio": "01HXYZ987654321",
    "enlace_pagi_web": "https://goatportfolio.com/p/maria-gonzalez",
    "usuario": {
      "nombre": "María González",
      "profesion": "Full-Stack Developer",
      "foto": "https://cdn.goatportfolio.com/photos/maria.jpg",
      "ubicacion": "La Paz, Bolivia"
    },
    "habilidades": [
      { "nombre": "React" },
      { "nombre": "Laravel" },
      { "nombre": "TypeScript" }
    ],
    "cantidad_proyectos": 5
  }
]

GET /api/portafolio/completo

Retrieve the complete portfolio data for the authenticated user, including profile info, skills, work and academic experience, projects, professional networks, and the active template. This is the primary endpoint used to render the portfolio view. Authentication required — include Authorization: Bearer <token>.

Responses

usuario
object
Personal details of the authenticated user.
portafolio
object
Portfolio configuration and active template information.
redes_profesionales
array
Professional network links (LinkedIn, GitHub, etc.).
habilidades
array
All skills belonging to the portfolio.
experiencias_laborales
array
Work experience entries.
experiencias_academicas
array
Academic / education entries.
proyectos
array
Portfolio projects.
StatusMeaning
200Full portfolio data returned.
401Missing or invalid token — token removed from client storage.

Example Request

curl https://api.goatportfolio.com/api/portafolio/completo \
  -H "Accept: application/json" \
  -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."

Example Response

{
  "usuario": {
    "id_usuario": "01HXYZ123456789",
    "nombre": "María",
    "apellido_paterno": "González",
    "apellido_materno": "López",
    "email": "maria@example.com",
    "biografia": "Full-stack developer passionate about open source.",
    "foto": "https://cdn.goatportfolio.com/photos/maria.jpg",
    "fecha": null
  },
  "portafolio": {
    "id_portafolio": "01HXYZ987654321",
    "id_plantilla": "01KQR862E61WHCR4HK8PZVPF91",
    "enlace_pagi_web": "https://goatportfolio.com/p/maria-gonzalez",
    "visible": true,
    "plantilla": {
      "id_plantilla": "01KQR862E61WHCR4HK8PZVPF91",
      "nombre": "Bento"
    }
  },
  "redes_profesionales": [
    {
      "id_redes_prof": "01HREDES001",
      "nombre_red": "github",
      "url_red": "https://github.com/mariagonzalez",
      "visible": true
    }
  ],
  "habilidades": [
    { "id_habilidad": "01HHAB001", "nombre": "React", "nivel": 90, "tipo": "tecnica", "visible": true }
  ],
  "experiencias_laborales": [
    {
      "id_experiencia": "01HEXP001",
      "empresa": "Acme Corp",
      "cargo": "Frontend Developer",
      "descripcion": "Built and maintained React applications.",
      "fecha_ini": "2022-01-01",
      "fecha_fin": null,
      "visible": true
    }
  ],
  "experiencias_academicas": [
    {
      "id_experiencia_academica": "01HACAD001",
      "institucion": "Universidad Mayor de San Andrés",
      "titulo": "Ingeniería en Sistemas",
      "descripcion": "Computer science and software engineering degree.",
      "fecha_ini": "2018-02-01",
      "fecha_fin": "2022-12-01",
      "visible": true
    }
  ],
  "proyectos": [
    {
      "id_proyecto": "01HPROY001",
      "nombre": "E-Commerce Platform",
      "descripcion": "A full-stack online store built with React and Laravel.",
      "url_proyecto": "https://github.com/mariagonzalez/ecommerce",
      "imagen_url": "https://cdn.goatportfolio.com/projects/ecommerce.png",
      "tecnologias": [
        { "id_tecnologia": "01HTEC001", "nombre": "React" },
        { "id_tecnologia": "01HTEC002", "nombre": "Laravel" }
      ],
      "visible": true
    }
  ]
}

PATCH /api/portafolio/actualizar-plantilla

Update the portfolio’s active visual template. Choose from the three available layouts — Bento, Sidebar, or Editorial — by providing the template’s ID from the template catalog. Authentication required — include Authorization: Bearer <token>.

Request Body

id_plantilla
string
required
The id_plantilla of the desired template. Obtain valid IDs from GET /api/plantillas/catalogo.

Responses

message
string
Confirmation that the template was updated.
StatusMeaning
200Template updated successfully.
401Unauthorized — missing or invalid token.
422Validation error — id_plantilla not provided or not found.

Example Request

curl -X PATCH https://api.goatportfolio.com/api/portafolio/actualizar-plantilla \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." \
  -d '{ "id_plantilla": "01KQR8685VJ6E9KY278ABW3AZZ" }'

Example Response

{
  "message": "Template updated successfully."
}

Retrieve the full list of available portfolio templates. No authentication is required. The three currently supported templates are Bento, Sidebar, and Editorial.

Responses

data
array
Array of available template objects.
StatusMeaning
200Template catalog returned.

Example Request

curl https://api.goatportfolio.com/api/plantillas/catalogo \
  -H "Accept: application/json"

Example Response

{
  "data": [
    {
      "id_plantilla": "01KQR862E61WHCR4HK8PZVPF91",
      "nombre": "Bento",
      "descripcion": "A modern bento-grid layout with featured project cards and skill highlights.",
      "url_vista": "https://cdn.goatportfolio.com/templates/bento-preview.png"
    },
    {
      "id_plantilla": "01KQR8685VJ6E9KY278ABW3AZZ",
      "nombre": "Sidebar",
      "descripcion": "Two-column layout with a sticky profile sidebar and scrollable main content.",
      "url_vista": "https://cdn.goatportfolio.com/templates/sidebar-preview.png"
    },
    {
      "id_plantilla": "01KQR869F2CJPHC6446XFVSJAD",
      "nombre": "Editorial",
      "descripcion": "Magazine-style editorial layout with large typography and a full-width hero.",
      "url_vista": "https://cdn.goatportfolio.com/templates/editorial-preview.png"
    }
  ]
}

Build docs developers (and LLMs) love