Base URL: ${SUPABASE_URL}/rest/v1
All requests require the apikey header with your API key.
---
1. Read All Rows
Get all rows from a table:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?select=*" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
---
2. Select Specific Columns
Get only specific columns:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?select=id,name,email" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
---
3. Filter with Operators
Filter rows using PostgREST operators.
Equal to:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?status=eq.active" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
Greater than:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/products?price=gt.100" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
Multiple conditions (AND):
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?age=gte.18&status=eq.active" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
Available Operators:
| Operator | Meaning | Example |
|----------|---------|---------|
| eq | Equals | ?status=eq.active |
| neq | Not equals | ?status=neq.deleted |
| gt | Greater than | ?age=gt.18 |
| gte | Greater than or equal | ?age=gte.21 |
| lt | Less than | ?price=lt.100 |
| lte | Less than or equal | ?price=lte.50 |
| like | Pattern match (use for %) | ?name=like.john* |
| ilike | Case-insensitive pattern | ?name=ilike.john |
| in | In list | ?id=in.(1,2,3) |
| is | Is null/true/false | ?deleted_at=is.null |
---
4. OR Conditions
Use or for OR logic:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?or=(status.eq.active,status.eq.pending)" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
---
5. Ordering
Sort results.
Ascending:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?order=created_at.asc" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
Descending:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?order=created_at.desc" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
Multiple columns:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?order=status.asc,created_at.desc" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
---
6. Pagination
Use limit and offset.
First 10 rows:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?limit=10" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
Page 2 (rows 11-20):
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?limit=10&offset=10" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
---
7. Get Row Count
Use Prefer: count=exact header:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?select=*" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}" -H "Prefer: count=exact" -I | grep -i "content-range"'
```
---
8. Insert Single Row
Write to /tmp/supabase_request.json:
```json
{
"name": "John Doe",
"email": "john@example.com"
}
```
Then run:
```bash
bash -c 'curl -s -X POST "${SUPABASE_URL}/rest/v1/users" -H "apikey: ${SUPABASE_SECRET_KEY}" -H "Content-Type: application/json" -H "Prefer: return=representation" -d @/tmp/supabase_request.json'
```
---
9. Insert Multiple Rows
Write to /tmp/supabase_request.json:
```json
[
{"name": "John", "email": "john@example.com"},
{"name": "Jane", "email": "jane@example.com"}
]
```
Then run:
```bash
bash -c 'curl -s -X POST "${SUPABASE_URL}/rest/v1/users" -H "apikey: ${SUPABASE_SECRET_KEY}" -H "Content-Type: application/json" -H "Prefer: return=representation" -d @/tmp/supabase_request.json'
```
---
10. Update Rows
Update rows matching a filter.
Write to /tmp/supabase_request.json:
```json
{
"status": "inactive"
}
```
Then run:
```bash
bash -c 'curl -s -X PATCH "${SUPABASE_URL}/rest/v1/users?id=eq.1" -H "apikey: ${SUPABASE_SECRET_KEY}" -H "Content-Type: application/json" -H "Prefer: return=representation" -d @/tmp/supabase_request.json'
```
---
11. Upsert (Insert or Update)
Use Prefer: resolution=merge-duplicates.
Write to /tmp/supabase_request.json:
```json
{
"id": 1,
"name": "John Updated",
"email": "john@example.com"
}
```
Then run:
```bash
bash -c 'curl -s -X POST "${SUPABASE_URL}/rest/v1/users" -H "apikey: ${SUPABASE_SECRET_KEY}" -H "Content-Type: application/json" -H "Prefer: resolution=merge-duplicates,return=representation" -d @/tmp/supabase_request.json'
```
---
12. Delete Rows
Delete rows matching a filter:
```bash
bash -c 'curl -s -X DELETE "${SUPABASE_URL}/rest/v1/users?id=eq.1" -H "apikey: ${SUPABASE_SECRET_KEY}" -H "Prefer: return=representation"'
```
---
13. Query Related Tables
Embed related data using foreign keys.
Get posts with their author:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/posts?select=,author:users()" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
Get users with their posts:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/users?select=,posts()" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
---
14. Full-Text Search
Search text columns:
```bash
bash -c 'curl -s "${SUPABASE_URL}/rest/v1/posts?title=fts.hello" -H "apikey: ${SUPABASE_PUBLISHABLE_KEY}"'
```
---
15. Call RPC Functions
Call PostgreSQL functions.
Write to /tmp/supabase_request.json:
```json
{
"param1": "value1"
}
```
Then run:
```bash
bash -c 'curl -s -X POST "${SUPABASE_URL}/rest/v1/rpc/my_function" -H "apikey: ${SUPABASE_SECRET_KEY}" -H "Content-Type: application/json" -d @/tmp/supabase_request.json'
```
---