Skip to content

Get a project's service configuration
experimental

get/v2/projects/{ref}/config

Returns the project's database, pooler, Auth, Data API, Realtime and Storage configuration — the same configuration a branch inherits from its base project. Each is the effective config, so a setting the project has never overridden is reported at its platform default rather than as null. Auth secrets are returned as an HMAC of their value. storage is read live from the storage service; the rest come from this platform's own records.

This endpoint is currently in its Alpha stage.

The fine-grained token must include the following permissions to access this endpoint:

  • database_config_read
  • database_read
  • database_ssl_config_read
  • database_network_restrictions_read
  • auth_config_read
  • data_api_config_read
  • realtime_config_read
  • storage_config_read

Path parameters

  • ref
    Required
    string

    Project ref

Response codes

  • 200
  • 401
  • 403
  • 429

Response (200)

{
"data": {
"type": "project_config",
"id": "lorem",
"attributes": {
"database": {
"major_version": -9007199254740991,
"ssl_enforced": true,
"network_restrictions": {
"entitlement": "disallowed",
"status": "stored",
"allowed_cidrs": [
{
"address": "lorem",
"type": "v4"
}
],
"updated_at": "lorem",
"applied_at": "lorem"
},
"postgres_settings": {
"effective_cache_size": "lorem",
"logical_decoding_work_mem": "lorem",
"autovacuum_max_workers": 1,
"autovacuum_work_mem": "lorem",
"log_autovacuum_min_duration": "444444444444444444444444444444444444444444444444444",
"log_checkpoints": true,
"log_connections": true,
"log_disconnections": true,
"log_duration": true,
"log_lock_waits": true,
"log_recovery_conflict_waits": true,
"log_replication_commands": true,
"log_startup_progress_interval": "444444444444444444444444444444444444444444444444444",
"log_temp_files": "lorem",
"maintenance_work_mem": "lorem",
"track_activity_query_size": "lorem",
"max_connections": 1,
"max_locks_per_transaction": 10,
"max_logical_replication_workers": 0,
"max_parallel_maintenance_workers": 0,
"max_parallel_workers": 0,
"max_parallel_workers_per_gather": 0,
"max_replication_slots": -9007199254740991,
"max_slot_wal_keep_size": "lorem",
"max_standby_archive_delay": "lorem",
"max_standby_streaming_delay": "lorem",
"max_sync_workers_per_subscription": 0,
"max_wal_size": "lorem",
"max_wal_senders": -9007199254740991,
"max_worker_processes": 0,
"session_replication_role": "origin",
"shared_buffers": "lorem",
"statement_timeout": "444444444444444444444444444444444444444444444444444",
"track_commit_timestamp": true,
"wal_keep_size": "lorem",
"wal_sender_timeout": "444444444444444444444444444444444444444444444444444",
"work_mem": "lorem",
"checkpoint_timeout": "444444444444444444444444444444444444444444444444444",
"hot_standby_feedback": true,
"cron_log_statement": true,
"pg_net_batch_size": 0,
"pg_stat_statements_max": 100
}
},
"pooler": {
"pool_mode": "transaction",
"ignore_startup_parameters": "lorem",
"server_idle_timeout": -9007199254740991,
"server_lifetime": -9007199254740991,
"query_wait_timeout": -9007199254740991,
"reserve_pool_size": -9007199254740991,
"default_pool_size": -9007199254740991,
"max_client_conn": -9007199254740991
},
"auth": {
"property1": null,
"property2": null
},
"api": {
"db_schema": "lorem",
"db_extra_search_path": "lorem",
"max_rows": -9007199254740991,
"db_pool_acquisition_timeout": -9007199254740991,
"db_pool_max_lifetime": 0,
"db_pool_max_idletime": 0,
"db_pool": -9007199254740991
},
"realtime": {
"private_only": true,
"max_concurrent_users": -9007199254740991,
"max_events_per_second": -9007199254740991,
"max_bytes_per_second": -9007199254740991,
"max_channels_per_client": -9007199254740991,
"max_joins_per_second": -9007199254740991,
"max_presence_events_per_second": -9007199254740991,
"max_payload_size_in_kb": -9007199254740991,
"presence_enabled": true,
"suspend": true,
"connection_pool": -9007199254740991,
"postgres_changes_pool": -9007199254740991
},
"storage": {
"file_size_limit": -9007199254740991,
"features": {
"image_transformation": {
"enabled": true
},
"s3_protocol": {
"enabled": true
},
"purge_cache": {
"enabled": true
},
"iceberg_catalog": {
"enabled": true,
"max_namespaces": -9007199254740991,
"max_tables": -9007199254740991,
"max_catalogs": -9007199254740991
},
"vector_buckets": {
"enabled": true,
"max_buckets": -9007199254740991,
"max_indexes": -9007199254740991
}
},
"capabilities": {
"list_v2": true,
"iceberg_catalog": true,
"object_versioning": true
},
"upstream_target": "main",
"migration_version": "lorem"
}
}
}
}
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Resource type.",
"enum": [
"project_config"
]
},
"id": {
"type": "string",
"description": "Project ref."
},
"attributes": {
"type": "object",
"properties": {
"database": {
"type": "object",
"properties": {
"major_version": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "The major Postgres version the database runs. `17` covers both Postgres 17 and Oriole on 17, since Oriole is a storage engine rather than a version."
},
"ssl_enforced": {
"type": "boolean",
"description": "Whether the database rejects plaintext connections"
},
"network_restrictions": {
"type": "object",
"properties": {
"entitlement": {
"type": "string",
"enum": [
"disallowed",
"allowed"
]
},
"status": {
"type": "string",
"enum": [
"stored",
"applied"
],
"description": "Whether the allowlist below is applied to the project or only stored."
},
"allowed_cidrs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"v4",
"v6"
]
}
},
"required": [
"address",
"type"
]
}
},
"updated_at": {
"type": "string"
},
"applied_at": {
"type": "string"
}
},
"required": [
"entitlement",
"status",
"allowed_cidrs"
]
},
"postgres_settings": {
"type": "object",
"properties": {
"effective_cache_size": {
"type": "string"
},
"logical_decoding_work_mem": {
"type": "string"
},
"autovacuum_max_workers": {
"type": "integer",
"minimum": 1,
"maximum": 262143
},
"autovacuum_work_mem": {
"type": "string"
},
"log_autovacuum_min_duration": {
"type": "string",
"description": "Default unit: ms",
"pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$"
},
"log_checkpoints": {
"type": "boolean"
},
"log_connections": {
"type": "boolean"
},
"log_disconnections": {
"type": "boolean"
},
"log_duration": {
"type": "boolean"
},
"log_lock_waits": {
"type": "boolean"
},
"log_recovery_conflict_waits": {
"type": "boolean"
},
"log_replication_commands": {
"type": "boolean"
},
"log_startup_progress_interval": {
"type": "string",
"description": "Default unit: ms",
"pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$"
},
"log_temp_files": {
"type": "string"
},
"maintenance_work_mem": {
"type": "string"
},
"track_activity_query_size": {
"type": "string"
},
"max_connections": {
"type": "integer",
"minimum": 1,
"maximum": 262143
},
"max_locks_per_transaction": {
"type": "integer",
"minimum": 10,
"maximum": 2147483640
},
"max_logical_replication_workers": {
"type": "integer",
"minimum": 0,
"maximum": 262143
},
"max_parallel_maintenance_workers": {
"type": "integer",
"minimum": 0,
"maximum": 1024
},
"max_parallel_workers": {
"type": "integer",
"minimum": 0,
"maximum": 1024
},
"max_parallel_workers_per_gather": {
"type": "integer",
"minimum": 0,
"maximum": 1024
},
"max_replication_slots": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_slot_wal_keep_size": {
"type": "string"
},
"max_standby_archive_delay": {
"type": "string"
},
"max_standby_streaming_delay": {
"type": "string"
},
"max_sync_workers_per_subscription": {
"type": "integer",
"minimum": 0,
"maximum": 262143
},
"max_wal_size": {
"type": "string"
},
"max_wal_senders": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_worker_processes": {
"type": "integer",
"minimum": 0,
"maximum": 262143
},
"session_replication_role": {
"type": "string",
"enum": [
"origin",
"replica",
"local"
]
},
"shared_buffers": {
"type": "string"
},
"statement_timeout": {
"type": "string",
"description": "Default unit: ms",
"pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$"
},
"track_commit_timestamp": {
"type": "boolean"
},
"wal_keep_size": {
"type": "string"
},
"wal_sender_timeout": {
"type": "string",
"description": "Default unit: ms",
"pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$"
},
"work_mem": {
"type": "string"
},
"checkpoint_timeout": {
"type": "string",
"description": "Default unit: s",
"pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$"
},
"hot_standby_feedback": {
"type": "boolean"
},
"cron_log_statement": {
"type": "boolean"
},
"pg_net_batch_size": {
"type": "integer",
"minimum": 0,
"maximum": 32767
},
"pg_stat_statements_max": {
"type": "integer",
"minimum": 100,
"maximum": 45000
}
},
"description": "Postgres parameter overrides. Empty when the project runs entirely on defaults."
}
},
"required": [
"major_version",
"ssl_enforced",
"network_restrictions",
"postgres_settings"
]
},
"pooler": {
"type": "object",
"properties": {
"pool_mode": {
"type": "string",
"enum": [
"transaction",
"session",
"statement"
]
},
"ignore_startup_parameters": {
"type": "string"
},
"server_idle_timeout": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"server_lifetime": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"query_wait_timeout": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"reserve_pool_size": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"default_pool_size": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Defaults to the pooler's size for the project's compute when not overridden."
},
"max_client_conn": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Defaults to the pooler's size for the project's compute when not overridden."
}
},
"required": [
"pool_mode",
"ignore_startup_parameters",
"server_idle_timeout",
"server_lifetime",
"query_wait_timeout",
"reserve_pool_size",
"default_pool_size",
"max_client_conn"
]
},
"auth": {
"type": "object",
"additionalProperties": {},
"description": "Effective Auth config, keyed by lowercased GoTrue setting name and resolved through the `gotrue_config` view, so a setting the project has never overridden is reported at its platform default. Secrets are returned as an HMAC of their value, never in plaintext."
},
"api": {
"type": "object",
"properties": {
"db_schema": {
"type": "string",
"description": "Schemas exposed through the Data API"
},
"db_extra_search_path": {
"type": "string"
},
"max_rows": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"db_pool_acquisition_timeout": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"db_pool_max_lifetime": {
"type": "integer",
"minimum": 0,
"maximum": 3600
},
"db_pool_max_idletime": {
"type": "integer",
"minimum": 0,
"maximum": 60
},
"db_pool": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "If `null`, no pool size is written to the project's PostgREST config and PostgREST's own default applies. The platform does not pick a value here.",
"nullable": true
}
},
"required": [
"db_schema",
"db_extra_search_path",
"max_rows",
"db_pool_acquisition_timeout",
"db_pool_max_lifetime",
"db_pool_max_idletime",
"db_pool"
]
},
"realtime": {
"type": "object",
"properties": {
"private_only": {
"type": "boolean"
},
"max_concurrent_users": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_events_per_second": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_bytes_per_second": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_channels_per_client": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_joins_per_second": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_presence_events_per_second": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_payload_size_in_kb": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"presence_enabled": {
"type": "boolean"
},
"suspend": {
"type": "boolean"
},
"connection_pool": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Defaults to Realtime's pool size for the project's compute when not overridden."
},
"postgres_changes_pool": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "If `null`, no override is stored and Realtime applies its own default.",
"nullable": true
}
},
"required": [
"private_only",
"max_concurrent_users",
"max_events_per_second",
"max_bytes_per_second",
"max_channels_per_client",
"max_joins_per_second",
"max_presence_events_per_second",
"max_payload_size_in_kb",
"presence_enabled",
"suspend",
"connection_pool",
"postgres_changes_pool"
]
},
"storage": {
"type": "object",
"properties": {
"file_size_limit": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"format": "int64"
},
"features": {
"type": "object",
"properties": {
"image_transformation": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
},
"required": [
"enabled"
]
},
"s3_protocol": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
},
"required": [
"enabled"
]
},
"purge_cache": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
},
"required": [
"enabled"
]
},
"iceberg_catalog": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"max_namespaces": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_tables": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_catalogs": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"enabled",
"max_namespaces",
"max_tables",
"max_catalogs"
]
},
"vector_buckets": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"max_buckets": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_indexes": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"enabled",
"max_buckets",
"max_indexes"
]
}
},
"required": [
"image_transformation",
"s3_protocol",
"purge_cache",
"iceberg_catalog",
"vector_buckets"
]
},
"capabilities": {
"type": "object",
"properties": {
"list_v2": {
"type": "boolean"
},
"iceberg_catalog": {
"type": "boolean"
},
"object_versioning": {
"type": "boolean"
}
},
"required": [
"list_v2",
"iceberg_catalog",
"object_versioning"
]
},
"upstream_target": {
"type": "string",
"enum": [
"main",
"canary"
]
},
"migration_version": {
"type": "string",
"nullable": true
}
},
"required": [
"file_size_limit",
"features",
"capabilities",
"upstream_target",
"migration_version"
],
"description": "Read from the storage service's admin API rather than the middleware DB, so unlike the rest of this resource it reflects the tenant's live config."
}
},
"required": [
"database",
"pooler",
"auth",
"api",
"realtime",
"storage"
]
}
},
"required": [
"type",
"id",
"attributes"
]
}
},
"required": [
"data"
]
}