{"openapi":"3.1.1","info":{"title":"git.team Developer News API","version":"1.0.0","description":"Read-only, attributed AI/developer headlines and optional verified briefings. Canonical API version: /api/v1/. /api/news and /api/sources remain compatible aliases of v1. Breaking changes require a new major URL version. Planned retirement is announced at least 180 days ahead in /developers#versioning-and-deprecation, with RFC 9745 Deprecation and RFC 8594 Sunset headers when actually scheduled. v1 is not deprecated. GET and HEAD are supported; no account, portfolio writes or application drafts are exposed here. Use original publisher links for full articles.","contact":{"name":"git.team support","email":"thetalosteam@gmail.com","url":"https://git.team/contact"}},"servers":[{"url":"https://git.team","description":"Production"}],"security":[],"externalDocs":{"description":"git.team API usage, attribution, authentication boundaries and limits","url":"https://git.team/developers"},"paths":{"/api/v1/news":{"get":{"operationId":"listDeveloperNews","summary":"Find current developer and AI stories","description":"Search the latest public edition chronologically by category and title/topic/publisher. At most160 stories per edition and50 per request. Pagination is an offset within the returned generatedAt edition; editions change. No external article content is fetched for this request. Briefings may be absent and are not publisher text.","parameters":[{"name":"category","in":"query","description":"Filter by developer topic; all means no category restriction.","schema":{"type":"string","enum":["all","ai","development","releases","security","agents"],"default":"all"}},{"name":"q","in":"query","description":"Case-insensitive text search across titles, publishers, tags and available briefings.","schema":{"type":"string","maxLength":160}},{"name":"limit","in":"query","description":"Maximum stories to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"offset","in":"query","description":"Zero-based offset within the filtered edition.","schema":{"type":"integer","minimum":0,"maximum":159,"default":0}}],"responses":{"200":{"description":"Attributed public news page.","headers":{"RateLimit":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 structured field. r is remaining requests; t is seconds until reset. Best-effort per Cloudflare client IP per Worker isolate, not a global quota.","schema":{"type":"string"},"example":"\"public-read\";r=59;t=60"},"RateLimit-Policy":{"description":"Structured quota policy: 60 requests per 60-second window shared by versioned and legacy API aliases. Counters reset on isolate recycling or oldest-bucket eviction at 4096 clients.","schema":{"type":"string"},"example":"\"public-read\";q=60;w=60"},"Link":{"description":"OpenAPI service-desc and RFC 9745 deprecation-policy links. v1 is not currently deprecated.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsPage"}}}},"400":{"description":"Structured error with an actionable hint.","headers":{"RateLimit":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 structured field. r is remaining requests; t is seconds until reset. Best-effort per Cloudflare client IP per Worker isolate, not a global quota.","schema":{"type":"string"},"example":"\"public-read\";r=59;t=60"},"RateLimit-Policy":{"description":"Structured quota policy: 60 requests per 60-second window shared by versioned and legacy API aliases. Counters reset on isolate recycling or oldest-bucket eviction at 4096 clients.","schema":{"type":"string"},"example":"\"public-read\";q=60;w=60"},"Link":{"description":"OpenAPI service-desc and RFC 9745 deprecation-policy links. v1 is not currently deprecated.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Structured error with an actionable hint.","headers":{"RateLimit":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 structured field. r is remaining requests; t is seconds until reset. Best-effort per Cloudflare client IP per Worker isolate, not a global quota.","schema":{"type":"string"},"example":"\"public-read\";r=59;t=60"},"RateLimit-Policy":{"description":"Structured quota policy: 60 requests per 60-second window shared by versioned and legacy API aliases. Counters reset on isolate recycling or oldest-bucket eviction at 4096 clients.","schema":{"type":"string"},"example":"\"public-read\";q=60;w=60"},"Link":{"description":"OpenAPI service-desc and RFC 9745 deprecation-policy links. v1 is not currently deprecated.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Request budget exhausted. Wait at least Retry-After seconds before retrying.","headers":{"RateLimit":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 structured field. r is remaining requests; t is seconds until reset. Best-effort per Cloudflare client IP per Worker isolate, not a global quota.","schema":{"type":"string"},"example":"\"public-read\";r=59;t=60"},"RateLimit-Policy":{"description":"Structured quota policy: 60 requests per 60-second window shared by versioned and legacy API aliases. Counters reset on isolate recycling or oldest-bucket eviction at 4096 clients.","schema":{"type":"string"},"example":"\"public-read\";q=60;w=60"},"Link":{"description":"OpenAPI service-desc and RFC 9745 deprecation-policy links. v1 is not currently deprecated.","schema":{"type":"string"}},"Retry-After":{"description":"RFC 9110 delay in seconds until the current quota window resets.","schema":{"type":"integer","minimum":1,"maximum":60},"example":60}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error with an actionable hint.","headers":{"RateLimit":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 structured field. r is remaining requests; t is seconds until reset. Best-effort per Cloudflare client IP per Worker isolate, not a global quota.","schema":{"type":"string"},"example":"\"public-read\";r=59;t=60"},"RateLimit-Policy":{"description":"Structured quota policy: 60 requests per 60-second window shared by versioned and legacy API aliases. Counters reset on isolate recycling or oldest-bucket eviction at 4096 clients.","schema":{"type":"string"},"example":"\"public-read\";q=60;w=60"},"Link":{"description":"OpenAPI service-desc and RFC 9745 deprecation-policy links. v1 is not currently deprecated.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/sources":{"get":{"operationId":"listNewsSources","summary":"Inspect publisher provenance","description":"Return up to48 configured publishers and community discovery channels. Source registration does not guarantee every publisher appears in every edition. No publisher body, internal feed diagnostics or private account data is returned.","parameters":[{"name":"category","in":"query","description":"Filter configured publishers by their primary developer topic; all returns the complete directory.","schema":{"type":"string","enum":["all","ai","development","releases","security","agents"],"default":"all"}}],"responses":{"200":{"description":"Configured public source directory.","headers":{"RateLimit":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 structured field. r is remaining requests; t is seconds until reset. Best-effort per Cloudflare client IP per Worker isolate, not a global quota.","schema":{"type":"string"},"example":"\"public-read\";r=59;t=60"},"RateLimit-Policy":{"description":"Structured quota policy: 60 requests per 60-second window shared by versioned and legacy API aliases. Counters reset on isolate recycling or oldest-bucket eviction at 4096 clients.","schema":{"type":"string"},"example":"\"public-read\";q=60;w=60"},"Link":{"description":"OpenAPI service-desc and RFC 9745 deprecation-policy links. v1 is not currently deprecated.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceDirectory"}}}},"400":{"description":"Structured error with an actionable hint.","headers":{"RateLimit":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 structured field. r is remaining requests; t is seconds until reset. Best-effort per Cloudflare client IP per Worker isolate, not a global quota.","schema":{"type":"string"},"example":"\"public-read\";r=59;t=60"},"RateLimit-Policy":{"description":"Structured quota policy: 60 requests per 60-second window shared by versioned and legacy API aliases. Counters reset on isolate recycling or oldest-bucket eviction at 4096 clients.","schema":{"type":"string"},"example":"\"public-read\";q=60;w=60"},"Link":{"description":"OpenAPI service-desc and RFC 9745 deprecation-policy links. v1 is not currently deprecated.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Structured error with an actionable hint.","headers":{"RateLimit":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 structured field. r is remaining requests; t is seconds until reset. Best-effort per Cloudflare client IP per Worker isolate, not a global quota.","schema":{"type":"string"},"example":"\"public-read\";r=59;t=60"},"RateLimit-Policy":{"description":"Structured quota policy: 60 requests per 60-second window shared by versioned and legacy API aliases. Counters reset on isolate recycling or oldest-bucket eviction at 4096 clients.","schema":{"type":"string"},"example":"\"public-read\";q=60;w=60"},"Link":{"description":"OpenAPI service-desc and RFC 9745 deprecation-policy links. v1 is not currently deprecated.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Request budget exhausted. Wait at least Retry-After seconds before retrying.","headers":{"RateLimit":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 structured field. r is remaining requests; t is seconds until reset. Best-effort per Cloudflare client IP per Worker isolate, not a global quota.","schema":{"type":"string"},"example":"\"public-read\";r=59;t=60"},"RateLimit-Policy":{"description":"Structured quota policy: 60 requests per 60-second window shared by versioned and legacy API aliases. Counters reset on isolate recycling or oldest-bucket eviction at 4096 clients.","schema":{"type":"string"},"example":"\"public-read\";q=60;w=60"},"Link":{"description":"OpenAPI service-desc and RFC 9745 deprecation-policy links. v1 is not currently deprecated.","schema":{"type":"string"}},"Retry-After":{"description":"RFC 9110 delay in seconds until the current quota window resets.","schema":{"type":"integer","minimum":1,"maximum":60},"example":60}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error with an actionable hint.","headers":{"RateLimit":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 structured field. r is remaining requests; t is seconds until reset. Best-effort per Cloudflare client IP per Worker isolate, not a global quota.","schema":{"type":"string"},"example":"\"public-read\";r=59;t=60"},"RateLimit-Policy":{"description":"Structured quota policy: 60 requests per 60-second window shared by versioned and legacy API aliases. Counters reset on isolate recycling or oldest-bucket eviction at 4096 clients.","schema":{"type":"string"},"example":"\"public-read\";q=60;w=60"},"Link":{"description":"OpenAPI service-desc and RFC 9745 deprecation-policy links. v1 is not currently deprecated.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error","code","message","hint"],"properties":{"error":{"type":"string","description":"Legacy-compatible readable error.","maxLength":2000},"code":{"type":"string","description":"Stable machine-readable error code.","maxLength":100},"message":{"type":"string","description":"Human-readable error explanation.","maxLength":2000},"hint":{"type":"string","description":"Resolution guidance and documentation.","maxLength":2000}}},"Briefing":{"type":"object","additionalProperties":false,"required":["text","generatedAt","verifiedAt"],"properties":{"text":{"type":"string","description":"Optional AI-assisted, source-checked summary; not the full publisher article.","maxLength":2000},"generatedAt":{"type":"string","format":"date-time","description":"ISO8601 timestamp; publisher dates are not retrieval times."},"verifiedAt":{"type":"string","format":"date-time","description":"ISO8601 timestamp; publisher dates are not retrieval times."}}},"Article":{"type":"object","additionalProperties":false,"required":["id","title","url","sourceId","sourceName","publishedAt","category","tags","kind"],"properties":{"id":{"type":"string","description":"Stable article identifier.","maxLength":80},"title":{"type":"string","description":"Publisher headline.","maxLength":600},"url":{"type":"string","format":"uri","pattern":"^https://","maxLength":2048},"sourceId":{"type":"string","description":"Provenance source identifier.","maxLength":80},"sourceName":{"type":"string","description":"Attributed publisher or discovery channel.","maxLength":160},"publishedAt":{"type":"string","format":"date-time","description":"ISO8601 timestamp; publisher dates are not retrieval times."},"category":{"type":"string","enum":["ai","development","releases","security","agents"],"description":"Developer topic assigned by the feed."},"tags":{"type":"array","maxItems":20,"items":{"type":"string","description":"Topic label.","maxLength":80}},"kind":{"type":"string","enum":["primary","editorial","community"],"description":"Official announcement, independent reporting, or community discovery."},"discussionUrl":{"type":"string","format":"uri","pattern":"^https://","maxLength":2048},"briefing":{"$ref":"#/components/schemas/Briefing"}}},"NewsPage":{"type":"object","additionalProperties":false,"required":["version","generatedAt","total","limit","offset","articles"],"properties":{"version":{"type":"integer","const":1},"generatedAt":{"type":"string","format":"date-time","description":"ISO8601 timestamp; publisher dates are not retrieval times."},"total":{"type":"integer","minimum":0,"maximum":160},"limit":{"type":"integer","minimum":1,"maximum":50},"offset":{"type":"integer","minimum":0,"maximum":159},"articles":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/Article"}}}},"Source":{"type":"object","additionalProperties":false,"required":["id","name","homepage","category","kind"],"properties":{"id":{"type":"string","description":"Stable source identifier.","maxLength":80},"name":{"type":"string","description":"Source name.","maxLength":160},"homepage":{"type":"string","format":"uri","pattern":"^https://","maxLength":2048},"category":{"type":"string","enum":["ai","development","releases","security","agents"],"description":"Developer topic assigned by the feed."},"kind":{"type":"string","enum":["primary","editorial","community"]}}},"SourceDirectory":{"type":"object","additionalProperties":false,"required":["version","sources"],"properties":{"version":{"type":"integer","const":1},"sources":{"type":"array","maxItems":48,"items":{"$ref":"#/components/schemas/Source"}}}}}}}