Files
worldmonitor/docs/api/ConflictService.openapi.json
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

1 line
12 KiB
JSON

{"components":{"schemas":{"AcledConflictEvent":{"description":"AcledConflictEvent represents an armed conflict event from the ACLED dataset.","properties":{"actors":{"items":{"description":"Named actors involved in the event.","type":"string"},"type":"array"},"admin1":{"description":"Administrative region within the country.","type":"string"},"country":{"description":"Country where the event occurred.","type":"string"},"eventType":{"description":"ACLED event type classification (e.g., \"Battles\", \"Explosions/Remote violence\").","type":"string"},"fatalities":{"description":"Reported fatalities from this event.","format":"int32","type":"integer"},"id":{"description":"Unique ACLED event identifier.","minLength":1,"type":"string"},"location":{"$ref":"#/components/schemas/GeoCoordinates"},"occurredAt":{"description":"Time the event occurred, as Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"source":{"description":"Source article or report.","type":"string"}},"required":["id"],"type":"object"},"Error":{"description":"Error is returned when a handler encounters an error. It contains a simple error message that the developer can customize.","properties":{"message":{"description":"Error message (e.g., 'user not found', 'database connection failed')","type":"string"}},"type":"object"},"FieldViolation":{"description":"FieldViolation describes a single validation error for a specific field.","properties":{"description":{"description":"Human-readable description of the validation violation (e.g., 'must be a valid email address', 'required field missing')","type":"string"},"field":{"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')","type":"string"}},"required":["field","description"],"type":"object"},"GeoCoordinates":{"description":"GeoCoordinates represents a geographic location using WGS84 coordinates.","properties":{"latitude":{"description":"Latitude in decimal degrees (-90 to 90).","format":"double","maximum":90,"minimum":-90,"type":"number"},"longitude":{"description":"Longitude in decimal degrees (-180 to 180).","format":"double","maximum":180,"minimum":-180,"type":"number"}},"type":"object"},"GetHumanitarianSummaryRequest":{"description":"GetHumanitarianSummaryRequest specifies which country to retrieve the humanitarian summary for.","properties":{"countryCode":{"description":"ISO 3166-1 alpha-2 country code (e.g., \"YE\", \"SD\", \"SO\").\n This is a path parameter — no query annotation needed.","pattern":"^[A-Z]{2}$","type":"string"}},"required":["countryCode"],"type":"object"},"GetHumanitarianSummaryResponse":{"description":"GetHumanitarianSummaryResponse contains the humanitarian summary for the requested country.","properties":{"summary":{"$ref":"#/components/schemas/HumanitarianCountrySummary"}},"type":"object"},"HumanitarianCountrySummary":{"description":"HumanitarianCountrySummary represents HAPI conflict event counts for a country.","properties":{"conflictDemonstrations":{"description":"Number of demonstration events.","format":"int32","type":"integer"},"conflictEventsTotal":{"description":"Total conflict events in the reference period.","format":"int32","type":"integer"},"conflictFatalities":{"description":"Total fatalities from political violence and civilian targeting.","format":"int32","type":"integer"},"conflictPoliticalViolenceEvents":{"description":"Political violence + civilian targeting event count.","format":"int32","type":"integer"},"countryCode":{"description":"ISO 3166-1 alpha-2 country code.","type":"string"},"countryName":{"description":"Country name.","type":"string"},"referencePeriod":{"description":"Reference period start date (YYYY-MM-DD).","type":"string"},"updatedAt":{"description":"Last data update time, as Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"}},"type":"object"},"ListAcledEventsRequest":{"description":"ListAcledEventsRequest specifies filters for retrieving ACLED conflict events.","properties":{"country":{"description":"Optional country filter (ISO 3166-1 alpha-2).","type":"string"},"cursor":{"description":"Cursor for next page.","type":"string"},"end":{"description":"End of time range (inclusive), Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"pageSize":{"description":"Maximum items per page (1-100).","format":"int32","type":"integer"},"start":{"description":"Start of time range (inclusive), Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"}},"type":"object"},"ListAcledEventsResponse":{"description":"ListAcledEventsResponse contains ACLED conflict events matching the request.","properties":{"events":{"items":{"$ref":"#/components/schemas/AcledConflictEvent"},"type":"array"},"pagination":{"$ref":"#/components/schemas/PaginationResponse"}},"type":"object"},"ListUcdpEventsRequest":{"description":"ListUcdpEventsRequest specifies filters for retrieving UCDP violence events.","properties":{"country":{"description":"Optional country filter (ISO 3166-1 alpha-2).","type":"string"},"cursor":{"description":"Cursor for next page.","type":"string"},"end":{"description":"End of time range (inclusive), Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"pageSize":{"description":"Maximum items per page (1-100).","format":"int32","type":"integer"},"start":{"description":"Start of time range (inclusive), Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"}},"type":"object"},"ListUcdpEventsResponse":{"description":"ListUcdpEventsResponse contains UCDP violence events matching the request.","properties":{"events":{"items":{"$ref":"#/components/schemas/UcdpViolenceEvent"},"type":"array"},"pagination":{"$ref":"#/components/schemas/PaginationResponse"}},"type":"object"},"PaginationResponse":{"description":"PaginationResponse contains pagination metadata returned alongside list results.","properties":{"nextCursor":{"description":"Cursor for fetching the next page. Empty string indicates no more pages.","type":"string"},"totalCount":{"description":"Total count of items matching the query, if known. Zero if the total is unknown.","format":"int32","type":"integer"}},"type":"object"},"UcdpViolenceEvent":{"description":"UcdpViolenceEvent represents a georeferenced violence event from the UCDP dataset.","properties":{"country":{"description":"Country where the event occurred.","type":"string"},"dateEnd":{"description":"End date of the event, as Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"dateStart":{"description":"Start date of the event, as Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"deathsBest":{"description":"Best estimate of deaths.","format":"int32","type":"integer"},"deathsHigh":{"description":"High estimate of deaths.","format":"int32","type":"integer"},"deathsLow":{"description":"Low estimate of deaths.","format":"int32","type":"integer"},"id":{"description":"Unique UCDP event identifier.","minLength":1,"type":"string"},"location":{"$ref":"#/components/schemas/GeoCoordinates"},"sideA":{"description":"Primary party in the conflict (Side A).","type":"string"},"sideB":{"description":"Secondary party in the conflict (Side B).","type":"string"},"sourceOriginal":{"description":"Original source of the event report.","type":"string"},"violenceType":{"description":"UcdpViolenceType represents the UCDP violence classification.\n Maps to existing TS union: 'state-based' | 'non-state' | 'one-sided'.","enum":["UCDP_VIOLENCE_TYPE_UNSPECIFIED","UCDP_VIOLENCE_TYPE_STATE_BASED","UCDP_VIOLENCE_TYPE_NON_STATE","UCDP_VIOLENCE_TYPE_ONE_SIDED"],"type":"string"}},"required":["id"],"type":"object"},"ValidationError":{"description":"ValidationError is returned when request validation fails. It contains a list of field violations describing what went wrong.","properties":{"violations":{"description":"List of validation violations","items":{"$ref":"#/components/schemas/FieldViolation"},"type":"array"}},"required":["violations"],"type":"object"}}},"info":{"title":"ConflictService API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/api/conflict/v1/get-humanitarian-summary/{country_code}":{"get":{"description":"GetHumanitarianSummary retrieves a humanitarian overview for a country from HAPI/HDX.","operationId":"GetHumanitarianSummary","parameters":[{"description":"ISO 3166-1 alpha-2 country code (e.g., \"YE\", \"SD\", \"SO\").\n This is a path parameter — no query annotation needed.","in":"path","name":"country_code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetHumanitarianSummaryResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}},"description":"Validation error"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error response"}},"summary":"GetHumanitarianSummary","tags":["ConflictService"]}},"/api/conflict/v1/list-acled-events":{"get":{"description":"ListAcledEvents retrieves armed conflict events from the ACLED dataset.","operationId":"ListAcledEvents","parameters":[{"description":"Start of time range (inclusive), Unix epoch milliseconds.","in":"query","name":"start","required":false,"schema":{"format":"int64","type":"string"}},{"description":"End of time range (inclusive), Unix epoch milliseconds.","in":"query","name":"end","required":false,"schema":{"format":"int64","type":"string"}},{"description":"Maximum items per page (1-100).","in":"query","name":"page_size","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Cursor for next page.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}},{"description":"Optional country filter (ISO 3166-1 alpha-2).","in":"query","name":"country","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListAcledEventsResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}},"description":"Validation error"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error response"}},"summary":"ListAcledEvents","tags":["ConflictService"]}},"/api/conflict/v1/list-ucdp-events":{"get":{"description":"ListUcdpEvents retrieves georeferenced violence events from the UCDP dataset.","operationId":"ListUcdpEvents","parameters":[{"description":"Start of time range (inclusive), Unix epoch milliseconds.","in":"query","name":"start","required":false,"schema":{"format":"int64","type":"string"}},{"description":"End of time range (inclusive), Unix epoch milliseconds.","in":"query","name":"end","required":false,"schema":{"format":"int64","type":"string"}},{"description":"Maximum items per page (1-100).","in":"query","name":"page_size","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Cursor for next page.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}},{"description":"Optional country filter (ISO 3166-1 alpha-2).","in":"query","name":"country","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListUcdpEventsResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}},"description":"Validation error"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error response"}},"summary":"ListUcdpEvents","tags":["ConflictService"]}}}}