Supabase Database API

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.

  1. 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
  2. Configure API:

    • Go to API Plugin marketplace
    • Select Supabase Database API
    • Input your Supabase URL and API Key
    • Create API endpoint

Playground

Available Endpoints

  1. List Tables
GET /v1/{appId}/{token}/tables

Lists all tables in your Supabase database.

Example Request:

/v1/{appId}/{token}/tables
  1. Query Table
GET /v1/{appId}/{token}/query

Parameters:

  • table (required): Table name
  • select: 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 rows
  • offset: 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
  1. 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"
}
  1. Update Data
PATCH /v1/{appId}/{token}/update?table=table_name&filter=filter_condition

Parameters:

  • table (required): Table name
  • filter (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"
}
  1. Delete Data
DELETE /v1/{appId}/{token}/delete?table=table_name&filter=filter_condition

Parameters:

  • table (required): Table name
  • filter (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:

  1. Equality: column=eq.value
  2. Greater than: column=gt.value
  3. Less than: column=lt.value
  4. Greater than or equal: column=gte.value
  5. Less than or equal: column=lte.value
  6. Not equal: column=neq.value
  7. Like: column=like.%value%
  8. IN: column=in.(value1,value2,value3)
  9. 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);
    }
};