{
 "openapi": "3.1.0",
 "info": {
  "title": "Global Financial Information data API",
  "version": "1.0.0",
  "description": "Free to cite, paid to compute with. Every series level with unit, as-of date, source status and a finished citation string, no key required. History depth, revision records, bulk export and the statutory rules layer are licensed.",
  "license": {
   "name": "CC BY 4.0 (free), commercial licence (paid)",
   "url": "https://globalfinancialinfo.info/licence"
  },
  "x-generated": "2026-11-13T15:53:58+00:00"
 },
 "servers": [
  {
   "url": "https://huggingface.co/datasets/globalfinancialinfo/global-policy-rate-map/resolve/main/api/v1",
   "description": "Free tier, no key required. Branded base. The host serves every JSON file as text/plain; the body is JSON."
  },
  {
   "url": "https://packersblacktemplars-sketch.github.io/gfi-api/api/v1",
   "description": "Identical bytes, served as application/json, for clients that validate Content-Type."
  }
 ],
 "security": [],
 "components": {
  "schemas": {
   "Observation": {
    "type": "object",
    "required": [
     "value",
     "source_status",
     "coverage_tier"
    ],
    "properties": {
     "value": {
      "type": "number"
     },
     "as_of": {
      "type": [
       "string",
       "null"
      ],
      "description": "observation date; null for annual figures"
     },
     "period": {
      "type": [
       "string",
       "null"
      ],
      "description": "YYYY when granularity is annual"
     },
     "granularity": {
      "type": "string",
      "enum": [
       "event",
       "annual",
       "derived"
      ]
     },
     "is_estimate": {
      "type": "boolean"
     },
     "source": {
      "type": [
       "string",
       "null"
      ]
     },
     "source_url": {
      "type": [
       "string",
       "null"
      ]
     },
     "source_status": {
      "type": "string",
      "enum": [
       "secondary_compilation",
       "derived",
       "derived_from_unverified_pair",
       "unresolved"
      ]
     },
     "inputs": {
      "type": "object"
     },
     "comparability": {
      "type": [
       "string",
       "null"
      ],
      "enum": [
       "comparable",
       "stale_inputs",
       "not_comparable",
       null
      ]
     },
     "comparability_note": {
      "type": "string"
     },
     "review_required": {
      "type": "boolean"
     }
    }
   },
   "Series": {
    "type": "object",
    "properties": {
     "series_id": {
      "type": "string",
      "example": "USA.POLICY.RATE"
     },
     "subject": {
      "type": "string"
     },
     "country": {
      "type": "object",
      "properties": {
       "name": {
        "type": "string"
       },
       "iso3": {
        "type": "string"
       }
      }
     },
     "family": {
      "type": "string"
     },
     "measure": {
      "type": "string"
     },
     "unit": {
      "type": "string"
     },
     "coverage_tier": {
      "type": "string"
     },
     "source_status": {
      "type": "string"
     },
     "review_required": {
      "type": "boolean"
     },
     "latest": {
      "$ref": "#/components/schemas/Observation"
     },
     "prior": {
      "type": [
       "object",
       "null"
      ]
     },
     "change": {
      "type": [
       "object",
       "null"
      ]
     },
     "observations": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "date": {
         "type": "string"
        },
        "value": {
         "type": "number"
        },
        "status": {
         "type": "string"
        }
       }
      }
     },
     "history": {
      "type": "object",
      "properties": {
       "status": {
        "type": "string"
       },
       "window_returned": {
        "type": "integer"
       },
       "window_limit": {
        "type": "integer"
       }
      }
     },
     "revisions": {
      "type": "object",
      "properties": {
       "gated": {
        "type": "boolean"
       },
       "count": {
        "type": "integer"
       },
       "records": {
        "type": "array",
        "items": {
         "type": "object"
        }
       },
       "upgrade": {
        "type": "string"
       }
      }
     },
     "definition": {
      "type": "string"
     },
     "data_as_of": {
      "type": "string"
     },
     "retrieved_at": {
      "type": "string"
     },
     "citation": {
      "type": "string"
     },
     "license": {
      "type": "string"
     }
    }
   },
   "CatalogPage": {
    "type": "object",
    "properties": {
     "total": {
      "type": "integer"
     },
     "returned": {
      "type": "integer"
     },
     "cursor": {
      "type": "integer"
     },
     "has_more": {
      "type": "boolean"
     },
     "data_as_of": {
      "type": "string"
     },
     "series": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "series_id": {
         "type": "string"
        },
        "subject": {
         "type": "string"
        },
        "iso3": {
         "type": "string"
        },
        "family": {
         "type": "string"
        },
        "unit": {
         "type": "string"
        },
        "value": {
         "type": "number"
        },
        "as_of": {
         "type": [
          "string",
          "null"
         ]
        },
        "coverage_tier": {
         "type": "string"
        }
       }
      }
     }
    }
   },
   "Packet": {
    "type": "object",
    "properties": {
     "country": {
      "type": "object"
     },
     "data_as_of": {
      "type": "string"
     },
     "blocks": {
      "type": "object",
      "description": "state, shifts, rules, people, places, news. Only state is populated today. A gated block returns {gated:true}; an uncollected block returns status:not_collected.",
      "properties": {
       "state": {
        "type": "object"
       },
       "shifts": {
        "type": "object"
       },
       "rules": {
        "type": "object"
       },
       "people": {
        "type": "object"
       },
       "places": {
        "type": "object"
       },
       "news": {
        "type": "object"
       }
      }
     },
     "sources": {
      "type": "array",
      "items": {
       "type": "object"
      }
     },
     "citation": {
      "type": "string"
     }
    }
   },
   "Error": {
    "type": "object",
    "properties": {
     "error": {
      "type": "string"
     },
     "message": {
      "type": "string"
     },
     "docs": {
      "type": "string"
     },
     "upgrade": {
      "type": "string"
     }
    }
   }
  }
 },
 "paths": {
  "/index.json": {
   "get": {
    "summary": "Service description: counts, data_as_of, tier, static endpoint map",
    "responses": {
     "200": {
      "description": "counts, tier, limits, endpoint map",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     }
    }
   }
  },
  "/catalog.json": {
   "get": {
    "summary": "All servable series with level, unit, as-of, source status and citation",
    "responses": {
     "200": {
      "description": "one page of series",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CatalogPage"
        }
       }
      }
     }
    }
   }
  },
  "/series/{series_id}.json": {
   "get": {
    "summary": "One series: latest, prior, change, definition, citation",
    "responses": {
     "200": {
      "description": "series with latest, observations and citation",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Series"
        }
       }
      }
     },
     "404": {
      "description": "unknown series",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    },
    "parameters": [
     {
      "name": "series_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "example": "USA.POLICY.RATE"
     }
    ]
   }
  },
  "/country/{iso3}.json": {
   "get": {
    "summary": "Country packet: standing state, shifts, news, sources, citation",
    "responses": {
     "200": {
      "description": "country blocks, sources, citation",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Packet"
        }
       }
      }
     },
     "404": {
      "description": "unknown country",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    },
    "parameters": [
     {
      "name": "iso3",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "pattern": "^[A-Z]{3}$"
      },
      "example": "ZAF"
     }
    ]
   }
  },
  "/changes.json": {
   "get": {
    "summary": "Verified shift rows only; an empty set is declared, never zero",
    "responses": {
     "200": {
      "description": "verified rows, or status not_collected with an empty set"
     }
    }
   }
  }
 }
}
