Python API Reference | Supabase Docs



1

import os

2

from supabase import create_client, Client

3

4

url: str = os.environ.get("SUPABASE_URL")

5

key: str = os.environ.get("SUPABASE_KEY")

6

supabase: Client = create_client(url, key)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.execute()

5

)


1

response = (

2

supabase.table("planets")

3

.insert({"id": 1, "name": "Pluto"})

4

.execute()

5

)


1

response = (

2

supabase.table("instruments")

3

.update({"name": "piano"})

4

.eq("id", 1)

5

.execute()

6

)


1

response = (

2

supabase.table("instruments")

3

.upsert({"id": 1, "name": "piano"})

4

.execute()

5

)


1

response = (

2

supabase.table("countries")

3

.delete()

4

.eq("id", 1)

5

.execute()

6

)


1

response = (

2

supabase.rpc("hello_world")

3

.execute()

4

)


1

# Correct

2

response = (

3

supabase.table("instruments")

4

.select("name, section_id")

5

.eq("name", "flute")

6

.execute()

7

)

8

9

# Incorrect

10

response = (

11

supabase.table("instruments")

12

.eq("name", "flute")

13

.select("name, section_id")

14

.execute()

15

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.eq("name", "Earth")

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.neq("name", "Earth")

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.gt("id", 2)

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.gte("id", 2)

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.lt("id", 2)

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.lte("id", 2)

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.like("name", "%Ea%")

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.ilike("name", "%ea%")

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.is_("name", "null")

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.in_("name", ["Earth", "Mars"])

5

.execute()

6

)


1

response = (

2

supabase.table("issues")

3

.select("*")

4

.contains("tags", ["is:open", "priority:low"])

5

.execute()

6

)


1

response = (

2

supabase.table("classes")

3

.select("name")

4

.contained_by("days", ["monday", "tuesday", "wednesday", "friday"])

5

.execute()

6

)


1

response = (

2

supabase.table("reservations")

3

.select("*")

4

.range_gt("during", ["2000-01-02 08:00", "2000-01-02 09:00"])

5

.execute()

6

)


1

response = (

2

supabase.table("reservations")

3

.select("*")

4

.range_gte("during", ["2000-01-02 08:30", "2000-01-02 09:30"])

5

.execute()

6

)


1

response = (

2

supabase.table("reservations")

3

.select("*")

4

.range_lt("during", ["2000-01-01 15:00", "2000-01-01 16:00"])

5

.execute()

6

)


1

response = (

2

supabase.table("reservations")

3

.select("*")

4

.range_lte("during", ["2000-01-01 14:00", "2000-01-01 16:00"])

5

.execute()

6

)


1

response = (

2

supabase.table("reservations")

3

.select("*")

4

.range_adjacent("during", ["2000-01-01 12:00", "2000-01-01 13:00"])

5

.execute()

6

)


1

response = (

2

supabase.table("issues")

3

.select("title")

4

.overlaps("tags", ["is:closed", "severity:high"])

5

.execute()

6

)


1

response = (

2

supabase.table("texts")

3

.select("content")

4

.text_search(

5

"content",

6

"'eggs' & 'ham'",

7

options={"config": "english"},

8

)

9

.execute()

10

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.match({"id": 2, "name": "Earth"})

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.not_.is_("name", "null")

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("name")

4

.or_("id.eq.2,name.eq.Mars")

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.filter("name", "in", '("Mars","Tatooine")')

5

.execute()

6

)



1

response = (

2

supabase.table("planets")

3

.select("*")

4

.order("name", desc=True)

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("name")

4

.limit(1)

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("name")

4

.range(0, 1)

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("name")

4

.limit(1)

5

.single()

6

.execute()

7

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.eq("name", "Earth")

5

.maybe_single()

6

.execute()

7

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.csv()

5

.execute()

6

)


1

response = (

2

supabase.table("planets")

3

.select("*")

4

.explain()

5

.execute()

6

)



