{"openapi":"3.1.0","info":{"title":"saatwik.dev public API","version":"1.0.0","summary":"Read-only JSON access to the content of saatwik.dev.","description":"Profile, experience and projects of Saatwik Yajaman, an infrastructure and product engineer. Every endpoint is a public, unauthenticated GET. Failures return the Error schema as JSON. Pages are also available as Markdown by sending `Accept: text/markdown`. A guide for agents is at /llms.txt.\n\n## Versioning and deprecation\n\nThe version is in the URL path (/api/v1) and in the API-Version response header. Changes within a version only add: new endpoints, response fields or optional parameters. A breaking change ships as a new version under a new path. When a version is superseded it keeps working for at least 6 months after its successor is announced. Deprecation is signalled with a Deprecation header (RFC 9745), then a Sunset header (RFC 8594) once the retirement date is set, and a Link header with rel=\"successor-version\". The unversioned /api/profile, /api/experience and /api/projects paths are deprecated and redirect (308) to v1.\n\n## Rate limits\n\n60 requests per 60 seconds per client. Every response carries RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy. Past the limit the API answers 429 with a Retry-After header. The limit is enforced per server instance, so treat it as best-effort.","contact":{"name":"Saatwik Yajaman","url":"https://saatwik.dev/contact","email":"saatwik.sy@gmail.com"}},"servers":[{"url":"https://saatwik.dev/api/v1","description":"Production, version 1"}],"tags":[{"name":"profile","description":"Who Saatwik is and how to reach them."},{"name":"projects","description":"Projects and their case studies."}],"externalDocs":{"description":"Guide for agents","url":"https://saatwik.dev/llms.txt"},"paths":{"/profile":{"get":{"operationId":"getProfile","tags":["profile"],"summary":"Get the profile","description":"Returns name, tagline, location, contact email, profile links and education.","responses":{"200":{"description":"The profile.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/json":{"schema":{"type":"object","description":"The person behind the site.","required":["name","tagline","location","email","website","links","education"],"properties":{"name":{"type":"string","description":"Full name."},"tagline":{"type":"string","description":"One-sentence description of the work."},"location":{"type":"string","description":"City and state."},"email":{"type":"string","description":"Contact email address.","format":"email"},"website":{"type":"string","description":"The site's URL.","format":"uri"},"links":{"type":"object","description":"Profiles elsewhere on the web.","required":["linkedin","github","resume"],"properties":{"linkedin":{"type":"string","description":"LinkedIn profile.","format":"uri"},"github":{"type":"string","description":"GitHub profile.","format":"uri"},"resume":{"type":"string","description":"Download link for the resume.","format":"uri"}}},"education":{"type":"array","description":"Degrees, most recent first.","items":{"type":"object","required":["school","degree","place","start","end"],"properties":{"school":{"type":"string","description":"Institution."},"degree":{"type":"string","description":"Degree."},"note":{"type":"string","description":"Additional note, such as a teaching role."},"place":{"type":"string","description":"Where the institution is."},"start":{"type":"string","description":"Start month as YYYY-MM."},"end":{"type":"string","description":"End month as YYYY-MM."}}}}}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"default":{"description":"An error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/experience":{"get":{"operationId":"listExperience","tags":["profile"],"summary":"List work experience","description":"Returns work experience and leadership roles, each with accomplishments, measured results and the technologies used.","responses":{"200":{"description":"Work and leadership roles.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/json":{"schema":{"type":"object","required":["experience","leadership"],"properties":{"experience":{"type":"array","description":"Work experience, most recent first.","items":{"$ref":"#/components/schemas/Role"}},"leadership":{"type":"array","description":"Leadership roles.","items":{"$ref":"#/components/schemas/Role"}}}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"default":{"description":"An error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects":{"get":{"operationId":"listProjects","tags":["projects"],"summary":"List projects","description":"Returns the projects, optionally filtered by status or by whether they are featured. Use getProject for a project's case study.","parameters":[{"name":"status","in":"query","required":false,"description":"Only projects with this status.","schema":{"type":"string","enum":["building","shipped","archived"]}},{"name":"featured","in":"query","required":false,"description":"Only featured projects (true) or only the others (false).","schema":{"type":"boolean"}}],"responses":{"200":{"description":"The matching projects.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/json":{"schema":{"type":"object","required":["projects"],"properties":{"projects":{"type":"array","description":"Matching projects.","items":{"$ref":"#/components/schemas/ProjectSummary"}}}}}}},"400":{"description":"A query parameter has an invalid value.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/RateLimited"},"default":{"description":"An error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{slug}":{"get":{"operationId":"getProject","tags":["projects"],"summary":"Get a project","description":"Returns one project with what it does, measured results and its full case study.","parameters":[{"name":"slug","in":"path","required":true,"description":"The project's slug, from listProjects.","schema":{"type":"string","enum":["everygpu","dictate","timbre","gobble","mach","hyprlander","fluttergenerator"]}}],"responses":{"200":{"description":"The project.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/json":{"schema":{"type":"object","description":"A project with what it does, measured results and its full case study.","required":["slug","name","status","featured","kind","period","summary","stack","url","points","metrics","caseStudy"],"properties":{"slug":{"type":"string","description":"Stable identifier; use it with getProject."},"name":{"type":"string","description":"Project name."},"status":{"type":"string","enum":["building","shipped","archived"],"description":"Where the project stands."},"featured":{"type":"boolean","description":"Whether the project is featured on the home page."},"kind":{"type":"string","description":"What sort of project it is."},"period":{"type":"string","description":"When it was built; empty when not recorded."},"summary":{"type":"string","description":"One-sentence description."},"stack":{"type":"array","description":"Technologies used.","items":{"type":"string","description":"A technology."}},"liveUrl":{"type":"string","description":"A published app or demo.","format":"uri"},"repoUrl":{"type":"string","description":"The public source repository.","format":"uri"},"url":{"type":"string","description":"The project's page on the website.","format":"uri"},"points":{"type":"array","description":"What the project does.","items":{"type":"string","description":"One thing the project does."}},"metrics":{"type":"array","description":"Measured results; empty when none were recorded.","items":{"$ref":"#/components/schemas/Metric"}},"caseStudy":{"type":"array","description":"The case study, in reading order.","items":{"type":"object","required":["heading","body"],"properties":{"heading":{"type":"string","description":"Section heading."},"body":{"type":"string","description":"Section text."}}}}}}}}},"404":{"description":"No project has this slug.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/RateLimited"},"default":{"description":"An error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"headers":{"API-Version":{"description":"The API version that served the response.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"Requests allowed in the current window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota policy as limit;w=window-seconds, such as 60;w=60.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"responses":{"RateLimited":{"description":"The rate limit was exceeded. Wait Retry-After seconds.","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"Returned with every non-2xx response.","required":["error"],"properties":{"error":{"type":"object","required":["status","code","message","hint","documentation"],"properties":{"status":{"type":"integer","description":"The HTTP status code."},"code":{"type":"string","enum":["not_found","method_not_allowed","invalid_parameter","rate_limited"],"description":"A stable, machine-readable error code."},"message":{"type":"string","description":"What went wrong."},"hint":{"type":"string","description":"How to fix the request."},"documentation":{"type":"string","description":"Where the API is described.","format":"uri"}}}}},"Profile":{"type":"object","description":"The person behind the site.","required":["name","tagline","location","email","website","links","education"],"properties":{"name":{"type":"string","description":"Full name."},"tagline":{"type":"string","description":"One-sentence description of the work."},"location":{"type":"string","description":"City and state."},"email":{"type":"string","description":"Contact email address.","format":"email"},"website":{"type":"string","description":"The site's URL.","format":"uri"},"links":{"type":"object","description":"Profiles elsewhere on the web.","required":["linkedin","github","resume"],"properties":{"linkedin":{"type":"string","description":"LinkedIn profile.","format":"uri"},"github":{"type":"string","description":"GitHub profile.","format":"uri"},"resume":{"type":"string","description":"Download link for the resume.","format":"uri"}}},"education":{"type":"array","description":"Degrees, most recent first.","items":{"type":"object","required":["school","degree","place","start","end"],"properties":{"school":{"type":"string","description":"Institution."},"degree":{"type":"string","description":"Degree."},"note":{"type":"string","description":"Additional note, such as a teaching role."},"place":{"type":"string","description":"Where the institution is."},"start":{"type":"string","description":"Start month as YYYY-MM."},"end":{"type":"string","description":"End month as YYYY-MM."}}}}}},"Metric":{"type":"object","description":"A measured result, optionally with the value before it.","required":["label","after"],"properties":{"label":{"type":"string","description":"What was measured."},"before":{"type":"object","description":"A measured value.","required":["value","unit","display"],"properties":{"value":{"type":"number","description":"The numeric value."},"unit":{"type":"string","description":"Unit of the value, such as h, d, % or tok/s. Empty when the value is a plain count."},"display":{"type":"string","description":"The value as shown on the site, such as '2 hours'."}}},"after":{"type":"object","description":"A measured value.","required":["value","unit","display"],"properties":{"value":{"type":"number","description":"The numeric value."},"unit":{"type":"string","description":"Unit of the value, such as h, d, % or tok/s. Empty when the value is a plain count."},"display":{"type":"string","description":"The value as shown on the site, such as '2 hours'."}}}}},"Role":{"type":"object","description":"A work or leadership role.","required":["slug","org","title","place","start","end","points","metrics","stack"],"properties":{"slug":{"type":"string","description":"Stable identifier of the role."},"org":{"type":"string","description":"Organization name."},"title":{"type":"string","description":"Job title."},"place":{"type":"string","description":"Where the role was based."},"start":{"type":"string","description":"Start month as YYYY-MM.","pattern":"^\\d{4}-\\d{2}$"},"end":{"type":"string","description":"End month as YYYY-MM, or 'present'."},"points":{"type":"array","description":"What was accomplished.","items":{"type":"string","description":"One accomplishment."}},"metrics":{"type":"array","description":"Measured results.","items":{"$ref":"#/components/schemas/Metric"}},"stack":{"type":"array","description":"Technologies used.","items":{"type":"string","description":"A technology."}}}},"ProjectSummary":{"type":"object","description":"A project in the project list.","required":["slug","name","status","featured","kind","period","summary","stack","url"],"properties":{"slug":{"type":"string","description":"Stable identifier; use it with getProject."},"name":{"type":"string","description":"Project name."},"status":{"type":"string","enum":["building","shipped","archived"],"description":"Where the project stands."},"featured":{"type":"boolean","description":"Whether the project is featured on the home page."},"kind":{"type":"string","description":"What sort of project it is."},"period":{"type":"string","description":"When it was built; empty when not recorded."},"summary":{"type":"string","description":"One-sentence description."},"stack":{"type":"array","description":"Technologies used.","items":{"type":"string","description":"A technology."}},"liveUrl":{"type":"string","description":"A published app or demo.","format":"uri"},"repoUrl":{"type":"string","description":"The public source repository.","format":"uri"},"url":{"type":"string","description":"The project's page on the website.","format":"uri"}}},"Project":{"type":"object","description":"A project with what it does, measured results and its full case study.","required":["slug","name","status","featured","kind","period","summary","stack","url","points","metrics","caseStudy"],"properties":{"slug":{"type":"string","description":"Stable identifier; use it with getProject."},"name":{"type":"string","description":"Project name."},"status":{"type":"string","enum":["building","shipped","archived"],"description":"Where the project stands."},"featured":{"type":"boolean","description":"Whether the project is featured on the home page."},"kind":{"type":"string","description":"What sort of project it is."},"period":{"type":"string","description":"When it was built; empty when not recorded."},"summary":{"type":"string","description":"One-sentence description."},"stack":{"type":"array","description":"Technologies used.","items":{"type":"string","description":"A technology."}},"liveUrl":{"type":"string","description":"A published app or demo.","format":"uri"},"repoUrl":{"type":"string","description":"The public source repository.","format":"uri"},"url":{"type":"string","description":"The project's page on the website.","format":"uri"},"points":{"type":"array","description":"What the project does.","items":{"type":"string","description":"One thing the project does."}},"metrics":{"type":"array","description":"Measured results; empty when none were recorded.","items":{"$ref":"#/components/schemas/Metric"}},"caseStudy":{"type":"array","description":"The case study, in reading order.","items":{"type":"object","required":["heading","body"],"properties":{"heading":{"type":"string","description":"Section heading."},"body":{"type":"string","description":"Section text."}}}}}}}}}