Supabase Database API
Connect to your Supabase database tables with a simple REST API. Query, insert, update, and delete data securely.
Overview
API Plugin’s Supabase Database API provides a secure way to interact with your Supabase database tables. It’s perfect for connecting frontend applications to your Supabase backend without exposing your API keys.
Key benefits include:
- Secure database interactions
- RESTful table operations
- Flexible query capabilities
- Powerful filtering options
- Pagination support
- Sorting and ordering
- Data manipulation (insert, update, delete)
- Authentication and authorization
- Rate limiting and usage tracking
How to Setup
We assume you have signed up on API Plugin and are logged into the dashboard.
-
Get Supabase Credentials:
- Create a Supabase project at supabase.com
- Go to your project settings and get your Project URL and API Key
- You’ll need the URL and the
anon
public API key
-
Configure API:
- Go to API Plugin marketplace
- Select Supabase Database API
- Input your Supabase URL and API Key
- Create API endpoint
Available Endpoints
- List Tables
GET /v1/{appId}/{token}/tables
Lists all tables in your Supabase database.
Example Request:
/v1/{appId}/{token}/tables
- Query Table
GET /v1/{appId}/{token}/query
Parameters:
table
(required): Table nameselect
: Fields to select (default: “*”)filter
: Filter condition (e.g., “id=eq.1”)order
: Order by field (e.g., “created_at.desc”)limit
: Maximum number of rowsoffset
: Number of rows to skip
Example Request:
/v1/{appId}/{token}/query?table=users&select=id,name,email&filter=status=eq.active&order=created_at.desc&limit=10
- Insert Data
POST /v1/{appId}/{token}/insert?table=table_name
Parameters:
table
(required): Table name
Body: Object or array of objects containing the data to insert.
Example Request:
// POST /v1/{appId}/{token}/insert?table=users
{
"name": "John Doe",
"email": "john@example.com",
"status": "active"
}
- Update Data
PATCH /v1/{appId}/{token}/update?table=table_name&filter=filter_condition
Parameters:
table
(required): Table namefilter
(required): Filter condition (e.g., “id=eq.1”)
Body: Object containing the fields to update.
Example Request:
// PATCH /v1/{appId}/{token}/update?table=users&filter=id=eq.1
{
"status": "inactive",
"updated_at": "2025-05-02T12:00:00Z"
}
- Delete Data
DELETE /v1/{appId}/{token}/delete?table=table_name&filter=filter_condition
Parameters:
table
(required): Table namefilter
(required): Filter condition (e.g., “id=eq.1”)
Example Request:
DELETE /v1/{appId}/{token}/delete?table=users&filter=status=eq.inactive
Understanding Filters
Supabase supports powerful filtering options using PostgreSQL-inspired syntax:
- Equality:
column=eq.value
- Greater than:
column=gt.value
- Less than:
column=lt.value
- Greater than or equal:
column=gte.value
- Less than or equal:
column=lte.value
- Not equal:
column=neq.value
- Like:
column=like.%value%
- IN:
column=in.(value1,value2,value3)
- IS:
column=is.null
Multiple filters can be combined with &
.
Example:
/v1/{appId}/{token}/query?table=products&filter=price=gt.100&filter=category=eq.electronics
Example Code
// Query users table
const getUsers = async () => {
try {
const response = await fetch(`/v1/{appId}/{token}/query?table=users&select=id,name,email&filter=status=eq.active&order=created_at.desc&limit=10`);
const users = await response.json();
console.log(`Found ${users.length} active users:`);
users.forEach((user) => {
console.log(`${user.id}: ${user.name} (${user.email})`);
});
return users;
} catch (error) {
console.error('Error fetching users:', error);
}
};
// Insert a new record
const createUser = async (userData) => {
try {
const response = await fetch(`/v1/{appId}/{token}/insert?table=users`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(userData),
});
const result = await response.json();
console.log('User created successfully:', result);
return result;
} catch (error) {
console.error('Error creating user:', error);
}
};
// Update a record
const updateUser = async (userId, updates) => {
try {
const response = await fetch(`/v1/{appId}/{token}/update?table=users&filter=id=eq.${userId}`, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(updates),
});
const result = await response.json();
console.log('User updated successfully:', result);
return result;
} catch (error) {
console.error('Error updating user:', error);
}
};
// Delete a record
const deleteUser = async (userId) => {
try {
const response = await fetch(`/v1/{appId}/{token}/delete?table=users&filter=id=eq.${userId}`, {
method: 'DELETE',
});
const result = await response.json();
console.log('User deleted successfully:', result);
return result;
} catch (error) {
console.error('Error deleting user:', error);
}
};