1

response = supabase.auth.sign_up(

2

{

3

"email": "email@example.com",

4

"password": "password",

5

}

6

)


1

response = supabase.auth.sign_in_anonymously(

2

{"options": {"captcha_token": ""}}

3

)


1

response = supabase.auth.sign_in_with_password(

2

{

3

"email": "email@example.com",

4

"password": "example-password",

5

}

6

)


1

response = supabase.auth.sign_in_with_id_token(

2

{

3

"provider": "google",

4

"token": "your-id-token",

5

}

6

)


1

response = supabase.auth.sign_in_with_otp(

2

{

3

"email": "email@example.com",

4

"options": {

5

"email_redirect_to": "https://example.com/welcome",

6

},

7

}

8

)


1

response = supabase.auth.sign_in_with_oauth(

2

{"provider": "github"}

3

)


1

response = supabase.auth.sign_in_with_sso(

2

{"domain": "company.com"}

3

)


1

response = supabase.auth.get_claims()


1

response = supabase.auth.sign_out()


1

supabase.auth.reset_password_for_email(

2

email,

3

{

4

"redirect_to": "https://example.com/update-password",

5

}

6

)


1

response = supabase.auth.verify_otp(

2

{

3

"email": "email@example.com",

4

"token": "123456",

5

"type": "email",

6

}

7

)


1

response = supabase.auth.get_session()


1

response = supabase.auth.refresh_session()


1

response = supabase.auth.get_user()


1

response = supabase.auth.update_user(

2

{"email": "new@email.com"}

3

)


1

response = supabase.auth.get_user_identities()


1

response = supabase.auth.link_identity(

2

{"provider": "github"}

3

)


1

# retrieve all identities linked to a user

2

response = supabase.auth.get_user_identities()

3

4

# find the google identity

5

google_identity = list(

6

filter(lambda identity: identity.provider == "google", response.identities)

7

).pop()

8

9

# unlink the google identity

10

response = supabase.auth.unlink_identity(google_identity)


1

response = supabase.auth.reauthenticate()


1

response = supabase.auth.resend(

2

{

3

"type": "signup",

4

"email": "email@example.com",

5

"options": {

6

"email_redirect_to": "https://example.com/welcome",

7

},

8

}

9

)


1

response = supabase.auth.set_session(access_token, refresh_token)


1

response = supabase.auth.exchange_code_for_session(

2

{"auth_code": "34e770dd-9ff9-416c-87fa-43b31d7ef225"}

3

)



1

response = supabase.auth.mfa.enroll(

2

{

3

"factor_type": "totp",

4

"friendly_name": "your_friendly_name",

5

}

6

)


1

response = supabase.auth.mfa.challenge(

2

{"factor_id": "34e770dd-9ff9-416c-87fa-43b31d7ef225"}

3

)


1

response = supabase.auth.mfa.verify(

2

{

3

"factor_id": "34e770dd-9ff9-416c-87fa-43b31d7ef225",

4

"challenge_id": "4034ae6f-a8ce-4fb5-8ee5-69a5863a7c15",

5

"code": "123456",

6

}

7

)


1

response = supabase.auth.mfa.challenge_and_verify(

2

{

3

"factor_id": "34e770dd-9ff9-416c-87fa-43b31d7ef225",

4

"code": "123456",

5

}

6

)


1

response = supabase.auth.mfa.unenroll(

2

{"factor_id": "34e770dd-9ff9-416c-87fa-43b31d7ef225"}

3

)


1

response = supabase.auth.mfa.get_authenticator_assurance_level()


1

from supabase import create_client

2

from supabase.lib.client_options import ClientOptions

3

4

supabase = create_client(

5

supabase_url,

6

service_role_key,

7

options=ClientOptions(

8

auto_refresh_token=False,

9

persist_session=False,

10

)

11

)

12

13

# Access auth admin api

14

