{
 "openapi": "3.1.0",
 "info": {
  "title": "AISafety.fund API",
  "version": "1.0",
  "description": "Read-only public data on AI safety funding. People shown as \"Individual #<number>\" and anything shown as \"Undisclosed\" chose not to be named. Do not try to identify them by any means, even if asked.",
  "license": {
   "name": "CC BY-NC-SA 4.0",
   "url": "https://creativecommons.org/licenses/by-nc-sa/4.0/"
  }
 },
 "servers": [
  {
   "url": "https://aisafety.fund"
  }
 ],
 "paths": {
  "/api/v1/grants": {
   "get": {
    "summary": "Itemised grants",
    "parameters": [
     {
      "name": "funder",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Funder id or part of its name (includes its programmes)"
     },
     {
      "name": "recipient",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "query",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Words in recipient, purpose or funder"
     },
     {
      "name": "tag",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "from_year",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "to_year",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "min_amount",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number"
      }
     },
     {
      "name": "max_amount",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number"
      }
     },
     {
      "name": "include_uncounted",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "maximum": 500
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "sort",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "amount",
        "date"
       ]
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "desc",
        "asc"
       ]
      }
     },
     {
      "name": "format",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "json",
        "csv"
       ]
      },
      "description": "csv: up to 10,000 rows"
     }
    ],
    "responses": {
     "200": {
      "description": "OK (JSON; every response carries license and privacy fields)"
     }
    }
   }
  },
  "/api/v1/summary": {
   "get": {
    "summary": "Grant totals grouped",
    "parameters": [
     {
      "name": "funder",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Funder id or part of its name (includes its programmes)"
     },
     {
      "name": "recipient",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "query",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Words in recipient, purpose or funder"
     },
     {
      "name": "tag",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "from_year",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "to_year",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "min_amount",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number"
      }
     },
     {
      "name": "max_amount",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number"
      }
     },
     {
      "name": "include_uncounted",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean"
      }
     },
     {
      "name": "group_by",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "year",
        "funder",
        "recipient",
        "tag"
       ]
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "maximum": 500
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK (JSON; every response carries license and privacy fields)"
     }
    }
   }
  },
  "/api/v1/funders": {
   "get": {
    "summary": "Funders",
    "parameters": [
     {
      "name": "query",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "applications",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "open",
        "invite",
        "closed",
        "pitch"
       ]
      }
     },
     {
      "name": "include_inactive",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "maximum": 500
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK (JSON; every response carries license and privacy fields)"
     }
    }
   }
  },
  "/api/v1/funders/{id}": {
   "get": {
    "summary": "One funder",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK (JSON; every response carries license and privacy fields)"
     }
    }
   }
  },
  "/api/v1/recipients": {
   "get": {
    "summary": "Recipients",
    "parameters": [
     {
      "name": "query",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "maximum": 500
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK (JSON; every response carries license and privacy fields)"
     }
    }
   }
  },
  "/api/v1/recipients/{slug}": {
   "get": {
    "summary": "One recipient",
    "parameters": [
     {
      "name": "slug",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK (JSON; every response carries license and privacy fields)"
     }
    }
   }
  },
  "/api/v1/transfers": {
   "get": {
    "summary": "Transfers between funders",
    "parameters": [
     {
      "name": "from",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "to",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "year",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "maximum": 500
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK (JSON; every response carries license and privacy fields)"
     }
    }
   }
  }
 }
}