Files
worldmonitor/docs/api/GivingService.openapi.yaml
Sebastien Melki 6669d373cf feat: convert 52 API endpoints from POST to GET for edge caching (#468)
* feat: convert 52 API endpoints from POST to GET for edge caching

Convert all cacheable sebuf RPC endpoints to HTTP GET with query/path
parameters, enabling CDN edge caching to reduce costs. Flatten nested
request types (TimeRange, PaginationRequest, BoundingBox) into scalar
query params. Add path params for resource lookups (GetFredSeries,
GetHumanitarianSummary, GetCountryStockIndex, GetCountryIntelBrief,
GetAircraftDetails). Rewrite router with hybrid static/dynamic matching
for path param support.

Kept as POST: SummarizeArticle, ClassifyEvent, RecordBaselineSnapshot,
GetAircraftDetailsBatch, RegisterInterest.

Generated with sebuf v0.9.0 (protoc-gen-ts-client, protoc-gen-ts-server).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add rate_limited field to market response protos

The rateLimited field was hand-patched into generated files on main but
never declared in the proto definitions. Regenerating wiped it out,
breaking the build. Now properly defined in both ListEtfFlowsResponse
and ListMarketQuotesResponse protos.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: remove accidentally committed .planning files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 19:44:40 +04:00

234 lines
10 KiB
YAML

openapi: 3.1.0
info:
title: GivingService API
version: 1.0.0
paths:
/api/giving/v1/get-giving-summary:
get:
tags:
- GivingService
summary: GetGivingSummary
description: GetGivingSummary retrieves a composite global giving activity index and platform breakdowns.
operationId: GetGivingSummary
parameters:
- name: platform_limit
in: query
description: Number of platforms to include (0 = all).
required: false
schema:
type: integer
format: int32
- name: category_limit
in: query
description: Number of category breakdowns to include (0 = all).
required: false
schema:
type: integer
format: int32
responses:
"200":
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/GetGivingSummaryResponse'
"400":
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
Error:
type: object
properties:
message:
type: string
description: Error message (e.g., 'user not found', 'database connection failed')
description: Error is returned when a handler encounters an error. It contains a simple error message that the developer can customize.
FieldViolation:
type: object
properties:
field:
type: string
description: The field path that failed validation (e.g., 'user.email' for nested fields). For header validation, this will be the header name (e.g., 'X-API-Key')
description:
type: string
description: Human-readable description of the validation violation (e.g., 'must be a valid email address', 'required field missing')
required:
- field
- description
description: FieldViolation describes a single validation error for a specific field.
ValidationError:
type: object
properties:
violations:
type: array
items:
$ref: '#/components/schemas/FieldViolation'
description: List of validation violations
required:
- violations
description: ValidationError is returned when request validation fails. It contains a list of field violations describing what went wrong.
GetGivingSummaryRequest:
type: object
properties:
platformLimit:
type: integer
format: int32
description: Number of platforms to include (0 = all).
categoryLimit:
type: integer
format: int32
description: Number of category breakdowns to include (0 = all).
description: GetGivingSummaryRequest specifies parameters for retrieving the global giving summary.
GetGivingSummaryResponse:
type: object
properties:
summary:
$ref: '#/components/schemas/GivingSummary'
description: GetGivingSummaryResponse contains the global giving activity summary.
GivingSummary:
type: object
properties:
generatedAt:
type: string
description: Timestamp of the summary generation (ISO 8601).
activityIndex:
type: number
format: double
description: Global giving activity index (0-100 composite score).
trend:
type: string
description: Index trend direction.
estimatedDailyFlowUsd:
type: number
format: double
description: 'Estimated daily global giving flow in USD (directional, not precise).. Warning: Values > 2^53 may lose precision in JavaScript'
platforms:
type: array
items:
$ref: '#/components/schemas/PlatformGiving'
categories:
type: array
items:
$ref: '#/components/schemas/CategoryBreakdown'
crypto:
$ref: '#/components/schemas/CryptoGivingSummary'
institutional:
$ref: '#/components/schemas/InstitutionalGiving'
description: GivingSummary represents a global overview of personal giving activity across platforms.
PlatformGiving:
type: object
properties:
platform:
type: string
minLength: 1
description: Platform name (e.g., "GoFundMe", "GlobalGiving", "JustGiving").
dailyVolumeUsd:
type: number
format: double
description: Estimated daily donation volume in USD.
activeCampaignsSampled:
type: integer
format: int32
description: Number of active campaigns being sampled.
newCampaigns24h:
type: integer
format: int32
description: New campaigns created in the last 24 hours.
donationVelocity:
type: number
format: double
description: Average donation velocity (donations per hour).
dataFreshness:
type: string
description: 'Data freshness: "live", "daily", "weekly", "annual".'
lastUpdated:
type: string
description: Last data update timestamp (ISO 8601).
required:
- platform
description: PlatformGiving represents aggregated giving data from a single crowdfunding platform.
CategoryBreakdown:
type: object
properties:
category:
type: string
description: Category name (e.g., "Medical", "Disaster Relief", "Education").
share:
type: number
format: double
description: Share of total giving activity (0-1).
change24h:
type: number
format: double
description: 24-hour change in share percentage points.
activeCampaigns:
type: integer
format: int32
description: Number of active campaigns in this category.
trending:
type: boolean
description: Trending indicator.
description: CategoryBreakdown represents giving activity within a specific cause category.
CryptoGivingSummary:
type: object
properties:
dailyInflowUsd:
type: number
format: double
description: Total 24h inflow to tracked charity wallets (USD equivalent).
trackedWallets:
type: integer
format: int32
description: Number of tracked charity wallets.
transactions24h:
type: integer
format: int32
description: Number of transactions in the last 24 hours.
topReceivers:
type: array
items:
type: string
description: Top receiving platforms / DAOs.
pctOfTotal:
type: number
format: double
description: Percentage of total giving that is on-chain.
description: CryptoGivingSummary tracks transparent on-chain philanthropy.
InstitutionalGiving:
type: object
properties:
oecdOdaAnnualUsdBn:
type: number
format: double
description: Latest OECD ODA total (annual, USD billions).
oecdDataYear:
type: integer
format: int32
description: Year of latest OECD data.
cafWorldGivingIndex:
type: number
format: double
description: CAF World Giving Index score (latest).
cafDataYear:
type: integer
format: int32
description: Year of latest CAF data.
candidGrantsTracked:
type: integer
format: int32
description: Number of foundation grants tracked (Candid).
dataLag:
type: string
description: Data lag description (e.g., "Quarterly", "Annual").
description: InstitutionalGiving tracks large-scale structured philanthropy and ODA.