{"openapi":"3.1.0","info":{"title":"Viridian — EU farm prices API","version":"1.0.0","description":"Normalized weekly/monthly EU agricultural market prices (dairy, raw milk, eggs, cereals, Slovenian TIS specialties). Catalog and metadata are free; price data is paid per request via the x402 protocol, fronted by the Meridian rating engine.\n\nContains data from the European Commission, DG Agriculture and Rural Development, Agri-food Data Portal (https://agridata.ec.europa.eu), licensed under CC BY 4.0 (Commission Decision 2011/833/EU). Values normalized; changes made.","contact":{"name":"Viridian"}},"servers":[{"url":"http://localhost:8788","description":"dev"}],"paths":{"/v1":{"get":{"summary":"API index and links","responses":{"200":{"description":"index"}}}},"/v1/health":{"get":{"summary":"Health probe","responses":{"200":{"description":"ok"}}}},"/v1/products":{"get":{"summary":"Product catalog (free)","description":"All products with observation counts and date ranges.","responses":{"200":{"description":"catalog","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name_en":{"type":"string"},"sector":{"type":"string"},"unit_canonical":{"type":"string","description":"EUR/100kg, EUR/t or EUR/100pcs"},"member_state":{"type":"string","description":"ISO-ish code; EU = union aggregate, EL = Greece"},"period_start":{"type":"string","format":"date"},"period_end":{"type":"string","format":"date"},"granularity":{"type":"string","enum":["week","month"]},"price_eur":{"type":"number"},"quality_class":{"type":"string","description":"variant within a product: egg farming method / egg size / skuta fat class; empty when N/A"}}}},"meta":{"type":"object","description":"count, unit, as_of, next_cursor, attribution"},"links":{"type":"object","description":"self/next/related links"}}}}}}}}},"/v1/products/{slug}":{"get":{"summary":"Product metadata (free)","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","enum":["butter","smp","wmp","whey-powder","cheddar","edam","gouda","emmental","cream","butteroil","raw-milk","organic-raw-milk","tolminski-sir","mozzarella","trapist","livada","skuta","drinking-milk-whole","drinking-milk-semi","uht-milk-whole","uht-milk-semi","yogurt-plain","yogurt-fruit","cream-sweet","cream-sour","eggs-cage","eggs-barn","eggs-free-range","eggs-organic","eggs","wheat","feed-wheat","durum-wheat","barley","corn"]}}],"responses":{"200":{"description":"product"},"404":{"description":"Problem details (RFC 9457), includes did-you-mean hints for unknown slugs","content":{"application/problem+json":{"schema":{"type":"object"}}}}}}},"/v1/products/{slug}/prices/latest":{"get":{"summary":"Most recent observation (paid, cheapest)","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","enum":["butter","smp","wmp","whey-powder","cheddar","edam","gouda","emmental","cream","butteroil","raw-milk","organic-raw-milk","tolminski-sir","mozzarella","trapist","livada","skuta","drinking-milk-whole","drinking-milk-semi","uht-milk-whole","uht-milk-semi","yogurt-plain","yogurt-fruit","cream-sweet","cream-sour","eggs-cage","eggs-barn","eggs-free-range","eggs-organic","eggs","wheat","feed-wheat","durum-wheat","barley","corn"]}},{"name":"member_state","in":"query","schema":{"type":"string"},"description":"filter to one state (EU, SI, DE, FR, …)"}],"responses":{"200":{"description":"latest observations, all states/quality classes of the newest period unless filtered","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name_en":{"type":"string"},"sector":{"type":"string"},"unit_canonical":{"type":"string","description":"EUR/100kg, EUR/t or EUR/100pcs"},"member_state":{"type":"string","description":"ISO-ish code; EU = union aggregate, EL = Greece"},"period_start":{"type":"string","format":"date"},"period_end":{"type":"string","format":"date"},"granularity":{"type":"string","enum":["week","month"]},"price_eur":{"type":"number"},"quality_class":{"type":"string","description":"variant within a product: egg farming method / egg size / skuta fat class; empty when N/A"}}}},"meta":{"type":"object","description":"count, unit, as_of, next_cursor, attribution"},"links":{"type":"object","description":"self/next/related links"}}}}}},"402":{"description":"x402 payment required — this route is paid per request via the Meridian rating engine when fronted in production. Retry with a PAYMENT-SIGNATURE per the x402 protocol."},"404":{"description":"Problem details (RFC 9457), includes did-you-mean hints for unknown slugs","content":{"application/problem+json":{"schema":{"type":"object"}}}}}}},"/v1/products/{slug}/prices":{"get":{"summary":"Price series with cursor pagination (paid)","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","enum":["butter","smp","wmp","whey-powder","cheddar","edam","gouda","emmental","cream","butteroil","raw-milk","organic-raw-milk","tolminski-sir","mozzarella","trapist","livada","skuta","drinking-milk-whole","drinking-milk-semi","uht-milk-whole","uht-milk-semi","yogurt-plain","yogurt-fruit","cream-sweet","cream-sour","eggs-cage","eggs-barn","eggs-free-range","eggs-organic","eggs","wheat","feed-wheat","durum-wheat","barley","corn"]}},{"name":"member_state","in":"query","schema":{"type":"string"},"description":"filter to one state (EU, SI, DE, FR, …)"},{"name":"start","in":"query","schema":{"type":"string","format":"date"},"description":"period_start >= (YYYY-MM-DD)"},{"name":"end","in":"query","schema":{"type":"string","format":"date"},"description":"period_start <= (YYYY-MM-DD)"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"opaque; pass back meta.next_cursor verbatim"}],"responses":{"200":{"description":"observations","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name_en":{"type":"string"},"sector":{"type":"string"},"unit_canonical":{"type":"string","description":"EUR/100kg, EUR/t or EUR/100pcs"},"member_state":{"type":"string","description":"ISO-ish code; EU = union aggregate, EL = Greece"},"period_start":{"type":"string","format":"date"},"period_end":{"type":"string","format":"date"},"granularity":{"type":"string","enum":["week","month"]},"price_eur":{"type":"number"},"quality_class":{"type":"string","description":"variant within a product: egg farming method / egg size / skuta fat class; empty when N/A"}}}},"meta":{"type":"object","description":"count, unit, as_of, next_cursor, attribution"},"links":{"type":"object","description":"self/next/related links"}}}}}},"400":{"description":"Problem details (RFC 9457), includes did-you-mean hints for unknown slugs","content":{"application/problem+json":{"schema":{"type":"object"}}}},"402":{"description":"x402 payment required — this route is paid per request via the Meridian rating engine when fronted in production. Retry with a PAYMENT-SIGNATURE per the x402 protocol."},"404":{"description":"Problem details (RFC 9457), includes did-you-mean hints for unknown slugs","content":{"application/problem+json":{"schema":{"type":"object"}}}}}}}}}