{"openapi":"3.1.0","info":{"title":"OSE API — Open Source Endowment public API","version":"1.0.0","description":"Read-only public data of Open Source Endowment: fund stats, donors, grants and portfolio. No auth. Money is in US dollars.\n\nVersioning: send the `API-Version` request header (current: `1`; omit it to get the current version). Every response echoes `API-Version`. Within a version we only add fields and endpoints; we never remove or rename them.\n\nDeprecation policy (https://endowment.dev/docs/api/#deprecation): a breaking change ships as a new version. The old version then sends `Deprecation` (RFC 9745), `Sunset` (RFC 8594) and a `Link` rel=\"deprecation\" header, and keeps working for at least 180 days after the announcement.\n\nRate limit: 300 requests per 60 seconds per IP (donor photos and /health are not limited). Limited responses send `RateLimit-Policy`; a 429 also sends `RateLimit` and `Retry-After`.","contact":{"url":"https://endowment.dev/docs/api/","email":"team@endowment.dev"},"x-api-lifecycle":{"versioning":"header","header":"API-Version","current":"1","deprecationHeaders":["Deprecation","Sunset"],"minimumSunsetNoticeDays":180,"policy":"https://endowment.dev/docs/api/#versioning","deprecationPolicy":"https://endowment.dev/docs/api/#deprecation"}},"externalDocs":{"url":"https://endowment.dev/docs/api/"},"servers":[{"url":"https://api.endowment.dev"}],"paths":{"/health":{"get":{"operationId":"getHealth","summary":"Liveness check","description":"Returns ok=true when the API Worker is up. Not rate limited.","parameters":[{"$ref":"#/components/parameters/API-Version"}],"responses":{"200":{"description":"Worker is up.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"Deprecation":{"$ref":"#/components/headers/Deprecation"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"worker":{"type":"string","description":"Worker name. Always `api`."},"build_stamp":{"type":"string","description":"Build identifier of the deployed Worker."}},"required":["ok","worker","build_stamp"]}}}},"400":{"description":"Unsupported `API-Version` (`unsupported_version`) or invalid input (`bad_request`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"404":{"description":"No such route or resource (`not_found`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"500":{"description":"Unexpected server error (`internal_error`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"default":{"description":"Any other error, same `Error` shape.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}}}}},"/public":{"get":{"operationId":"listPublicEndpoints","summary":"List the public endpoints","description":"Index of the public endpoints with a one-line description each.","parameters":[{"$ref":"#/components/parameters/API-Version"}],"responses":{"200":{"description":"Endpoint index.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"Deprecation":{"$ref":"#/components/headers/Deprecation"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","properties":{"endpoints":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"description":{"type":"string"}},"required":["path","description"]}}},"required":["endpoints"]}}}},"400":{"description":"Unsupported `API-Version` (`unsupported_version`) or invalid input (`bad_request`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"404":{"description":"No such route or resource (`not_found`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"429":{"description":"Rate limit exceeded (300 requests / 60 s per IP). Retry after `Retry-After` seconds.","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"500":{"description":"Unexpected server error (`internal_error`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"default":{"description":"Any other error, same `Error` shape.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}}}}},"/public/stats":{"get":{"operationId":"getStats","summary":"Donation totals, donor counts and fund size","description":"Live totals: number of donations and donors, member count, and fund size in US dollars, split by money source. Cached for a few minutes.","parameters":[{"$ref":"#/components/parameters/API-Version"}],"responses":{"200":{"description":"Live fund statistics.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"Deprecation":{"$ref":"#/components/headers/Deprecation"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","properties":{"donations":{"type":"object","properties":{"total":{"type":"integer","description":"Number of donations."},"individuals":{"type":"integer","description":"Donations from individuals."},"organizations":{"type":"integer","description":"Donations from organizations."}},"required":["total","individuals","organizations"]},"donors":{"type":"object","properties":{"total":{"type":"integer"},"members":{"type":"integer","description":"Donors with membership (US$1,000+/yr)."},"individuals":{"type":"integer"},"organizations":{"type":"integer"}},"required":["total","members","individuals","organizations"]},"endowment":{"type":"object","properties":{"fund_size":{"type":"integer","description":"Total fund balance in whole US dollars."},"fund_size_k":{"type":"integer","description":"Fund balance in thousands of US dollars, rounded."},"accounts":{"type":"object","description":"Balance per money source (infgiving, mercury, every, stripe, …).","additionalProperties":{"type":"object","properties":{"balance":{"type":"integer","description":"Balance in whole US dollars."},"synced_at":{"type":"string","description":"Last sync date (YYYY-MM-DD), or empty string."}},"required":["balance","synced_at"]}}},"required":["fund_size","fund_size_k","accounts"]}},"required":["donations","donors","endowment"]}}}},"400":{"description":"Unsupported `API-Version` (`unsupported_version`) or invalid input (`bad_request`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"404":{"description":"No such route or resource (`not_found`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"429":{"description":"Rate limit exceeded (300 requests / 60 s per IP). Retry after `Retry-After` seconds.","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"500":{"description":"Unexpected server error (`internal_error`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"default":{"description":"Any other error, same `Error` shape.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}}}}},"/public/donors":{"get":{"operationId":"listDonors","summary":"Public donor list","description":"Donors who agreed to be shown, with giving band, photo and links. Anonymous donors appear as `Anonymous Donor #N`.","parameters":[{"$ref":"#/components/parameters/API-Version"}],"responses":{"200":{"description":"Donors with name, tier, photo and links.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"Deprecation":{"$ref":"#/components/headers/Deprecation"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"class":{"type":"string","description":"Lifetime giving band, e.g. `0-1K`, `1K-10K`, `100K+`."},"type":{"type":"string","enum":["person","organization"]},"member":{"type":"boolean"},"featured":{"type":"integer","description":"Present when the donor is featured. Lower sorts first."},"description":{"type":"string","description":"Short affiliation, e.g. `CTO, Zerodha`."},"picture_url":{"type":"string","format":"uri"},"github_url":{"type":"string","format":"uri"},"linkedin_url":{"type":"string","format":"uri"},"website_url":{"type":"string","format":"uri"}},"required":["name","class","type","member"]}}}}},"400":{"description":"Unsupported `API-Version` (`unsupported_version`) or invalid input (`bad_request`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"404":{"description":"No such route or resource (`not_found`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"429":{"description":"Rate limit exceeded (300 requests / 60 s per IP). Retry after `Retry-After` seconds.","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"500":{"description":"Unexpected server error (`internal_error`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"default":{"description":"Any other error, same `Error` shape.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}}}}},"/public/grants":{"get":{"operationId":"listGrants","summary":"Grants paid to open source projects","description":"Every grant OSE paid: project, maintainer, amount, payment proof and the model score that selected it. Oldest round first.","parameters":[{"$ref":"#/components/parameters/API-Version"}],"responses":{"200":{"description":"Grants, oldest round first.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"Deprecation":{"$ref":"#/components/headers/Deprecation"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"round":{"type":"integer","description":"Grant round number."},"project":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"language":{"type":"string"},"ecosystem":{"type":"string","description":"Ecosystem the model ranked the project in (npm, pypi, crates, …)."},"github_repo":{"type":"string","description":"`owner/repo`."},"github_id":{"type":"integer"},"packages":{"type":"array","items":{"type":"object","properties":{"ecosystem":{"type":"string"},"name":{"type":"string"}},"required":["ecosystem","name"]}}},"required":["name","description","language","ecosystem","github_repo","github_id","packages"]},"payment":{"type":"object","properties":{"amount":{"type":"number","description":"Grant amount in US dollars."},"fee":{"type":"number","description":"Transfer fee OSE paid on top, in US dollars."},"paid_via":{"type":"string","enum":["github_sponsors","bank_wire"]},"paid_at":{"type":"string","format":"date"},"proof_url":{"type":["string","null"],"format":"uri"}},"required":["amount","fee","paid_via","paid_at","proof_url"]},"score":{"type":"object","properties":{"model_version":{"type":"string","description":"Release tag of the scoring model, e.g. `v1.0.0`."},"model_url":{"type":"string","format":"uri","description":"GitHub release page of that model version."},"value":{"type":"number"},"risk":{"type":"number"},"eco_rank":{"type":"integer","description":"Priority rank within the project's ecosystem."}},"required":["model_version","model_url","value","risk","eco_rank"]},"maintainer":{"type":"object","properties":{"name":{"type":"string"},"github_login":{"type":"string"},"github_id":{"type":"integer"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 code."},"picture_url":{"type":"string","format":"uri"}},"required":["name","github_login","github_id","country","picture_url"]}},"required":["id","round","project","payment","score","maintainer"]}}}}},"400":{"description":"Unsupported `API-Version` (`unsupported_version`) or invalid input (`bad_request`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"404":{"description":"No such route or resource (`not_found`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"429":{"description":"Rate limit exceeded (300 requests / 60 s per IP). Retry after `Retry-After` seconds.","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"500":{"description":"Unexpected server error (`internal_error`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"default":{"description":"Any other error, same `Error` shape.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}}}}},"/public/portfolio":{"get":{"operationId":"getPortfolio","summary":"Endowment portfolio allocation","description":"How the endowment is invested: holdings grouped by asset with their share of the portfolio.","parameters":[{"$ref":"#/components/parameters/API-Version"}],"responses":{"200":{"description":"Holdings grouped by asset, largest share first.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"Deprecation":{"$ref":"#/components/headers/Deprecation"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"asset":{"type":"string","description":"Ticker symbol."},"isin":{"type":"string"},"description":{"type":"string"},"share":{"type":"number","description":"Fraction of the portfolio, 0..1, 4 decimals."}},"required":["asset","isin","description","share"]}}}}},"400":{"description":"Unsupported `API-Version` (`unsupported_version`) or invalid input (`bad_request`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"404":{"description":"No such route or resource (`not_found`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"429":{"description":"Rate limit exceeded (300 requests / 60 s per IP). Retry after `Retry-After` seconds.","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"500":{"description":"Unexpected server error (`internal_error`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"default":{"description":"Any other error, same `Error` shape.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}}}}},"/public/photo/{slug}":{"get":{"operationId":"getDonorPhoto","summary":"Donor photo","description":"WebP photo of a donor. Use the `picture_url` from listDonors. Not rate limited.","parameters":[{"$ref":"#/components/parameters/API-Version"},{"name":"slug","in":"path","required":true,"description":"Donor name slug, e.g. `kailash-nadh`. Use `picture_url` from /public/donors.","schema":{"type":"string","pattern":"^[a-z0-9-]+(\\.webp)?$"}}],"responses":{"200":{"description":"The photo.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"Deprecation":{"$ref":"#/components/headers/Deprecation"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"image/webp":{"schema":{"type":"string","contentMediaType":"image/webp"}}}},"400":{"description":"Unsupported `API-Version` (`unsupported_version`) or invalid input (`bad_request`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"404":{"description":"No photo for this slug (`not_found`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"500":{"description":"Unexpected server error (`internal_error`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"default":{"description":"Any other error, same `Error` shape.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}}}}},"/public/funding.json":{"get":{"operationId":"getFundingManifest","summary":"funding.json manifest (fundingjson.org v1.1.0)","description":"Static funding manifest for FLOSS.fund and other funding directories.","parameters":[{"$ref":"#/components/parameters/API-Version"}],"responses":{"200":{"description":"Static funding manifest.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"Deprecation":{"$ref":"#/components/headers/Deprecation"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","properties":{"$schema":{"type":"string","format":"uri"},"version":{"type":"string","description":"funding.json spec version, e.g. `v1.1.0`."},"entity":{"type":"object","properties":{"type":{"type":"string"},"role":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"description":{"type":"string"},"webpageUrl":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]}},"required":["type","role","name","email","description","webpageUrl"]},"projects":{"type":"array","items":{"type":"object","description":"fundingjson.org project."}},"funding":{"type":"object","properties":{"channels":{"type":"array","items":{"type":"object","description":"Payment channel."}},"plans":{"type":"array","items":{"type":"object","description":"Funding plan."}}},"required":["channels","plans"]}},"required":["$schema","version","entity","projects","funding"]}}}},"400":{"description":"Unsupported `API-Version` (`unsupported_version`) or invalid input (`bad_request`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"404":{"description":"No such route or resource (`not_found`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"429":{"description":"Rate limit exceeded (300 requests / 60 s per IP). Retry after `Retry-After` seconds.","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"500":{"description":"Unexpected server error (`internal_error`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"default":{"description":"Any other error, same `Error` shape.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}}}}},"/public/openapi.json":{"get":{"operationId":"getOpenApi","summary":"This OpenAPI document","description":"The OpenAPI 3.1 description of this API.","parameters":[{"$ref":"#/components/parameters/API-Version"}],"responses":{"200":{"description":"OpenAPI 3.1 document.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"Deprecation":{"$ref":"#/components/headers/Deprecation"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","properties":{"openapi":{"type":"string","description":"OpenAPI version, `3.1.0`."},"info":{"type":"object","description":"Title, version and policies."},"servers":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]}},"paths":{"type":"object","description":"Operations by path."},"components":{"type":"object","description":"Reusable schemas and headers."}},"required":["openapi","info","paths"]}}}},"400":{"description":"Unsupported `API-Version` (`unsupported_version`) or invalid input (`bad_request`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"404":{"description":"No such route or resource (`not_found`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"429":{"description":"Rate limit exceeded (300 requests / 60 s per IP). Retry after `Retry-After` seconds.","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"500":{"description":"Unexpected server error (`internal_error`).","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}},"default":{"description":"Any other error, same `Error` shape.","headers":{"API-Version":{"$ref":"#/components/headers/API-Version"}},"content":{"application/json":{"schema":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}}}}}}}},"components":{"schemas":{"Health":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"worker":{"type":"string","description":"Worker name. Always `api`."},"build_stamp":{"type":"string","description":"Build identifier of the deployed Worker."}},"required":["ok","worker","build_stamp"]},"Stats":{"type":"object","properties":{"donations":{"type":"object","properties":{"total":{"type":"integer","description":"Number of donations."},"individuals":{"type":"integer","description":"Donations from individuals."},"organizations":{"type":"integer","description":"Donations from organizations."}},"required":["total","individuals","organizations"]},"donors":{"type":"object","properties":{"total":{"type":"integer"},"members":{"type":"integer","description":"Donors with membership (US$1,000+/yr)."},"individuals":{"type":"integer"},"organizations":{"type":"integer"}},"required":["total","members","individuals","organizations"]},"endowment":{"type":"object","properties":{"fund_size":{"type":"integer","description":"Total fund balance in whole US dollars."},"fund_size_k":{"type":"integer","description":"Fund balance in thousands of US dollars, rounded."},"accounts":{"type":"object","description":"Balance per money source (infgiving, mercury, every, stripe, …).","additionalProperties":{"type":"object","properties":{"balance":{"type":"integer","description":"Balance in whole US dollars."},"synced_at":{"type":"string","description":"Last sync date (YYYY-MM-DD), or empty string."}},"required":["balance","synced_at"]}}},"required":["fund_size","fund_size_k","accounts"]}},"required":["donations","donors","endowment"]},"Donor":{"type":"object","properties":{"name":{"type":"string"},"class":{"type":"string","description":"Lifetime giving band, e.g. `0-1K`, `1K-10K`, `100K+`."},"type":{"type":"string","enum":["person","organization"]},"member":{"type":"boolean"},"featured":{"type":"integer","description":"Present when the donor is featured. Lower sorts first."},"description":{"type":"string","description":"Short affiliation, e.g. `CTO, Zerodha`."},"picture_url":{"type":"string","format":"uri"},"github_url":{"type":"string","format":"uri"},"linkedin_url":{"type":"string","format":"uri"},"website_url":{"type":"string","format":"uri"}},"required":["name","class","type","member"]},"Grant":{"type":"object","properties":{"id":{"type":"integer"},"round":{"type":"integer","description":"Grant round number."},"project":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"language":{"type":"string"},"ecosystem":{"type":"string","description":"Ecosystem the model ranked the project in (npm, pypi, crates, …)."},"github_repo":{"type":"string","description":"`owner/repo`."},"github_id":{"type":"integer"},"packages":{"type":"array","items":{"type":"object","properties":{"ecosystem":{"type":"string"},"name":{"type":"string"}},"required":["ecosystem","name"]}}},"required":["name","description","language","ecosystem","github_repo","github_id","packages"]},"payment":{"type":"object","properties":{"amount":{"type":"number","description":"Grant amount in US dollars."},"fee":{"type":"number","description":"Transfer fee OSE paid on top, in US dollars."},"paid_via":{"type":"string","enum":["github_sponsors","bank_wire"]},"paid_at":{"type":"string","format":"date"},"proof_url":{"type":["string","null"],"format":"uri"}},"required":["amount","fee","paid_via","paid_at","proof_url"]},"score":{"type":"object","properties":{"model_version":{"type":"string","description":"Release tag of the scoring model, e.g. `v1.0.0`."},"model_url":{"type":"string","format":"uri","description":"GitHub release page of that model version."},"value":{"type":"number"},"risk":{"type":"number"},"eco_rank":{"type":"integer","description":"Priority rank within the project's ecosystem."}},"required":["model_version","model_url","value","risk","eco_rank"]},"maintainer":{"type":"object","properties":{"name":{"type":"string"},"github_login":{"type":"string"},"github_id":{"type":"integer"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 code."},"picture_url":{"type":"string","format":"uri"}},"required":["name","github_login","github_id","country","picture_url"]}},"required":["id","round","project","payment","score","maintainer"]},"Holding":{"type":"object","properties":{"asset":{"type":"string","description":"Ticker symbol."},"isin":{"type":"string"},"description":{"type":"string"},"share":{"type":"number","description":"Fraction of the portfolio, 0..1, 4 decimals."}},"required":["asset","isin","description","share"]},"Index":{"type":"object","properties":{"endpoints":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"description":{"type":"string"}},"required":["path","description"]}}},"required":["endpoints"]},"Error":{"type":"object","description":"Every error response. `error` is a stable machine-readable code; `detail` is a human-readable message.","properties":{"error":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","unprocessable","unsupported_version","rate_limited","internal_error"],"description":"Machine-readable error code."},"detail":{"type":"string","description":"Human-readable message."},"docs":{"type":"string","format":"uri","description":"Where to read more."},"supported":{"type":"array","items":{"type":"string"},"description":"Supported API versions (unsupported_version only)."},"req_id":{"type":"string","description":"Request ID for support (internal_error only)."}},"required":["error","detail","docs"]}},"parameters":{"API-Version":{"name":"API-Version","in":"header","required":false,"description":"API version to use. Omit for the current version.","schema":{"type":"string","enum":["1"],"default":"1"}}},"headers":{"API-Version":{"description":"Version that served the response.","schema":{"type":"string","enum":["1"]}},"RateLimit-Policy":{"description":"Rate-limit policy (draft-ietf-httpapi-ratelimit-headers), e.g. `\"public\";q=300;w=60`.","schema":{"type":"string"}},"RateLimit":{"description":"Current rate-limit state, e.g. `\"public\";r=0;t=60`. Sent with 429.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"Deprecation":{"description":"RFC 9745. Sent only once the version or operation is deprecated: when it was deprecated, as `@<unix-seconds>`.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594. Sent with `Deprecation`: the HTTP date after which it stops working, at least 180 days later.","schema":{"type":"string","example":"Mon, 05 Jul 2027 00:00:00 GMT"}},"Link":{"description":"Sent with `Deprecation`: `<https://endowment.dev/docs/api/#deprecation>; rel=\"deprecation\"`.","schema":{"type":"string"}}}}}