--- id: 'creating-routes' title: 'Creating API Routes' description: 'API routes are automatically created when you create Postgres Tables, Views, or Functions.' --- API routes are automatically created when you create Postgres Tables, Views, or Functions. ## Create a table Let's create our first API route by creating a table called `todos` to store tasks. This creates a corresponding route `todos` which can accept `GET`, `POST`, `PATCH`, & `DELETE` requests. 1. Go to the [Table editor](https://supabase.com/dashboard/project/_/editor) page in the Dashboard. 1. Click **New Table** and create a table with the name `todos`. 1. Click **Save**. 1. Click **New Column** and create a column with the name `task` and type `text`. 1. Click **Save**. ```sql -- Create a table called "todos" with a column to store tasks. create table todos ( id bigint generated by default as identity primary key, task text check (char_length(task) > 3) ); ``` ## API URL and keys Every Supabase project has a unique API URL. Your API is secured behind an API gateway which requires an API Key for every request. 1. Go to the [Settings](https://supabase.com/dashboard/project/_/settings/general) page in the Dashboard. 2. Click **API** in the sidebar. 3. Find your API `URL`, `anon`, and `service_role` keys on this page. The REST API is accessible through the URL `https://.supabase.co/rest/v1` Both of these routes require the `anon` key to be passed through an `apikey` header. ## Using the API You can interact with your API directly via HTTP requests, or you can use the client libraries which we provide. Let's see how to make a request to the `todos` table which we created in the first step, using the API URL (`SUPABASE_URL`) and Key (`SUPABASE_ANON_KEY`) we provided: ```javascript // Initialize the JS client import { createClient } from '@supabase/supabase-js' const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY) // Make a request const { data: todos, error } = await supabase.from('todos').select('*') ``` ```bash # Append /rest/v1/ to your URL, and then use the table name as the route curl '/rest/v1/todos' \ -H "apikey: " \ -H "Authorization: Bearer " ``` JS Reference: [select()](/docs/reference/javascript/select), [insert()](/docs/reference/javascript/insert), [update()](/docs/reference/javascript/update), [upsert()](/docs/reference/javascript/upsert), [delete()](/docs/reference/javascript/delete), [rpc()](/docs/reference/javascript/rpc) (call Postgres functions).