{"openapi":"3.1.0","info":{"title":"hdycode Project Publishing API","version":"0.8.0","description":"Publish local projects, source archives, tutorials and files to a registered hdycode account using its long-lived personal API key."},"servers":[{"url":"https://code.8e.ink"}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key"}}},"paths":{"/api/v1/projects":{"get":{"summary":"List projects","responses":{"200":{"description":"Project list"}}},"post":{"summary":"Create a native project","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title"],"properties":{"title":{"type":"string"},"summary":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"sourcePrice":{"type":"number","minimum":0,"maximum":100000,"description":"0 keeps source public; a positive value requires a one-time coin unlock."}}}}}},"responses":{"201":{"description":"Created project"}}}},"/api/v1/projects/{id}":{"get":{"summary":"Read a project","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project details"}}},"patch":{"summary":"Update project metadata or source unlock price","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"summary":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"sourcePrice":{"type":"number","minimum":0,"maximum":100000}}}}}},"responses":{"200":{"description":"Updated project"}}}},"/api/v1/projects/{id}/source":{"post":{"summary":"Upload the first source version or publish a new code version","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["archive"],"properties":{"archive":{"type":"string","format":"binary"},"version":{"type":"string","example":"v1.0.0"},"changelog":{"type":"string"}}}}}},"responses":{"201":{"description":"Published source archive"}}}},"/api/v1/projects/{id}/publish":{"post":{"summary":"Publish a draft project to the public project list","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Published project"}}}},"/api/v1/projects/{id}/tree":{"get":{"summary":"Read the project file tree","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project tree"}}}},"/api/v1/projects/{id}/raw":{"get":{"summary":"Read a text file from the project","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Raw UTF-8 file"}}}},"/api/v1/projects/{id}/tutorials":{"post":{"summary":"Publish a Markdown tutorial","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["title","content"],"properties":{"title":{"type":"string"},"content":{"type":"string"},"attachment":{"type":"string","format":"binary"}}}}}},"responses":{"201":{"description":"Published tutorial"}}}},"/api/v1/projects/{id}/files":{"post":{"summary":"Upload project attachments","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["files"],"properties":{"files":{"type":"array","items":{"type":"string","format":"binary"}}}}}}},"responses":{"201":{"description":"Uploaded files"}}}}}}