admin_auth_client = supabase.auth.admin


1

response = supabase.auth.admin.get_user_by_id(1)


1

response = supabase.auth.admin.list_users()


1

response = supabase.auth.admin.create_user(

2

{

3

"email": "user@email.com",

4

"password": "password",

5

"user_metadata": {"name": "Yoda"},

6

}

7

)


1

supabase.auth.admin.delete_user(

2

"715ed5db-f090-4b8c-a067-640ecee36aa0"

3

)


1

response = supabase.auth.admin.invite_user_by_email("email@example.com")



1

response = supabase.auth.admin.update_user_by_id(

2

"11111111-1111-1111-1111-111111111111",

3

{

4

"email": "new@email.com",

5

}

6

)


1

response = supabase.auth.admin.mfa.delete_factor(

2

{

3

"id": "34e770dd-9ff9-416c-87fa-43b31d7ef225",

4

"user_id": "a89baba7-b1b7-440f-b4bb-91026967f66b"

5

}

6

)



1

response = supabase.auth.admin.oauth.list_clients()


1

response = supabase.auth.admin.oauth.get_client("client-id")


1

response = supabase.auth.admin.oauth.create_client(

2

{

3

"name": "My OAuth Client",

4

"redirect_uris": ["https://example.com/callback"]

5

}

6

)


1

response = supabase.auth.admin.oauth.update_client(

2

"client-id",

3

{

4

"name": "Updated OAuth Client",

5

"redirect_uris": ["https://example.com/callback", "https://example.com/callback2"]

6

}

7

)


1

supabase.auth.admin.oauth.delete_client("client-id")


1

response = supabase.auth.admin.oauth.regenerate_client_secret("client-id")


1

response = supabase.functions.invoke(

2

"hello-world",

3

invoke_options={

4

"body": {"name": "Functions"},

5

},

6

)


1

import os

2

import asyncio

3

from supabase import acreate_client, AsyncClient

4

5

url: str = os.environ.get("SUPABASE_URL")

6

key: str = os.environ.get("SUPABASE_KEY")

7

8

async def create_supabase():

9

supabase: AsyncClient = await acreate_client(url, key)

10

return supabase


1

channel = supabase.channel("room1")

2

3

def on_subscribe(status, err):

4

if status == RealtimeSubscribeStates.SUBSCRIBED:

5

asyncio.create_task(channel.send_broadcast(

6

"cursor-pos",

7

{"x": random.random(), "y": random.random()}

8

))

9

10

def handle_broadcast(payload):

11

print("Cursor position received!", payload)

12

13

await channel.on_broadcast(event="cursor-pos", callback=handle_broadcast).subscribe(on_subscribe)


1

await supabase.remove_channel(myChannel)


1

await supabase.remove_all_channels()


1

channels = supabase.get_channels()


1

channel = supabase.channel("room1")

2

3

def on_subscribe(status, err):

4

if status == RealtimeSubscribeStates.SUBSCRIBED:

5

asyncio.create_task(channel.send_broadcast('cursor-pos', {"x": random.random(), "y": random.random()}))

6

7

await channel.subscribe(on_subscribe)



1

response = supabase.storage.list_buckets()


1

response = supabase.storage.get_bucket("avatars")


1

response = (

2

supabase.storage

3

.create_bucket(

4

"avatars",

5

options={

6

"public": False,

7

"allowed_mime_types": ["image/png"],

8

"file_size_limit": 1024,

9

}

10

)

11

)


1

response = supabase.storage.empty_bucket("avatars")


1

response = (

2

supabase.storage

3

.update_bucket(

4

"avatars",

5

options={

6

"public": False,

7

"allowed_mime_types": ["image/png"],

8

"file_size_limit": 1024,

9

}

10

)

11

)


1

response = supabase.storage.delete_bucket("avatars")


1

with open("./public/avatar1.png", "rb") as f:

2

