# RequestsToolkit

> **Class** in `langchain_community`

📖 [View in docs](https://reference.langchain.com/python/langchain-community/agent_toolkits/openapi/toolkit/RequestsToolkit)

Toolkit for making REST requests.

*Security Note*: This toolkit contains tools to make GET, POST, PATCH, PUT,
    and DELETE requests to an API.

    Exercise care in who is allowed to use this toolkit. If exposing
    to end users, consider that users will be able to make arbitrary
    requests on behalf of the server hosting the code. For example,
    users could ask the server to make a request to a private API
    that is only accessible from the server.

    Control access to who can submit issue requests using this toolkit and
    what network access it has.

    See https://python.langchain.com/docs/security for more information.

## Signature

```python
RequestsToolkit()
```

## Description

**Setup:**

Install ``langchain-community``.

.. code-block:: bash

    pip install -U langchain-community

**Key init args:**

requests_wrapper: langchain_community.utilities.requests.GenericRequestsWrapper
    wrapper for executing requests.
allow_dangerous_requests: bool
    Defaults to False. Must "opt-in" to using dangerous requests by setting to True.

**Instantiate:**

.. code-block:: python

from langchain_community.agent_toolkits.openapi.toolkit import RequestsToolkit
from langchain_community.utilities.requests import TextRequestsWrapper

toolkit = RequestsToolkit(
    requests_wrapper=TextRequestsWrapper(headers={}),
    allow_dangerous_requests=ALLOW_DANGEROUS_REQUEST,
)

**Tools:**

.. code-block:: python

    tools = toolkit.get_tools()
    tools

.. code-block:: none

    [RequestsGetTool(requests_wrapper=TextRequestsWrapper(headers={}, aiosession=None, auth=None, response_content_type='text', verify=True), allow_dangerous_requests=True),
    RequestsPostTool(requests_wrapper=TextRequestsWrapper(headers={}, aiosession=None, auth=None, response_content_type='text', verify=True), allow_dangerous_requests=True),
    RequestsPatchTool(requests_wrapper=TextRequestsWrapper(headers={}, aiosession=None, auth=None, response_content_type='text', verify=True), allow_dangerous_requests=True),
    RequestsPutTool(requests_wrapper=TextRequestsWrapper(headers={}, aiosession=None, auth=None, response_content_type='text', verify=True), allow_dangerous_requests=True),
    RequestsDeleteTool(requests_wrapper=TextRequestsWrapper(headers={}, aiosession=None, auth=None, response_content_type='text', verify=True), allow_dangerous_requests=True)]

**Use within an agent:**

.. code-block:: python

    from langchain_openai import ChatOpenAI
    from langgraph.prebuilt import create_react_agent

    api_spec = """
    openapi: 3.0.0
    info:
      title: JSONPlaceholder API
      version: 1.0.0
    servers:
      - url: https://jsonplaceholder.typicode.com
    paths:
      /posts:
        get:
          summary: Get posts
          parameters: &id001
            - name: _limit
              in: query
              required: false
              schema:
                type: integer
              example: 2
              description: Limit the number of results
    """

    system_message = """
    You have access to an API to help answer user queries.
    Here is documentation on the API:
    {api_spec}
    """.format(api_spec=api_spec)

    llm = ChatOpenAI(model="gpt-4o-mini")
    agent_executor = create_react_agent(llm, tools, state_modifier=system_message)

    example_query = "Fetch the top two posts. What are their titles?"

    events = agent_executor.stream(
        {"messages": [("user", example_query)]},
        stream_mode="values",
    )
    for event in events:
        event["messages"][-1].pretty_print()

.. code-block:: none

     ================================[1m Human Message [0m=================================

    Fetch the top two posts. What are their titles?
    ==================================[1m Ai Message [0m==================================
    Tool Calls:
    requests_get (call_RV2SOyzCnV5h2sm4WPgG8fND)
    Call ID: call_RV2SOyzCnV5h2sm4WPgG8fND
    Args:
        url: https://jsonplaceholder.typicode.com/posts?_limit=2
    =================================[1m Tool Message [0m=================================
    Name: requests_get

    [
    {
        "userId": 1,
        "id": 1,
        "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
        "body": "quia et suscipit..."
    },
    {
        "userId": 1,
        "id": 2,
        "title": "qui est esse",
        "body": "est rerum tempore vitae..."
    }
    ]
    ==================================[1m Ai Message [0m==================================

    The titles of the top two posts are:
    1. "sunt aut facere repellat provident occaecati excepturi optio reprehenderit"
    2. "qui est esse"

## Extends

- `BaseToolkit`

## Properties

- `requests_wrapper`
- `allow_dangerous_requests`

## Methods

- [`get_tools()`](https://reference.langchain.com/python/langchain-community/agent_toolkits/openapi/toolkit/RequestsToolkit/get_tools)

---

[View source on GitHub](https://github.com/langchain-ai/langchain-community/blob/a6a6079511ac8a5c1293337f88096b8641562e77/libs/community/langchain_community/agent_toolkits/openapi/toolkit.py#L25)