Public API Reference
The Nukleio public API lets connected portfolio websites request public portfolio data for an authenticated Nukleio user. This page documents the exact behavior of the public API.
Request Shape
The public endpoint for retrieving your nukleio portfolio data is:
https://www.nukleio.com/api/public/getUserDataYour integration should send the API key as a bearer token:
Authorization: Bearer YOUR_API_KEYBelow are some common languages and frameworks querying from the Nukleio public API:
fetch
const response = await fetch("https://www.nukleio.com/api/public/getUserData", {
headers: {
Authorization: "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data);Successful Response
A successful response returns JSON with a userInfo property.
{
"userInfo": {
"id": "string",
"name": "string | null",
"phone_number": "string | null",
"email": "string",
"location": "string | null",
"current_address": "string | null",
"current_company": "string | null",
"current_position": "string | null",
"github_url": "string | null",
"linkedin_url": "string | null",
"instagram_url": "string | null",
"facebook_url": "string | null",
"x_url": "string | null",
"portrait_url": "string | null",
"resume_url": "string | null",
"transcript_url": "string | null",
"bio": "string | null",
"skills": [
{
"id": "string",
"name": "string",
"proficiency": "number | null",
"years_of_experience": "number | null"
}
],
"experiences": [
{
"id": "string",
"company": "string",
"job_title": "string",
"date_start": "string | null",
"date_end": "string | null",
"job_description": "string | null"
}
],
"projects": [
{
"id": "string",
"name": "string",
"date_start": "string",
"date_end": "string",
"languages_used": ["string"],
"frameworks_used": ["string"],
"technologies_used": ["string"],
"description": "string",
"github_url": "string | null",
"demo_url": "string | null",
"thumbnail_url": "string | null"
}
],
"education": [
{
"id": "string",
"degree": "string",
"majors": ["string"],
"minors": ["string"],
"gpa": "number | string | null",
"institution": "string",
"awards": ["string"],
"year_start": "integer | null",
"year_end": "integer | null",
"courses": [
{
"id": "string",
"name": "string",
"grade": "string",
"description": "string"
}
]
}
],
"subscription": {
"status": "string",
"price_id": "string"
}
}
}The exact fields inside userInfo depend on the content saved in Nukleio and the public data shape configured for the account. Portfolio frontends should handle optional or missing fields gracefully. For example, do not assume every user has a transcript, every project has a demo URL, or every social link is present.
Error Responses
Missing API Key
If the request does not include a bearer token, the API returns an unauthorized response.
{
"message": "Unauthorized"
}Invalid API Key Format
If the key format is invalid, the API can return:
{
"message": "Invalid API key format"
}Unauthorized Key
If the key is not recognized or is not allowed to access the requested data, the API returns:
{
"message": "Unauthorized"
}Server Error
If Nukleio cannot complete the request because of an internal issue, the API returns:
{
"message": "Internal server error"
}Status Codes
| Status | Meaning |
|---|---|
200 | Request succeeded and returned portfolio data. |
204 | CORS preflight request succeeded. |
401 | Missing, invalid, or unauthorized API key. |
500 | Nukleio could not complete the request. |
CORS
The public endpoint supports browser-based portfolio integrations and responds to OPTIONS preflight requests.
Allowed request methods include:
GET, OPTIONSAllowed request headers include:
Authorization, User-Email, Content-Type, Accept, X-Target-User-IdIntegration Notes
When building a portfolio integration:
- send the API key as a bearer token
- handle
401responses by checking the key value and request header - handle missing optional fields in the UI
- avoid assuming every array has items
- decide whether your portfolio should fetch fresh data on every request or cache it
- rotate keys if they are exposed in a public repository