Skip to Content
DocsPublic API Reference

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/getUserData

Your integration should send the API key as a bearer token:

Authorization: Bearer YOUR_API_KEY

Below 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

StatusMeaning
200Request succeeded and returned portfolio data.
204CORS preflight request succeeded.
401Missing, invalid, or unauthorized API key.
500Nukleio 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, OPTIONS

Allowed request headers include:

Authorization, User-Email, Content-Type, Accept, X-Target-User-Id

Integration Notes

When building a portfolio integration:

  • send the API key as a bearer token
  • handle 401 responses 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
Last updated on