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 Projects API manages the portfolio projects shown to visitors. Authenticated users can create, edit, and delete their own projects, attach PDF evidence files, and tag projects with technology labels. The technology list endpoint is public — no token is needed. All authenticated requests must include Authorization: Bearer <token> obtained from POST /api/usuario/login.

GET /api/proyecto/gestion-proyectos/tecnologias/lista

Return the full list of available technology tags that can be associated with a project. No authentication is required. Use the id_tecnologia values returned here when creating or updating a project.

Responses

Returns a JSON array of technology objects.
id_tecnologia
string
Unique identifier for the technology. Pass this in the tecnologias array when creating or updating a project.
nombre
string
Human-readable technology name, e.g. "React", "Laravel", "PostgreSQL".
categoria
string
The skill category grouping this technology belongs to (may be null).
StatusMeaning
200Array of technology tags returned.

Example Request

curl https://api.goatportfolio.com/api/proyecto/gestion-proyectos/tecnologias/lista \
  -H "Accept: application/json"

Example Response

[
  { "id_tecnologia": "01HTEC001", "nombre": "React", "categoria": "Desarrollo Web Frontend" },
  { "id_tecnologia": "01HTEC002", "nombre": "Laravel", "categoria": "Desarrollo Web Backend" },
  { "id_tecnologia": "01HTEC003", "nombre": "PostgreSQL", "categoria": "Bases de Datos" }
]

GET /api/proyecto/gestion-proyectos/:id_portafolio

List all projects belonging to the specified portfolio. Supports optional keyword search by project name. Authentication required — include Authorization: Bearer <token>.

Path Parameters

id_portafolio
string
required
The portfolio ID to retrieve projects for. Obtain this from the login response (id_portafolio) or from GET /api/portafolio/completo.

Query Parameters

buscar
string
Optional keyword to filter projects by name. If omitted, all projects are returned.

Responses

Returns a JSON array of project objects.
id_proyecto
string
Unique project identifier.
nombre
string
Project name.
descripcion
string
Project description (may be null).
url_proyecto
string
Repository or project URL (may be null).
imagen_url
string
Cover image URL (may be null).
fecha_ini
string
Start date in YYYY-MM-DD format.
fecha_fin
string
End date in YYYY-MM-DD format, or null if ongoing.
tecnologias
array
Array of technology objects { id_tecnologia, nombre } tagged to this project.
evidencias
array
Array of attached evidence files (e.g. uploaded PDFs). See the evidence upload endpoint for the object shape.
StatusMeaning
200Array of project objects returned.
401Unauthorized — missing or invalid token.

POST /api/proyecto/gestion-proyectos

Create a new project and associate it with the authenticated user’s portfolio. Authentication required — include Authorization: Bearer <token>.

Request Body

id_portafolio
string
required
ID of the portfolio to which this project belongs.
nombre
string
required
Project title.
descripcion
string
A text description of the project. Send null to leave blank.
url_proyecto
string
GitHub repository or live project URL. Send null if not applicable.
imagen_url
string
URL of a cover image for the project card. Send null to use the placeholder.
fecha_ini
string
required
Project start date in YYYY-MM-DD format.
fecha_fin
string
Project end date in YYYY-MM-DD format. Send null if the project is still ongoing.
tecnologias
string[]
Array of id_tecnologia strings referencing technologies used in the project. Obtain valid IDs from GET /api/proyecto/gestion-proyectos/tecnologias/lista. Send an empty array [] if none apply.

Responses

data
object
The newly created project object, including its server-assigned id_proyecto.
StatusMeaning
201Project created successfully.
401Unauthorized — missing or invalid token.
422Validation error — check required fields.

Example Request

curl -X POST https://api.goatportfolio.com/api/proyecto/gestion-proyectos \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." \
  -d '{
    "id_portafolio": "01HXYZ987654321",
    "nombre": "E-Commerce Platform",
    "descripcion": "A full-stack online store built with React and Laravel.",
    "url_proyecto": "https://github.com/mariagonzalez/ecommerce",
    "imagen_url": null,
    "fecha_ini": "2023-03-01",
    "fecha_fin": "2023-09-30",
    "tecnologias": ["01HTEC001", "01HTEC002"]
  }'

