Skip to content

API Reference

BlockForge API documentation for developers.

Overview

BlockForge uses Supabase as its backend, providing:

  • REST API - Standard REST endpoints
  • Realtime Subscriptions - Real-time updates
  • Storage API - File upload and management
  • Edge Functions - Custom serverless functions

Authentication

BlockForge uses Supabase Auth for authentication.

Getting Started

javascript
import { createClient } from '@supabase/supabase-js'

const supabase = createClient(
  process.env.VITE_SUPABASE_URL,
  process.env.VITE_SUPABASE_ANON_KEY
)

Sign Up

javascript
const { data, error } = await supabase.auth.signUp({
  email: 'user@example.com',
  password: 'password123'
})

Sign In

javascript
const { data, error } = await supabase.auth.signInWithPassword({
  email: 'user@example.com',
  password: 'password123'
})

Sign Out

javascript
const { error } = await supabase.auth.signOut()

Pages API

List Pages

javascript
const { data, error } = await supabase
  .from('pages')
  .select('*')
  .eq('workspace_id', workspaceId)

Get Page

javascript
const { data, error } = await supabase
  .from('pages')
  .select('*')
  .eq('id', pageId)
  .single()

Create Page

javascript
const { data, error } = await supabase
  .from('pages')
  .insert([
    {
      title: 'New Page',
      workspace_id: workspaceId,
      content: { type: 'doc', content: [] }
    }
  ])

Update Page

javascript
const { data, error } = await supabase
  .from('pages')
  .update({ title: 'Updated Title' })
  .eq('id', pageId)

Delete Page

javascript
const { error } = await supabase
  .from('pages')
  .delete()
  .eq('id', pageId)

Tasks API

List Tasks

javascript
const { data, error } = await supabase
  .from('tasks')
  .select('*')
  .eq('workspace_id', workspaceId)

Create Task

javascript
const { data, error } = await supabase
  .from('tasks')
  .insert([
    {
      title: 'New Task',
      workspace_id: workspaceId,
      due_date: '2024-12-31'
    }
  ])

Update Task

javascript
const { data, error } = await supabase
  .from('tasks')
  .update({ completed: true })
  .eq('id', taskId)

Storage API

Upload File

javascript
const { data, error } = await supabase.storage
  .from('public-uploads')
  .upload('path/to/file.jpg', file)

Get Public URL

javascript
const { data } = supabase.storage
  .from('public-uploads')
  .getPublicUrl('path/to/file.jpg')

Delete File

javascript
const { error } = await supabase.storage
  .from('public-uploads')
  .remove(['path/to/file.jpg'])

Realtime Subscriptions

Subscribe to Changes

javascript
const subscription = supabase
  .channel('pages')
  .on('postgres_changes', 
    { event: '*', schema: 'public', table: 'pages' },
    (payload) => {
      console.log('Change received!', payload)
    }
  )
  .subscribe()

Unsubscribe

javascript
subscription.unsubscribe()

Edge Functions

BlockForge includes Edge Functions for:

  • AI API proxy
  • GitHub integration
  • Custom business logic

Calling Edge Functions

javascript
const { data, error } = await supabase.functions.invoke('function-name', {
  body: { key: 'value' }
})

Error Handling

All API calls return errors in this format:

javascript
{
  error: {
    message: 'Error message',
    status: 400
  }
}

Always check for errors:

javascript
const { data, error } = await supabase.from('pages').select('*')

if (error) {
  console.error('Error:', error.message)
  return
}

// Use data
console.log(data)

Rate Limits

  • Anonymous requests: Limited by Supabase plan
  • Authenticated requests: Higher limits
  • Edge Functions: Subject to function limits

Next Steps

Built with ❤️ for BlockForge