{"openapi":"3.1.0","info":{"title":"Ister /v1","version":"1","description":"Composite regional GPU price indices, one per region (EU, NA, AS…), each at its hub's close; an index reaches keys when it leaves its dry run. Read the docs page, /v1/docs, for the indices, keys, tiers, limits, caching and the deprecation rule."},"servers":[{"url":"https://api.isterindex.com/v1"}],"paths":{"/series":{"get":{"summary":"The latest print of each series, with its changes","description":"Tiers: anonymous, free, paid.","parameters":[{"name":"index","in":"query","required":false,"description":"Index code (EU, NA, AS…); Europe when none is named; see Indices in /v1/docs. Tiers: anonymous EU; free every published index; paid every published index","schema":{"type":"string","pattern":"^[A-Z]{2}$"}},{"name":"gpu","in":"query","required":false,"description":"GPU model, e.g. H100. Tiers: anonymous H100; free H100, B200; paid every GPU","schema":{"type":"string","pattern":"^[\\w .+-]{1,40}$"}},{"name":"type","in":"query","required":false,"description":"Series type: OD, T12 or SP","schema":{"type":"string","pattern":"^(OD|T12|SP)$"}},{"name":"format","in":"query","required":false,"description":"json (default) or csv","schema":{"type":"string","pattern":"^(json|csv)$"}}],"security":[{},{"bearer":[]},{"query":[]}],"operationId":"series","responses":{"200":{"description":"OK. ETag on every answer; send it back as If-None-Match for a 304.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Series"}},"meta":{"$ref":"#/components/schemas/Meta"}}}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"A parameter is unknown or has a bad value","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"No key, or a key not known, revoked or expired","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not in your tier","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls this hour; Retry-After says when to try again","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"The data is not available right now","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/history":{"get":{"summary":"Prints per series and date, oldest first","description":"Tiers: anonymous, free, paid.","parameters":[{"name":"index","in":"query","required":false,"description":"Index code (EU, NA, AS…); Europe when none is named; see Indices in /v1/docs. Tiers: anonymous EU; free every published index; paid every published index","schema":{"type":"string","pattern":"^[A-Z]{2}$"}},{"name":"gpu","in":"query","required":false,"description":"GPU model, e.g. H100. Tiers: anonymous H100; free H100, B200; paid every GPU","schema":{"type":"string","pattern":"^[\\w .+-]{1,40}$"}},{"name":"type","in":"query","required":false,"description":"Series type: OD, T12 or SP","schema":{"type":"string","pattern":"^(OD|T12|SP)$"}},{"name":"from","in":"query","required":false,"description":"First date, YYYY-MM-DD","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"to","in":"query","required":false,"description":"Last date, YYYY-MM-DD","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"view","in":"query","required":false,"description":"current (default): as restated; first_printed: each print as it first came out (tiers: paid)","schema":{"type":"string","pattern":"^(current|first_printed)$"}},{"name":"format","in":"query","required":false,"description":"json (default) or csv","schema":{"type":"string","pattern":"^(json|csv)$"}}],"security":[{},{"bearer":[]},{"query":[]}],"operationId":"history","responses":{"200":{"description":"OK. ETag on every answer; send it back as If-None-Match for a 304.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/History"}},"meta":{"$ref":"#/components/schemas/Meta"}}}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"A parameter is unknown or has a bad value","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"No key, or a key not known, revoked or expired","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not in your tier","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls this hour; Retry-After says when to try again","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"The data is not available right now","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/records/{date}":{"get":{"summary":"One Index Record: the day's print of every series with its disclosure; latest for the last one. As CSV, one row per series","description":"Tiers: anonymous, free, paid.","parameters":[{"name":"date","in":"path","required":true,"description":"YYYY-MM-DD or latest","schema":{"type":"string","pattern":"^(latest|\\d{4}-\\d{2}-\\d{2})$"}},{"name":"index","in":"query","required":false,"description":"Index code (EU, NA, AS…); Europe when none is named; see Indices in /v1/docs. Tiers: anonymous EU; free every published index; paid every published index","schema":{"type":"string","pattern":"^[A-Z]{2}$"}},{"name":"format","in":"query","required":false,"description":"json (default) or csv","schema":{"type":"string","pattern":"^(json|csv)$"}}],"security":[{},{"bearer":[]},{"query":[]}],"operationId":"record","responses":{"200":{"description":"OK. ETag on every answer; send it back as If-None-Match for a 304.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/IndexRecord"},"meta":{"$ref":"#/components/schemas/Meta"}}}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"A parameter is unknown or has a bad value","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"No key, or a key not known, revoked or expired","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Not in your tier","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No Index Record on that date","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls this hour; Retry-After says when to try again","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"The data is not available right now","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Authorization: Bearer ister_live_…"},"query":{"type":"apiKey","in":"query","name":"api_key","description":"For tools that cannot set a header, such as Google Sheets"}},"schemas":{"Series":{"type":"object","properties":{"code":{"type":"string","description":"Series code: GPU and type (H100.T12); with an index named, index first (EU.H100.T12)"},"index":{"type":"string","description":"Index code (EU, NA, AS…): see Indices in /v1/docs"},"gpu":{"type":"string","description":"GPU model"},"type":{"type":"string","description":"Series type: OD on-demand, T12 12-month term, SP spot"},"date":{"type":"string","format":"date","description":"Assessment date"},"state":{"type":"string","description":"printed, held or suspended"},"calc":{"type":["string","null"],"description":"median or trimmed_average"},"value_eur":{"type":["number","null"],"description":"Value in EUR per GPU-hour; absent when suspended"},"value_usd":{"type":["number","null"],"description":"Value in USD per GPU-hour, at the ECB rate of the day"},"n":{"type":"integer","description":"Number of providers in the value"},"hub_currency":{"type":["string","null"],"description":"The currency of the hub whose close the index is based on (GBP for Europe, London); null before it was given"},"value_hub":{"type":["number","null"],"description":"Value in the hub currency per GPU-hour, at the ECB rate of the day; null with no rate for it"},"countries":{"type":"array","items":{"type":"string"},"description":"ISO 3166 countries the providers deliver from"},"flags":{"type":"array","items":{"type":"string"},"description":"Flags the method shows publicly (Thin, Interpolated, Held, Suspended, Not updated today, All providers in one country)"},"input_levels":{"type":"object","additionalProperties":true,"description":"Share of the value from each input level (2 firm offers, 3 indicative quotes)"},"vat_not_stated":{"type":"integer","description":"Rows whose VAT treatment the provider does not state"},"form_factor_not_stated":{"type":"integer","description":"Rows whose form factor the provider does not state"},"form_factors":{"type":"object","additionalProperties":true,"description":"Share of the value from each form factor"},"last_calculated":{"type":["string","null"],"format":"date","description":"For a held series, the date it was last calculated"},"switch_notice":{"type":["string","null"],"description":"Notice that the calculation changes if the provider count stays"},"both_values":{"type":"object","additionalProperties":true,"description":"Near a change of calculation, the value by each"},"v02_value_eur":{"type":["number","null"],"description":"The value under method v0.2, beside it while both were shown"},"print_change":{"type":"object","properties":{"d1":{"type":["number","null"]},"w1":{"type":["number","null"]},"m3":{"type":["number","null"]},"m6":{"type":["number","null"]},"m12":{"type":["number","null"]},"since":{"type":["number","null"]}},"description":"Percentage change from the print 1 day, 1 week, 3, 6 and 12 months back, and since the history starts; null with no print that far back. A tier that reads part of the history works them within it: null from further back, and since always null"}}},"History":{"type":"object","properties":{"series":{"type":"string","description":"Series code"},"index":{"type":"string","description":"Index code (EU, NA, AS…): see Indices in /v1/docs"},"date":{"type":"string","format":"date","description":"Assessment date"},"kind":{"type":"string","description":"Always print for outside callers"},"state":{"type":"string","description":"printed, held or suspended"},"value_eur":{"type":["number","null"],"description":"Value in EUR per GPU-hour; absent when suspended"},"value_usd":{"type":["number","null"],"description":"Value in USD per GPU-hour, at the ECB rate of the day"},"hub_currency":{"type":["string","null"],"description":"The currency of the hub whose close the index is based on (GBP for Europe, London); null before it was given"},"value_hub":{"type":["number","null"],"description":"Value in the hub currency per GPU-hour, at the ECB rate of the day; null with no rate for it"},"n":{"type":"integer","description":"Number of providers in the value"},"flags":{"type":"array","items":{"type":"string"},"description":"Flags the method shows publicly (Thin, Interpolated, Held, Suspended, Not updated today, All providers in one country)"}}},"IndexRecord":{"type":"object","properties":{"index":{"type":"string","description":"Index code (EU, NA, AS…): see Indices in /v1/docs"},"assessment_date":{"type":"string","format":"date","description":"Assessment date"},"next_assessment":{"type":["string","null"],"format":"date","description":"Next assessment date, under a weekly method"},"methodology_version":{"type":"string","description":"Method version the print was made under"},"fx":{"type":"object","additionalProperties":true,"description":"ECB euro reference rates used, with their date"},"rules":{"type":"object","additionalProperties":true,"description":"The method's publication rules in force"},"types":{"type":"object","additionalProperties":true,"description":"Series types and their names"},"series":{"type":"object","additionalProperties":{"type":"object","properties":{"code":{"type":"string","description":"Series code: GPU and type (H100.T12); with an index named, index first (EU.H100.T12)"},"state":{"type":"string","description":"printed, held or suspended"},"calc":{"type":["string","null"],"description":"median or trimmed_average"},"value_eur":{"type":["number","null"],"description":"Value in EUR per GPU-hour; absent when suspended"},"value_usd":{"type":["number","null"],"description":"Value in USD per GPU-hour, at the ECB rate of the day"},"hub_currency":{"type":["string","null"],"description":"The currency of the hub whose close the index is based on (GBP for Europe, London); null before it was given"},"value_hub":{"type":["number","null"],"description":"Value in the hub currency per GPU-hour, at the ECB rate of the day; null with no rate for it"},"n":{"type":"integer","description":"Number of providers in the value"},"countries":{"type":"array","items":{"type":"string"},"description":"ISO 3166 countries the providers deliver from"},"flags":{"type":"array","items":{"type":"string"},"description":"Flags the method shows publicly (Thin, Interpolated, Held, Suspended, Not updated today, All providers in one country)"},"input_levels":{"type":"object","additionalProperties":true,"description":"Share of the value from each input level (2 firm offers, 3 indicative quotes)"},"vat_not_stated":{"type":"integer","description":"Rows whose VAT treatment the provider does not state"},"form_factor_not_stated":{"type":"integer","description":"Rows whose form factor the provider does not state"},"form_factors":{"type":"object","additionalProperties":true,"description":"Share of the value from each form factor"},"last_calculated":{"type":["string","null"],"format":"date","description":"For a held series, the date it was last calculated"},"switch_notice":{"type":["string","null"],"description":"Notice that the calculation changes if the provider count stays"},"both_values":{"type":"object","additionalProperties":true,"description":"Near a change of calculation, the value by each"},"v02_value_eur":{"type":["number","null"],"description":"The value under method v0.2, beside it while both were shown"}}}},"note":{"type":["string","null"],"description":"A note on the print, such as a restatement"}}},"Meta":{"type":"object","properties":{"audience":{"type":"string","description":"The tier the answer is shaped for: anonymous, free or paid"},"as_of":{"type":"string","format":"date","description":"Date the answer is as of"},"method_version":{"type":"string","description":"Method version of the answer"},"history_start":{"type":"string","format":"date","description":"First date of the index's history"},"readable_from":{"type":"string","format":"date","description":"First date your tier reads"},"close":{"type":"object","properties":{"time":{"type":"string"},"time_zone":{"type":"string"}},"description":"The index's close: the local time in its hub its prices are as of (EU 16:30 Europe/London; NA 16:30 America/New_York; AS 16:30 Asia/Singapore)"},"fixing_time":{"type":"string","format":"date-time","description":"The close on as_of, with its offset from UTC"},"view":{"type":"string","description":"current or first_printed"},"next_cursor":{"type":["string","null"],"description":"Pass back as cursor for the next page; null at the end"}}},"Problem":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"code":{"type":"string"}}}}}}