Overview
The Renderer API provides public endpoints for fetching portfolio data. These endpoints are used to display user portfolios without authentication.
Renderer endpoints are public and do NOT require authentication.
Get User Portfolio Data
Fetch complete portfolio data for a user by their username.
GET /api/v1/renderer/:username
Path Parameters
The unique username of the portfolio to fetch
Response
true if user found, false otherwise
Human-readable status message
Complete portfolio data objectShow Portfolio data properties
Short headline or tagline
Social media links (Twitter, LinkedIn, etc.)
Currently active template ID
Array of repository objectsShow Repository properties
Programming languages with percentages
Whether to display on portfolio
Array of education objectsShow Education properties
Degree or certification title
School or institution name
End date (null if ongoing)
Array of work experience objectsShow Experience properties
End date (null if current)
Array of purchased template objects
Example Request
curl -X GET https://api.gitfolio.in/api/v1/renderer/johndoe
Success Response
Status: 200 OK
{
"status": true,
"message": "Data fetched",
"data": {
"id": "user_123",
"username": "johndoe",
"firstname": "John",
"lastname": "Doe",
"email": "[email protected]",
"profileImg": "https://example.com/avatar.jpg",
"bio": "Full-stack developer passionate about open source",
"tagline": "Building the future, one commit at a time",
"location": "San Francisco, CA",
"website": "https://johndoe.dev",
"githubLink": "https://github.com/johndoe",
"followers": 250,
"following": 100,
"socialAccounts": {
"twitter": "https://twitter.com/johndoe",
"linkedin": "https://linkedin.com/in/johndoe"
},
"skills": ["JavaScript", "TypeScript", "React", "Node.js"],
"accountType": "PREMIUM",
"activeTemplateId": "template_789",
"repos": [
{
"id": "repo_456",
"name": "awesome-project",
"description": "An awesome open source project",
"topics": ["javascript", "react"],
"languages": {"JavaScript": 80, "CSS": 20},
"stars": 150,
"forks": 25,
"repoLink": "https://github.com/johndoe/awesome-project",
"liveLink": "https://awesome-project.com",
"thumbnail": "https://example.com/project.png",
"isPinned": true,
"isIncluded": true
}
],
"educations": [
{
"id": "edu_123",
"title": "BS in Computer Science",
"institution": "Stanford University",
"description": "Focus on AI and software engineering",
"logo": "https://example.com/stanford.png",
"start_date": "2018-09",
"end_date": "2022-06"
}
],
"experiences": [
{
"id": "exp_789",
"company": "Tech Corp",
"role": "Senior Software Engineer",
"description": "Led microservices development",
"logo": "https://example.com/techcorp.png",
"start_date": "2022-07",
"end_date": null
}
],
"purchasedTemplates": []
}
}
Error Response
Status: 404 Not Found
{
"status": false,
"message": "no user found"
}
Get User Image Data
Fetch image-specific data for a user’s portfolio. This endpoint returns optimized data for generating portfolio preview images or social media cards.
GET /api/v1/renderer/image/:username
Path Parameters
The unique username of the portfolio
Response
true if user found, false otherwise
Human-readable status message
Image-optimized portfolio dataShow Image data properties
Top skills (limited for display)
Example Request
curl -X GET https://api.gitfolio.in/api/v1/renderer/image/johndoe
Success Response
Status: 200 OK
{
"status": true,
"message": "Data fetched",
"data": {
"username": "johndoe",
"firstname": "John",
"lastname": "Doe",
"profileImg": "https://example.com/avatar.jpg",
"tagline": "Building the future, one commit at a time",
"bio": "Full-stack developer passionate about open source",
"skills": ["JavaScript", "TypeScript", "React"],
"activeTemplateId": "template_789"
}
}
Error Response
Status: 404 Not Found
{
"status": false,
"message": "no user found"
}
Use Cases
Portfolio Display
The main renderer endpoint (/renderer/:username) is used to fetch all data needed to display a user’s portfolio:
async function loadPortfolio(username) {
const response = await fetch(`https://api.gitfolio.in/api/v1/renderer/${username}`);
const { status, data } = await response.json();
if (status) {
// Render portfolio with data
renderPortfolio(data);
} else {
// Show 404 page
show404();
}
}
The image endpoint (/renderer/image/:username) provides optimized data for generating Open Graph images and Twitter cards:
async function generateSocialCard(username) {
const response = await fetch(
`https://api.gitfolio.in/api/v1/renderer/image/${username}`
);
const { status, data } = await response.json();
if (status) {
return {
title: `${data.firstname} ${data.lastname} - Portfolio`,
description: data.tagline,
image: data.profileImg,
skills: data.skills.join(', ')
};
}
}
Portfolio Preview
Fetch minimal data for portfolio previews or listings:
async function getPortfolioPreview(username) {
const response = await fetch(
`https://api.gitfolio.in/api/v1/renderer/image/${username}`
);
const { data } = await response.json();
return {
name: `${data.firstname} ${data.lastname}`,
avatar: data.profileImg,
tagline: data.tagline,
url: `https://gitfolio.in/${username}`
};
}
Portfolio data changes infrequently. Consider caching responses:
- Use HTTP caching headers (Cache-Control, ETag)
- Implement client-side caching for 5-10 minutes
- Use CDN caching for static portfolio data
The full portfolio endpoint can return large responses. For better performance:
- Use the
/image/:username endpoint when you only need basic info
- Implement lazy loading for repositories and experiences
- Consider pagination for users with many repos
Always handle 404 responses gracefully:
- Show a friendly “Portfolio not found” page
- Suggest correct username if similar ones exist
- Provide a link to create a portfolio
Privacy & Visibility
All data returned by renderer endpoints is:
- Publicly accessible - No authentication required
- User-controlled - Users choose what to include via
isIncluded flags
- Searchable - Can be indexed by search engines
Users control visibility through:
- Repository
isIncluded field (hide specific repos)
- Template settings (some templates hide certain sections)
- Account settings (future: private portfolios)