{"openapi":"3.1.0","info":{"title":"Roee Sivan Portfolio API","version":"1.0.0","summary":"Read-only JSON access to the projects and profile shown on this site.","description":"A public, unauthenticated API for AI agents and integrations. No write operations, no rate limit beyond ordinary CDN fair use, CORS open to all origins. The version is in the path. Fields are added within a version but never removed or retyped, so a client that ignores unknown keys keeps working; a breaking change gets a new path instead. A retired version answers with Deprecation (RFC 9745) and Sunset (RFC 8594) headers for at least six months before it is switched off. No version has been deprecated so far.","contact":{"name":"Roee Sivan","email":"roeesivan39@gmail.com","url":"https://roeesivan.com/contact"},"license":{"name":"CC BY 4.0","identifier":"CC-BY-4.0"}},"servers":[{"url":"https://roeesivan.com","description":"Production"}],"externalDocs":{"description":"Agent documentation","url":"https://roeesivan.com/docs"},"x-deprecation-policy":"https://roeesivan.com/docs#versioning","paths":{"/api/v1/profile":{"get":{"operationId":"getProfile","summary":"Get the site owner's profile","description":"Identity, education, contact channels, technology list and project index.","responses":{"200":{"description":"Profile object","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"role":{"type":"string"},"summary":{"type":"string"},"location":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string"},"formatted":{"type":"string"}}},"languages":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"level":{"type":"string"}}}},"availability":{"type":"object","description":"What kind of role is being sought, and until when.","properties":{"status":{"type":"string"},"seeking":{"type":"string"},"focus":{"type":"string"},"studying_until":{"type":"string"}}},"education":{"type":"array","items":{"type":"object","properties":{"institution":{"type":"string"},"credential":{"type":"string"},"period":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"current":{"type":"boolean"},"note":{"type":"string"},"coursework":{"type":"array","items":{"type":"string"}}}}},"experience":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"organization":{"type":"string"},"period":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"summary":{"type":"string"},"highlights":{"type":"array","items":{"type":"string"}}}}},"military_service":{"type":"object","properties":{"title":{"type":"string"},"organization":{"type":"string"},"period":{"type":"string"},"summary":{"type":"string"}}},"contact":{"type":"object","properties":{"email":{"type":"string","format":"email"},"phone":{"type":"string"},"whatsapp":{"type":"string","format":"uri"},"linkedin":{"type":"string","format":"uri"},"github":{"type":"string","format":"uri"}}},"resume":{"type":"object","description":"The CV as a downloadable PDF, with the month it was last regenerated.","properties":{"url":{"type":"string","format":"uri"},"media_type":{"type":"string"},"updated":{"type":"string"}}},"portrait":{"type":"object","description":"A photograph of Roee Sivan, with a description and its intrinsic size.","properties":{"url":{"type":"string","format":"uri"},"media_type":{"type":"string"},"alt":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},"technologies":{"type":"array","items":{"type":"string"}},"additional_skills":{"type":"object","description":"Skills from coursework and internships rather than from a project here.","properties":{"languages":{"type":"array","items":{"type":"string"}},"testing":{"type":"array","items":{"type":"string"}},"systems":{"type":"array","items":{"type":"string"}}}},"projects":{"type":"array","items":{"type":"object"}}},"required":["name","role","summary"]}}}}}}},"/api/v1/projects":{"get":{"operationId":"listProjects","summary":"List every project","description":"Every project on the site, in display order, each with its description, highlights, technology list, links, key art and trailer.","responses":{"200":{"description":"Project list","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"items":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"blurb":{"type":"string"},"description":{"type":"string"},"year":{"type":"string"},"highlights":{"type":"array","items":{"type":"string"}},"tech":{"type":"array","items":{"type":"string"}},"links":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"href":{"type":"string","format":"uri"},"kind":{"type":"string","enum":["live","source","download","video","docs"]}},"required":["label","href","kind"]}},"image":{"type":"object","description":"Key art for the project card. Absent when there is none.","properties":{"src":{"type":"string","format":"uri"},"alt":{"type":"string"}},"required":["src","alt"]},"video":{"type":"object","description":"Trailer or demo reel for the project. Absent when there is none.","properties":{"youtubeId":{"type":"string"},"title":{"type":"string"},"caption":{"type":"string"},"published":{"type":"string","format":"date"}},"required":["youtubeId","title","caption"]},"featured":{"type":"boolean"},"url":{"type":"string","format":"uri"}},"required":["slug","name","blurb","description","tech","links","url"]}}},"required":["count","items"]}}}}}}},"/api/v1/projects/{slug}":{"get":{"operationId":"getProject","summary":"Get one project by slug","description":"One project, in the same shape as an entry of listProjects. An unknown slug returns 404 with a body listing every valid slug.","parameters":[{"name":"slug","in":"path","required":true,"description":"Project identifier.","schema":{"type":"string","enum":["the-block","uni-rate","neon-highway","hasidic-tower","table-tennis-analyzer","teaching-a-robot-to-walk"]}}],"responses":{"200":{"description":"Project object","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"blurb":{"type":"string"},"description":{"type":"string"},"year":{"type":"string"},"highlights":{"type":"array","items":{"type":"string"}},"tech":{"type":"array","items":{"type":"string"}},"links":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"href":{"type":"string","format":"uri"},"kind":{"type":"string","enum":["live","source","download","video","docs"]}},"required":["label","href","kind"]}},"image":{"type":"object","description":"Key art for the project card. Absent when there is none.","properties":{"src":{"type":"string","format":"uri"},"alt":{"type":"string"}},"required":["src","alt"]},"video":{"type":"object","description":"Trailer or demo reel for the project. Absent when there is none.","properties":{"youtubeId":{"type":"string"},"title":{"type":"string"},"caption":{"type":"string"},"published":{"type":"string","format":"date"}},"required":["youtubeId","title","caption"]},"featured":{"type":"boolean"},"url":{"type":"string","format":"uri"}},"required":["slug","name","blurb","description","tech","links","url"]}}}},"404":{"description":"No project with that slug. The body lists every valid slug.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"available_slugs":{"type":"array","items":{"type":"string"}},"documentation":{"type":"string","format":"uri"}},"required":["error","message"]}}}}}}}},"components":{"schemas":{"Link":{"type":"object","properties":{"label":{"type":"string"},"href":{"type":"string","format":"uri"},"kind":{"type":"string","enum":["live","source","download","video","docs"]}},"required":["label","href","kind"]},"Video":{"type":"object","description":"Trailer or demo reel for the project. Absent when there is none.","properties":{"youtubeId":{"type":"string"},"title":{"type":"string"},"caption":{"type":"string"},"published":{"type":"string","format":"date"}},"required":["youtubeId","title","caption"]},"Image":{"type":"object","description":"Key art for the project card. Absent when there is none.","properties":{"src":{"type":"string","format":"uri"},"alt":{"type":"string"}},"required":["src","alt"]},"Project":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"blurb":{"type":"string"},"description":{"type":"string"},"year":{"type":"string"},"highlights":{"type":"array","items":{"type":"string"}},"tech":{"type":"array","items":{"type":"string"}},"links":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"href":{"type":"string","format":"uri"},"kind":{"type":"string","enum":["live","source","download","video","docs"]}},"required":["label","href","kind"]}},"image":{"type":"object","description":"Key art for the project card. Absent when there is none.","properties":{"src":{"type":"string","format":"uri"},"alt":{"type":"string"}},"required":["src","alt"]},"video":{"type":"object","description":"Trailer or demo reel for the project. Absent when there is none.","properties":{"youtubeId":{"type":"string"},"title":{"type":"string"},"caption":{"type":"string"},"published":{"type":"string","format":"date"}},"required":["youtubeId","title","caption"]},"featured":{"type":"boolean"},"url":{"type":"string","format":"uri"}},"required":["slug","name","blurb","description","tech","links","url"]},"Profile":{"type":"object","properties":{"name":{"type":"string"},"role":{"type":"string"},"summary":{"type":"string"},"location":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string"},"formatted":{"type":"string"}}},"languages":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"level":{"type":"string"}}}},"availability":{"type":"object","description":"What kind of role is being sought, and until when.","properties":{"status":{"type":"string"},"seeking":{"type":"string"},"focus":{"type":"string"},"studying_until":{"type":"string"}}},"education":{"type":"array","items":{"type":"object","properties":{"institution":{"type":"string"},"credential":{"type":"string"},"period":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"current":{"type":"boolean"},"note":{"type":"string"},"coursework":{"type":"array","items":{"type":"string"}}}}},"experience":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"organization":{"type":"string"},"period":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"summary":{"type":"string"},"highlights":{"type":"array","items":{"type":"string"}}}}},"military_service":{"type":"object","properties":{"title":{"type":"string"},"organization":{"type":"string"},"period":{"type":"string"},"summary":{"type":"string"}}},"contact":{"type":"object","properties":{"email":{"type":"string","format":"email"},"phone":{"type":"string"},"whatsapp":{"type":"string","format":"uri"},"linkedin":{"type":"string","format":"uri"},"github":{"type":"string","format":"uri"}}},"resume":{"type":"object","description":"The CV as a downloadable PDF, with the month it was last regenerated.","properties":{"url":{"type":"string","format":"uri"},"media_type":{"type":"string"},"updated":{"type":"string"}}},"portrait":{"type":"object","description":"A photograph of Roee Sivan, with a description and its intrinsic size.","properties":{"url":{"type":"string","format":"uri"},"media_type":{"type":"string"},"alt":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},"technologies":{"type":"array","items":{"type":"string"}},"additional_skills":{"type":"object","description":"Skills from coursework and internships rather than from a project here.","properties":{"languages":{"type":"array","items":{"type":"string"}},"testing":{"type":"array","items":{"type":"string"}},"systems":{"type":"array","items":{"type":"string"}}}},"projects":{"type":"array","items":{"type":"object"}}},"required":["name","role","summary"]},"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"available_slugs":{"type":"array","items":{"type":"string"}},"documentation":{"type":"string","format":"uri"}},"required":["error","message"]}}}}