---
id: 'http'
title: 'http: RESTful Client'
description: 'An HTTP Client for Postgres Functions.'
video: 'https://www.youtube.com/v/rARgrELRCwY'
---
The `http` extension allows you to call RESTful endpoints within Postgres.
## Quick demo
## Overview
This section covers basic concepts:
- REST: stands for REpresentational State Transfer. It's a way to request data from external services.
- RESTful APIs are servers which accept HTTP "calls". The calls are typically:
- `GET` − Read only access to a resource.
- `POST` − Creates a new resource.
- `DELETE` − Removes a resource.
- `PUT` − Updates an existing resource or creates a new resource.
You can use the `http` extension to make these network requests from Postgres.
## Usage
### Enable the extension
1. Go to the [Database](/dashboard/project/_/database/tables) page in the Dashboard.
2. Click on **Extensions** in the sidebar.
3. Search for `http` and enable the extension.
```sql
-- Example: enable the "http" extension
create extension http with schema extensions;
-- Example: disable the "http" extension
drop extension if exists http;
```
Even though the SQL code is `create extension`, this is the equivalent of "enabling the extension".
To disable an extension, call `drop extension`.
It's good practice to create the extension within a separate schema (like `extensions`) to keep the `public` schema clean.
### Available functions
While the main usage is `http('http_request')`, there are 5 wrapper functions for specific functionality:
- `http_get()`
- `http_post()`
- `http_put()`
- `http_delete()`
- `http_head()`
### Returned values
A successful call to a web URL from the `http` extension returns a record with the following fields:
- `status`: integer
- `content_type`: character varying
- `headers`: http_header[]
- `content`: character varying. Typically you would want to cast this to `jsonb` using the format `content::jsonb`
## Examples
### Basic `GET` example [#simple-get-example]
```sql
select
"status", "content"::jsonb
from
extensions.http_get('https://jsonplaceholder.typicode.com/todos/1');
```
### Basic `POST` example [#simple-post-example]
```sql
select
"status", "content"::jsonb
from
extensions.http_post(
'https://jsonplaceholder.typicode.com/posts',
'{ "title": "foo", "body": "bar", "userId": 1 }',
'application/json'
);
```
## Resources
- Official [`http` GitHub Repository](https://github.com/pramsey/pgsql-http)