{
  "service": "openalex",
  "displayName": "OpenAlex",
  "categories": [
    "Data"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "OPENALEX_API_KEY",
      "description": "OpenAlex API key sent as the api_key query parameter. Create or view your key in the OpenAlex API authentication settings: https://developers.openalex.org/api-reference/authentication",
      "extraFields": []
    }
  ],
  "homepageUrl": "https://openalex.org/",
  "actions": [
    {
      "id": "openalex.autocomplete",
      "service": "openalex",
      "name": "autocomplete",
      "description": "Return OpenAlex autocomplete suggestions for a search string.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "search": {
            "type": "string",
            "minLength": 1,
            "description": "A full-text search string sent with OpenAlex search."
          },
          "entity": {
            "type": "string",
            "enum": [
              "works",
              "authors",
              "sources",
              "institutions",
              "topics",
              "publishers",
              "funders"
            ],
            "description": "The OpenAlex entity collection to query."
          },
          "perPage": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "description": "The number of records to return per page."
          }
        },
        "additionalProperties": false,
        "required": [
          "search"
        ],
        "description": "Input parameters for OpenAlex autocomplete."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "meta": {
            "type": "object",
            "properties": {
              "count": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The total number of records matching the query."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "dbResponseTimeMs": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The upstream database response time in milliseconds."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The current page number when page pagination is used."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "perPage": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The number of records returned per page."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "nextCursor": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The next cursor value for cursor pagination."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "groupsCount": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The total group count when grouping is used."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw OpenAlex object."
              }
            },
            "additionalProperties": false,
            "description": "The OpenAlex response metadata."
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The OpenAlex entity URL identifier."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "openalexId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The short OpenAlex identifier extracted from the URL."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "displayName": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The autocomplete display name."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hint": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The OpenAlex hint text for the result."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "entityType": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The OpenAlex entity type returned for the result."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "citedByCount": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "description": "The citation count returned for the result."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "worksCount": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "description": "The works count returned for the result."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "externalId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "An external identifier returned by OpenAlex when present."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw OpenAlex object."
                }
              },
              "additionalProperties": false,
              "description": "A normalized OpenAlex autocomplete item."
            },
            "description": "The normalized OpenAlex autocomplete results."
          },
          "rawResults": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true,
              "description": "The raw OpenAlex object."
            },
            "description": "The raw OpenAlex autocomplete results."
          }
        },
        "additionalProperties": false,
        "description": "The response returned by OpenAlex autocomplete."
      }
    },
    {
      "id": "openalex.get_entity",
      "service": "openalex",
      "name": "get_entity",
      "description": "Get one OpenAlex entity by identifier from a supported collection.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "works",
              "authors",
              "sources",
              "institutions",
              "topics",
              "publishers",
              "funders"
            ],
            "description": "The OpenAlex entity collection to query."
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The OpenAlex entity identifier, such as W2741809807, A5023888391, or an OpenAlex URL."
          }
        },
        "additionalProperties": false,
        "required": [
          "entity",
          "id"
        ],
        "description": "Input parameters for getting one OpenAlex entity."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "object",
            "properties": {
              "id": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The OpenAlex entity URL identifier."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "openalexId": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The short OpenAlex identifier extracted from the entity URL."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "displayName": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The entity display name or title."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "worksCount": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The number of works associated with the entity."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "citedByCount": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The number of citations associated with the entity."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "homepageUrl": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The homepage URL returned by OpenAlex when present."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw OpenAlex object."
              }
            },
            "additionalProperties": false,
            "description": "A normalized OpenAlex entity summary."
          },
          "raw": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw OpenAlex object."
          }
        },
        "additionalProperties": false,
        "description": "The response returned when getting one OpenAlex entity."
      }
    },
    {
      "id": "openalex.get_work",
      "service": "openalex",
      "name": "get_work",
      "description": "Get one OpenAlex work by identifier.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The OpenAlex entity identifier, such as W2741809807, A5023888391, or an OpenAlex URL."
          }
        },
        "additionalProperties": false,
        "required": [
          "id"
        ],
        "description": "Input parameters for getting one OpenAlex work."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "work": {
            "type": "object",
            "properties": {
              "id": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The OpenAlex work URL identifier."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "openalexId": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The short OpenAlex work identifier extracted from the URL."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "doi": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The DOI returned by OpenAlex when present."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The work title."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "publicationYear": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The work publication year."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "publicationDate": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The work publication date."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "type": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The OpenAlex work type."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "citedByCount": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The number of citations for the work."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "openAccessUrl": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The best open access URL returned by OpenAlex."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "primaryLocationUrl": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The landing page URL from the primary location."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw OpenAlex object."
              }
            },
            "additionalProperties": false,
            "description": "A normalized OpenAlex work summary."
          },
          "raw": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw OpenAlex object."
          }
        },
        "additionalProperties": false,
        "description": "The response returned when getting one OpenAlex work."
      }
    },
    {
      "id": "openalex.list_entities",
      "service": "openalex",
      "name": "list_entities",
      "description": "List, search, filter, page, or group OpenAlex entities from the supported collections.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "works",
              "authors",
              "sources",
              "institutions",
              "topics",
              "publishers",
              "funders"
            ],
            "description": "The OpenAlex entity collection to query."
          },
          "search": {
            "type": "string",
            "minLength": 1,
            "description": "A full-text search string sent with OpenAlex search."
          },
          "filter": {
            "type": "string",
            "minLength": 1,
            "description": "An OpenAlex filter expression, such as publication_year:2024 or cited_by_count:>100."
          },
          "sort": {
            "type": "string",
            "minLength": 1,
            "description": "An OpenAlex sort expression, such as cited_by_count:desc or publication_year:desc."
          },
          "cursor": {
            "type": "string",
            "minLength": 1,
            "description": "The OpenAlex cursor value for cursor pagination. Use * for the first page."
          },
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "The OpenAlex page number for basic paging."
          },
          "perPage": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "description": "The number of records to return per page."
          },
          "select": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One OpenAlex field name to include in the response."
            },
            "description": "Specific OpenAlex fields to return.",
            "minItems": 1
          },
          "groupBy": {
            "type": "string",
            "minLength": 1,
            "description": "An OpenAlex field to group by, such as publication_year or institutions.country_code."
          },
          "sample": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "description": "The number of random records to sample."
          },
          "seed": {
            "type": "integer",
            "description": "The seed used with OpenAlex random sampling."
          }
        },
        "additionalProperties": false,
        "required": [
          "entity"
        ],
        "description": "Input parameters for listing or searching OpenAlex entities."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "meta": {
            "type": "object",
            "properties": {
              "count": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The total number of records matching the query."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "dbResponseTimeMs": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The upstream database response time in milliseconds."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The current page number when page pagination is used."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "perPage": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The number of records returned per page."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "nextCursor": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The next cursor value for cursor pagination."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "groupsCount": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The total group count when grouping is used."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw OpenAlex object."
              }
            },
            "additionalProperties": false,
            "description": "The OpenAlex response metadata."
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The OpenAlex entity URL identifier."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "openalexId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The short OpenAlex identifier extracted from the entity URL."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "displayName": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The entity display name or title."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "worksCount": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "description": "The number of works associated with the entity."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "citedByCount": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "description": "The number of citations associated with the entity."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "homepageUrl": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The homepage URL returned by OpenAlex when present."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw OpenAlex object."
                }
              },
              "additionalProperties": false,
              "description": "A normalized OpenAlex entity summary."
            },
            "description": "The normalized OpenAlex entity results."
          },
          "groups": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The OpenAlex group key."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "keyDisplayName": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The display name for the group key."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "count": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "description": "The number of records in this group."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw OpenAlex object."
                }
              },
              "additionalProperties": false,
              "description": "A normalized OpenAlex group result."
            },
            "description": "The normalized OpenAlex group results when groupBy is used."
          },
          "rawResults": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true,
              "description": "The raw OpenAlex object."
            },
            "description": "The raw OpenAlex results."
          }
        },
        "additionalProperties": false,
        "description": "The response returned when listing OpenAlex entities."
      }
    },
    {
      "id": "openalex.list_works",
      "service": "openalex",
      "name": "list_works",
      "description": "List, search, filter, page, or group OpenAlex works with work-focused normalized fields.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "search": {
            "type": "string",
            "minLength": 1,
            "description": "A full-text search string sent with OpenAlex search."
          },
          "filter": {
            "type": "string",
            "minLength": 1,
            "description": "An OpenAlex filter expression, such as publication_year:2024 or cited_by_count:>100."
          },
          "sort": {
            "type": "string",
            "minLength": 1,
            "description": "An OpenAlex sort expression, such as cited_by_count:desc or publication_year:desc."
          },
          "cursor": {
            "type": "string",
            "minLength": 1,
            "description": "The OpenAlex cursor value for cursor pagination. Use * for the first page."
          },
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "The OpenAlex page number for basic paging."
          },
          "perPage": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "description": "The number of records to return per page."
          },
          "select": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One OpenAlex field name to include in the response."
            },
            "description": "Specific OpenAlex fields to return.",
            "minItems": 1
          },
          "groupBy": {
            "type": "string",
            "minLength": 1,
            "description": "An OpenAlex field to group by, such as publication_year or institutions.country_code."
          },
          "sample": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "description": "The number of random records to sample."
          },
          "seed": {
            "type": "integer",
            "description": "The seed used with OpenAlex random sampling."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for listing or searching OpenAlex works."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "meta": {
            "type": "object",
            "properties": {
              "count": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The total number of records matching the query."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "dbResponseTimeMs": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The upstream database response time in milliseconds."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The current page number when page pagination is used."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "perPage": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The number of records returned per page."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "nextCursor": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The next cursor value for cursor pagination."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "groupsCount": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The total group count when grouping is used."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw OpenAlex object."
              }
            },
            "additionalProperties": false,
            "description": "The OpenAlex response metadata."
          },
          "works": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The OpenAlex work URL identifier."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "openalexId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The short OpenAlex work identifier extracted from the URL."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "doi": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The DOI returned by OpenAlex when present."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "title": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The work title."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "publicationYear": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "description": "The work publication year."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "publicationDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The work publication date."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "type": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The OpenAlex work type."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "citedByCount": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "description": "The number of citations for the work."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "openAccessUrl": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The best open access URL returned by OpenAlex."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "primaryLocationUrl": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The landing page URL from the primary location."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw OpenAlex object."
                }
              },
              "additionalProperties": false,
              "description": "A normalized OpenAlex work summary."
            },
            "description": "The normalized OpenAlex works."
          },
          "groups": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The OpenAlex group key."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "keyDisplayName": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The display name for the group key."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "count": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "description": "The number of records in this group."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw OpenAlex object."
                }
              },
              "additionalProperties": false,
              "description": "A normalized OpenAlex group result."
            },
            "description": "The normalized OpenAlex group results when groupBy is used."
          },
          "rawResults": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true,
              "description": "The raw OpenAlex object."
            },
            "description": "The raw OpenAlex work results."
          }
        },
        "additionalProperties": false,
        "description": "The response returned when listing OpenAlex works."
      }
    }
  ]
}