Example Response

{
  "data": {
    "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": null,
    "fecha_ini": "2023-03-01",
    "fecha_fin": "2023-09-30",
    "tecnologias": [
      { "id_tecnologia": "01HTEC001", "nombre": "React" },
      { "id_tecnologia": "01HTEC002", "nombre": "Laravel" }
    ]
  }
}

PUT /api/proyecto/gestion-proyectos/:id_proyecto

Update an existing project. The request body is identical to the POST create endpoint — all fields should be provided even if unchanged (full replacement). Authentication required — include Authorization: Bearer <token>.

Path Parameters

id_proyecto
string
required
The unique identifier of the project to update.

Request Body

Same fields as POST /api/proyecto/gestion-proyectos — provide the complete updated project payload.

Responses

data
object
The updated project object.
StatusMeaning
200Project updated successfully.
401Unauthorized — missing or invalid token.
404Project not found.
422Validation error.

Example Request

curl -X PUT https://api.goatportfolio.com/api/proyecto/gestion-proyectos/01HPROY001 \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." \
  -d '{
    "id_portafolio": "01HXYZ987654321",
    "nombre": "E-Commerce Platform v2",
    "descripcion": "Rebuilt with Next.js and a REST API backend.",
    "url_proyecto": "https://github.com/mariagonzalez/ecommerce-v2",
    "imagen_url": "https://cdn.goatportfolio.com/projects/ecommerce-v2.png",
    "fecha_ini": "2023-03-01",
    "fecha_fin": null,
    "tecnologias": ["01HTEC001", "01HTEC003"]
  }'

DELETE /api/proyecto/gestion-proyectos/:id_proyecto

Permanently delete a project and all its associated evidence files from the portfolio. Authentication required — include Authorization: Bearer <token>.

Path Parameters

id_proyecto
string
required
The unique identifier of the project to delete.

Responses

message
string
Confirmation message that the project was deleted.
StatusMeaning
200Project deleted successfully.
401Unauthorized — missing or invalid token.
404Project not found.

Example Request

curl -X DELETE https://api.goatportfolio.com/api/proyecto/gestion-proyectos/01HPROY001 \
  -H "Accept: application/json" \
  -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."

Example Response

{
  "message": "Project deleted successfully."
}

POST /api/proyecto/evidencias/subir

Upload a PDF evidence file and attach it to a project. This is used to provide supporting documentation such as certificates, client sign-offs, or academic reports. Authentication required — include Authorization: Bearer <token>.

Request

Content-Type: multipart/form-data
id_proyecto
string
required
The ID of the project this evidence belongs to.
archivo
file
required
The PDF file to upload. Must be a valid PDF document.

Responses

id_evidencia
string
Unique identifier for the uploaded evidence record.
tipo
string
File type indicator — typically "pdf".
url_evidencia
string
Public URL where the uploaded file can be accessed or downloaded.
nombre_archivo
string
Original filename of the uploaded file.
foto_url
string
URL of a generated image preview for the file, if applicable (may be null).
tamano_bytes
integer
File size in bytes (may be null).
fecha_subida
string
ISO 8601 timestamp of when the file was uploaded (may be null).
StatusMeaning
200File uploaded and evidence record created.
401Unauthorized — missing or invalid token.
422Validation error — file missing or incorrect format.

Example Request

curl -X POST https://api.goatportfolio.com/api/proyecto/evidencias/subir \
  -H "Accept: application/json" \
  -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." \
  -F "id_proyecto=01HPROY001" \
  -F "archivo=@/path/to/certificate.pdf"

Example Response

{
  "id_evidencia": "01HEVID001",
  "tipo": "pdf",
  "url_evidencia": "https://cdn.goatportfolio.com/evidencias/certificate.pdf",
  "nombre_archivo": "certificate.pdf",
  "foto_url": null,
  "tamano_bytes": 204800,
  "fecha_subida": "2024-06-15T10:30:00Z"
}

Build docs developers (and LLMs) love