---
title: "Finish a Supabase sign-in as a connection"
method: POST
path: "/storage/supabase/finish"
tags: ["Storage"]
---

# Finish a Supabase sign-in as a connection

`POST /storage/supabase/finish`

Reads the chosen project's keys with the sign-in's grant, probes the bucket with the project's S3 session credential, stores that credential encrypted, and forgets the grant.

## Request body

- object
  - `state` string, required
  - `projectRef` string, required
  - `id` string, required
  - `bucket` string, required
  - `publicBaseUrl` string, uri
  - `createBucket` boolean

## Response `201`

Connected

- object
  - `data` object, required
    - `bucket` string, required
    - `publicBaseUrl` string, uri
    - `endpoint` string, uri, required
    - `region` string, required
    - `pathStyle` boolean, required
    - `accountId` string
    - `jurisdiction` 'eu' | 'fedramp' | 'us'
    - `projectRef` string
    - `expiresOn` number
    - `pending` true
    - `auth` 'role'
    - `access` 'read'
    - `problem` object
      - `at` number, required
      - `message` string, required
    - `pathTemplate` string
    - `onConflict` 'suffix' | 'replace'
    - `defaultDestination` true
    - `conditionalWrites` boolean
    - `id` string, required
    - `provider` string, required
    - `createdAt` number, required
    - `updatedAt` number, required
    - `deliverySummary` object
      - `jobsLast30d` integer, required
      - `bytesLast30d` integer, required
      - `lastAt` number, nullable, required
      - `lastStatus` 'delivered' | 'failed' | 'null', nullable, required
      - `lastReason` 'destination_denied' | 'signature_mismatch' | 'bucket_not_found' | 'object_too_large' | 'already_exists' | 'destination_unavailable' | 'not_deliverable' | 'null', nullable, required
    - `checks` object[]
      - `name` 'write' | 'read' | 'delete' | 'list', required
      - `status` 'passed' | 'failed' | 'skipped', required
      - `reason` 'destination_denied' | 'signature_mismatch' | 'bucket_not_found' | 'object_too_large' | 'already_exists' | 'destination_unavailable' | 'not_deliverable'
      - `message` string

## Other responses

- `400` — Invalid body, the sign-in expired, or the write probe failed
- `401` — Unauthorized
- `403` — Missing scope or role
- `409` — An id already exists

## Changes

- **2026-09-13** `e2df91eff7a2` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/rendobar/apis/rendobar-api/changes/storage/supabase/finish/post.md)

---

[API](https://skmtc.dev/rendobar/apis/rendobar-api.md) · [All operations](https://skmtc.dev/rendobar/apis/rendobar-api/llms.txt) · [OpenAPI document](https://skmtc.dev/rendobar/apis/rendobar-api/revisions/e2df91eff7a2?raw)