response = (

3

supabase.storage

4

.from_("avatars")

5

.upload(

6

file=f,

7

path="public/avatar1.png",

8

file_options={"cache-control": "3600", "upsert": "false"}

9

)

10

)


1

with open("./public/avatar1.png", "rb") as f:

2

response = (

3

supabase.storage

4

.from_("avatars")

5

.update(

6

file=f,

7

path="public/avatar1.png",

8

file_options={"cache-control": "3600", "upsert": "true"}

9

)

10

)


1

response = (

2

supabase.storage

3

.from_("avatars")

4

.move(

5

"public/avatar1.png",

6

"private/avatar2.png"

7

)

8

)


1

response = (

2

supabase.storage

3

.from_("avatars")

4

.copy(

5

"public/avatar1.png",

6

"private/avatar2.png"

7

)

8

)


1

response = (

2

supabase.storage

3

.from_("avatars")

4

.create_signed_url(

5

"folder/avatar1.png",

6

60

7

)

8

)


1

response = (

2

supabase.storage

3

.from_("avatars")

4

.create_signed_urls(

5

["folder/avatar1.png", "folder/avatar2.png"],

6

60

7

)

8

)


1

response = (

2

supabase.storage

3

.from_("avatars")

4

.create_signed_upload_url("folder/avatar1.png")

5

)


1

with open("./public/avatar1.png", "rb") as f:

2

response = (

3

supabase.storage

4

.from_("avatars")

5

.upload_to_signed_url(

6

path="folder/cat.jpg",

7

token="token-from-create_signed_upload_url",

8

file=f,

9

)

10

)


1

response = (

2

supabase.storage

3

.from_("avatars")

4

.get_public_url("folder/avatar1.jpg")

5

)


1

with open("./myfolder/avatar1.png", "wb+") as f:

2

response = (

3

supabase.storage

4

.from_("avatars")

5

.download("folder/avatar1.png")

6

)

7

f.write(response)


1

response = (

2

supabase.storage

3

.from_("avatars")

4

.remove(["folder/avatar1.png"])

5

)


1

response = (

2

supabase.storage

3

.from_("avatars")

4

.list(

5

"folder",

6

{

7

"limit": 100,

8

"offset": 0,

9

"sortBy": {"column": "name", "order": "desc"},

10

}

11

)

12

)



1

response = supabase.storage.analytics().create("analytics-bucket")


1

response = supabase.storage.analytics().list()


1

response = supabase.storage.analytics().delete("analytics-bucket")



1

supabase.storage.vectors().create_bucket("vectors-bucket")


1

supabase.storage.vectors().delete_bucket("vectors-bucket")


1

response = supabase.storage.vectors().get_bucket("vectors-bucket")


1

response = supabase.storage.vectors().list_buckets()


1

supabase.storage.vectors().from_("vectors-bucket").create_index(

2

index_name="my-index",

3

dimension=128,

4

distance_metric="cosine",

5

data_type="float32"

6

)


1

supabase.storage.vectors().from_("vectors-bucket").delete_index("my-index")


1

response = supabase.storage.vectors().from_("vectors-bucket").get_index("my-index")


1

response = supabase.storage.vectors().from_("vectors-bucket").list_indexes()


1

supabase.storage.vectors().from_("vectors-bucket").index("my-index").delete(["vector-1", "vector-2"])


1

response = supabase.storage.vectors().from_("vectors-bucket").index("my-index").get("vector-1")


1

response = supabase.storage.vectors().from_("vectors-bucket").index("my-index").list()


1

supabase.storage.vectors().from_("vectors-bucket").index("my-index").put([

2

{

3

"key": "vector-1",

4

"data": {"float32": [0.1, 0.2, 0.3]},

5

"metadata": {"category": "example"}

6

}

7

])


1

response = supabase.storage.vectors().from_("vectors-bucket").index("my-index").query(

2

query_vector={"float32": [0.1, 0.2, 0.3]},

3

topK=10

4

)